|
991
|
Programación / Programación C/C++ / Re: AYUDA !!! Programa calcula raices n-esimas
|
en: 24 Febrero 2013, 09:16 am
|
int main(int na, char *arg[]) { double v; double n; if (na < 3) { fprintf(stderr, "Introduce radicando y número\n" "Así: \n" "\t%s <radicando> <numero>\n" "\n\ny yo te daré su raiz enésima \n\n" ,arg[0]); exit(-1); return (-1); } v = atof(arg[2]); n = atof(arg[1]); if (v<= 0) { fprintf(stderr, "El número debe ser positivo.\n"); exit(-1); } if (n<= 1) { fprintf(stderr, "El radicando debe ser mayor de 1.\n"); exit(-1); } ouble pow(double x, double n); //<==¿ESTO QUE PINTA AQUI? las // declaraciones yson antes del main double f(double x)//<==¿ESTO QUE PINTA AQUI? las funciones han de estar fuera de main { double v; double n; return pow(x, n)-v; //Función cuya raíz busco }
double Df(double x)//<==¿ESTO QUE PINTA AQUI? las funciones han de estar fuera de main { double n; return n*(pow(x, (n-1))); //Derivada de la función f(x) } double newton(double semilla, double tolerancia)//<==¿ESTO QUE PINTA AQUI? las funciones han de estar fuera de main {[/color] double x1, x2; double dif;
x1 = semilla; do { x2 = x1 - f(x1)/Df(x1); dif = fabs(x2-x1); x1 = x2; } while (dif > x2*tolerancia); return x1; double raiz = newton(1.0, 1e-9); printf("La raíz enésima es %17.12f\n",raiz ); return 0; }
Ahora sólo me marca este error
"nraices.c:87: error: expected declaration or statement at end of input" Por los dos corchetes que tengo en rojo
Fíjate en los comentarios que te pongo en "tu" código.
Te dejo como sería el formato del código funcionando, ya tu lo pasas a argumentos. Fíjate en que forma tomo la función, para evitar raices así como su derivada. También te dejo un par de printf para que observes la "evolución" de la aproximación;#include <stdio.h> #include <stdlib.h> #include <math.h> #define RAIZ 2.0 #define N 3.0 /*numero del que queremos hallar la raiz*/ #define SEMILLA 1.0 #define TOLERANCIA 1e-9 double f( double x); double Df( double x ); double newton(double x); int main(){ double raizN = newton( RAIZ); printf("La raiz %lf de %lf es %1.12lf\n",RAIZ,N,raizN);//calculo Newton return 0; } /**********************************************/ double newton( double x) { double x1, x2; double dif; double dif_; x1 = SEMILLA; do { x2 = x1 - f(x1)/Df(x1); printf("f(x1,RAIZ) %1.12lf Df(x1,RAIZ) %1.12lf\n",f(x1),Df(x1));//prescindible dif_=x2-x1; if (dif_<0) dif_=-dif_; printf("dif %1.12lf\n",dif_);//prescindible printf("x1= %1.12lf x2= %1.12lf fabs %1.12lf\n",x1,x2,dif_);//prescindible x1 = x2; } while (dif_ > x2*TOLERANCIA); return x1; } /**********************************************/ double f ( double x) { /* x = (N)(^1/RAIZ) ==> x^RAIZ-N = f */ return (pow(x, RAIZ)-N); } /**********************************************/ double Df( double x ) { /* Df = RAIZ*x^(RAIZ-1) */ return RAIZ*(pow(x, RAIZ-1)); } /**********************************************/
Saluditos!.
|
|
|
993
|
Programación / Programación C/C++ / Re: Vector de vectores C++
|
en: 23 Febrero 2013, 22:13 pm
|
no se mira. lass SceneMap : public Scene { public: SceneMap(string name,int z=0); ~SceneMap(); void Update(); private: vector<vector <int> > i_Map;//tamaño del mapa ...
SceneMap::SceneMap(string name,int z){ setZ(z); ifstream file(name.c_str()); file >> s_NameTiles; file >> i_SizeTile; file >> i_SizeMapW; file >> i_SizeMapH; Image_TileOrig.loadFromFile(s_NameTiles); i_SizeTileW = Image_TileOrig.getSize().x/i_SizeTile; i_SizeTileH = Image_TileOrig.getSize().y/i_SizeTile; Image_TileDest.create(i_SizeMapW*i_SizeTile,i_SizeMapH*i_SizeTile,sf::Color::Red); // vector<int> vt; <====="esto no seria sino": vector< vector<int> > vt ( i_SizeMapH, vector<int> (i_SizeMapW) ); for(int i=0;i<i_SizeMapH;i++){ for(int j=0;j<i_SizeMapW;j++){ vt.push_back(0); file >> vt[j]; Image_TileDest.copy(Image_TileOrig,j*i_SizeTile,i*i_SizeTile,sf::IntRect(( ((vt[j]%i_SizeTileW)-1) * i_SizeTile),(( (vt[j]/i_SizeTileW)) * i_SizeTile),i_SizeTile,i_SizeTile)); } i_Map.push_back(vt); vt.clear(); }
.................... Espero que veas en el código mi propuesta y te sirva.
..............No obstante veo una incongruencia ya que vt se declara como bidimensional pero en líneas posteriores parece actuar como unidimensional ¿¿¿???. No, no tiene sentido.
Te lo dejo por si te sirve de algo. Saluditos!.
|
|
|
994
|
Programación / Programación C/C++ / Re: Vector de vectores C++
|
en: 23 Febrero 2013, 20:54 pm
|
Yo esque cuando declaro el vector aún no se el tamaño, porque es dinamico y no se como hacerlo cuando se el tamaño exacto, por eso lo he echo como en el ejemplo.
Supongo que aunque dinámico en algún momento tendrás que introducir las dimensiones del mismo, en el ejemplo que propones están dimensionados a priori a 10. En otro caso:#include <iostream> #include<vector> #include <iomanip> using namespace std; int main() { int m,n; cout<<"introduzca el numero de filas"<<endl; cin>>m; cout<<"introduzca el numero de columnas"<<endl; cin>>n; vector< vector<int> > Vector2 ( m, vector<int> (n) ); for(int y=0;y<m;y++){ for(int x=0;x<n;x++){ Vector2[y][x]=(x+y); } } for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) cout<< setw ( 3 ) << Vector2[i][j] <<' '; cout<<'\n'; } return 0; }
Saluditos!.
|
|
|
995
|
Programación / Programación C/C++ / Re: Comprobar colisión de 2 cuadrados en SDL
|
en: 23 Febrero 2013, 20:47 pm
|
Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colisión es 8 de alto y esta justo en el centro los vértices del cuadro están fuera.
No,no está mal, siempre que trabajes con las coordenadas de los vértices de ambos cuadrados. El caso que planteas lo cubre los dos primeros casos del if, ya que antes de "entrar" colisiona. Y partimos que el cuadrado azul está inicialmente fuera.
Además en mí propuesta pueden moverse ambos cuadrados, todo se reduce a la comparación de las coordenadas.
Saluditos!.
|
|
|
996
|
Programación / Programación C/C++ / Re: Vector de vectores C++
|
en: 23 Febrero 2013, 17:38 pm
|
Creo que el ejemplo te valdrá y aclarará un poco:#include <iostream> #include<vector> #include <iomanip> using namespace std; int main() { vector< vector<int> > Vector2 ( 10, vector<int> (10) ); for(int y=0;y<10;y++){ for(int x=0;x<10;x++){ Vector2[y][x]=(x+y); } } for ( int i = 0; i < 10; i++ ) { for ( int j = 0; j < 10; j++ ) cout<< setw ( 3 ) << Vector2[i][j] <<' '; cout<<'\n'; } return 0; }
Saluditos!.
|
|
|
997
|
Programación / Programación C/C++ / Re: Comprobar colisión de 2 cuadrados en SDL
|
en: 23 Febrero 2013, 16:47 pm
|
Y funciona, pero me parece demasiado code, quería saber si se puede optimizar de alguna forma.
Como no lo pones, no sé que tal estará de optimizado ese código, pero en sí la cosa es relativamente sencilla.
Los símbolos se corresponden con: sd=superor derecha
si=superior izquierda
ii=inferior izquierda
id=inferior derecha
x e y para el cuadrado rojo
x_c e y_c para el cuadrado negro
Se producirá colisión si:if ((xid>x_csi && yid<y_csi) || (xsd>x_cii && ysd>y_cii) || (xsi<x_cid && ysi>y_cid) || (xii<x_csd && yii<y_csd) )
Saluditos!.
|
|
|
998
|
Programación / Programación C/C++ / Re: transponer matriz c++
|
en: 23 Febrero 2013, 15:56 pm
|
Me temo que tienes mal declarado el tipo de vector bidimensional. Además pretendes guardar en una matriz mxn otra de nxm ¡ ¡ ¡ , it´s imposible!. Tendrás para ello que crear otra matriz de nxm y en ella guardar los traspuestos.
Te lo paso sin función, eso ya es cosa tuya: #include<iostream> #include <cstdlib> #include<vector> #include<algorithm> #include <iomanip> using namespace std; int main(){ int m,n; cout<<"introduzca el numero de filas"<<endl; cin>>m; cout<<"introduzca el numero de columnas"<<endl; cin>>n; vector<vector<int> > matriz ( m, vector<int> ( n ) ); vector<vector<int> > matrizt ( n, vector<int> ( m ) ); int k = 0; for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ){ //cout << "["<<i+1<<"]"<< "["<<j+1<<"]= ";/*activa esta y la siguiente para entrar a mano*/ //cin >>matriz[i][j]; matriz[i][j] = k++;/*y desactivas esta*/ } } for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) cout<< setw ( 3 ) << matriz[i][j] <<' '; cout<<'\n'; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ matrizt[i][j]=matriz[j][i]; } } cout<<'\n'; for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < m; j++ ) cout<< setw ( 3 ) << matrizt[i][j] <<' '; cout<<'\n'; }system("pause"); // muestra(matriz,n,m); // transpon(matriz,n,m); system("pause"); return 0; }
Saluditos!.
|
|
|
999
|
Programación / Programación C/C++ / Re: [SOLUCIONADO] me salta el getline
|
en: 22 Febrero 2013, 23:31 pm
|
Hola en este programa no deja escribir el nombre porque pasa directamente al otro codigo quisiera saber porque y cual seria la solucion
Problemas de buffer con \n.Te los "comes" con un while, o su función equivalente en C++:#include <iostream> #include <cstdio> using std::cout; using std::cin; using std::endl; #include <string> using std::getline; using std::string; int main() { int numero1; int numero2; double numero3; string nombre; cout << "Bienvenido, escriba 1 numero entero\n"; cin >> numero1; cout << "Bien! ahora escriba un numero con decimales!\n"; cin >> numero3; cout << "Escriba un numero entero\n"; cin >> numero2; while (getchar ()!='\n'); cout << "Escribe tu nombre y apellido!"; while (getchar ()!='\n'); cout << "\nBienvenido: " << nombre << endl; cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2; cout << "hagamos unas cuentas..."; cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl; numero3 = static_cast <double> (numero1) / numero2; cout << "tomando enteramente seria: " << numero1 / numero2; cout << "tomando con static es: " << numero3; cin.get(); return 0; }
Saluditos!.
|
|
|
1000
|
Programación / Programación C/C++ / Re: Ayuda con un programailla de sumas aritmeticas
|
en: 20 Febrero 2013, 20:43 pm
|
..................................................... el problema que me da es que en la pagina que me diste de wikipedia copie la formula pero se desfasa .............. ......................................................
Eso te pasa por copiar de la Wikipedia en lugar de copiar de mí código Mejor cuelgas tú código para ver dónde puede estar el error.
Pero te insisto, el mío lo saque con la fórmula de WikiP. y no desfasa.
Saluditos!.
|
|
|
|
|
|
|