elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 [100] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 ... 132
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;



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #define RAIZ  2.0
  5. #define N  3.0   /*numero del que queremos hallar la raiz*/
  6. #define SEMILLA  1.0
  7. #define TOLERANCIA  1e-9
  8.  
  9. double f( double x);
  10. double Df(  double x );
  11. double newton(double x);
  12.  
  13. int main(){
  14.  double raizN = newton( RAIZ);
  15.  printf("La raiz %lf  de %lf es %1.12lf\n",RAIZ,N,raizN);//calculo Newton
  16.  return 0;
  17. }
  18. /**********************************************/
  19. double newton(  double x)
  20. {
  21.   double x1, x2;
  22.   double dif;
  23.    double dif_;
  24.   x1 = SEMILLA;
  25.   do {
  26.      x2 = x1 - f(x1)/Df(x1);
  27.      printf("f(x1,RAIZ) %1.12lf  Df(x1,RAIZ) %1.12lf\n",f(x1),Df(x1));//prescindible
  28.      dif_=x2-x1;
  29.      if (dif_<0)
  30.        dif_=-dif_;
  31.      printf("dif %1.12lf\n",dif_);//prescindible
  32.      printf("x1= %1.12lf  x2= %1.12lf fabs %1.12lf\n",x1,x2,dif_);//prescindible
  33.      x1 = x2;
  34.   } while (dif_ > x2*TOLERANCIA);
  35.  
  36.   return x1;
  37. }
  38. /**********************************************/
  39. double f ( double x)
  40. {
  41.    /* x = (N)(^1/RAIZ) ==> x^RAIZ-N = f */
  42.    return (pow(x, RAIZ)-N);  
  43. }
  44. /**********************************************/
  45. double Df(  double x )
  46. {
  47.    /* Df = RAIZ*x^(RAIZ-1) */
  48.    return RAIZ*(pow(x, RAIZ-1));
  49. }
  50. /**********************************************/
  51.  

Saluditos!.
992  Programación / Programación C/C++ / Re: Comprobar colisión de 2 cuadrados en SDL en: 23 Febrero 2013, 22:24 pm
puede ser xD no estoy con muchas ganas hoy.

¡ ¡ ¡ Venga hombre ! ! ! , ;-) ;-) ;-)arriba esos ánimos ;-) ;-) ;-) que son dos días. El foro te necesita al cien por cien.

Saluditos!.
993  Programación / Programación C/C++ / Re: Vector de vectores C++ en: 23 Febrero 2013, 22:13 pm
no se mira.

Código
  1. lass SceneMap : public Scene {
  2.    public:
  3.        SceneMap(string name,int z=0);
  4.        ~SceneMap();
  5.        void Update();
  6.    private:
  7.    vector<vector <int> > i_Map;//tamaño del mapa
  8. ...
Código
  1. SceneMap::SceneMap(string name,int z){
  2.    setZ(z);
  3.    ifstream file(name.c_str());
  4.    file >> s_NameTiles;
  5.    file >> i_SizeTile;
  6.    file >> i_SizeMapW;
  7.    file >> i_SizeMapH;
  8.    Image_TileOrig.loadFromFile(s_NameTiles);
  9.    i_SizeTileW = Image_TileOrig.getSize().x/i_SizeTile;
  10.    i_SizeTileH = Image_TileOrig.getSize().y/i_SizeTile;
  11.    Image_TileDest.create(i_SizeMapW*i_SizeTile,i_SizeMapH*i_SizeTile,sf::Color::Red);
  12.   // vector<int> vt;  <====="esto no seria sino":
  13.  vector< vector<int> > vt ( i_SizeMapH, vector<int> (i_SizeMapW) );
  14.    for(int i=0;i<i_SizeMapH;i++){
  15.        for(int j=0;j<i_SizeMapW;j++){
  16.            vt.push_back(0);
  17.            file >> vt[j];
  18.            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));
  19.        }
  20.        i_Map.push_back(vt);
  21.        vt.clear();
  22.    }

....................

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.
:rolleyes:

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:

Código
  1. #include <iostream>
  2. #include<vector>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6. int main() {
  7.  int m,n;
  8.    cout<<"introduzca el numero de filas"<<endl;
  9.    cin>>m;
  10.    cout<<"introduzca el numero de columnas"<<endl;
  11.    cin>>n;
  12.  vector< vector<int> > Vector2 ( m, vector<int> (n) );
  13.  
  14.  for(int y=0;y<m;y++){
  15.      for(int x=0;x<n;x++){
  16.          Vector2[y][x]=(x+y);
  17.      }
  18.  }
  19.  for ( int i = 0; i < m; i++ ) {
  20.    for ( int j = 0; j < n; j++ )
  21.      cout<< setw ( 3 ) << Vector2[i][j] <<' ';
  22.    cout<<'\n';
  23.    }
  24.  return 0;
  25. }
  26.  

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:

Código
  1. #include <iostream>
  2. #include<vector>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6. int main() {
  7.  
  8.  vector< vector<int> > Vector2 ( 10, vector<int> (10) );
  9.  
  10.  for(int y=0;y<10;y++){
  11.      for(int x=0;x<10;x++){
  12.          Vector2[y][x]=(x+y);
  13.      }
  14.  }
  15.  for ( int i = 0; i < 10; i++ ) {
  16.    for ( int j = 0; j < 10; j++ )
  17.      cout<< setw ( 3 ) << Vector2[i][j] <<' ';
  18.    cout<<'\n';
  19.    }
  20.  return 0;
  21. }
  22.  
  23.  

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:

 
Citar

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:

Código
  1. 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:


Código
  1. #include<iostream>
  2. #include <cstdlib>
  3. #include<vector>
  4. #include<algorithm>
  5. #include <iomanip>
  6. using namespace std;
  7.  
  8.  
  9. int main(){
  10.    int m,n;
  11.    cout<<"introduzca el numero de filas"<<endl;
  12.    cin>>m;
  13.    cout<<"introduzca el numero de columnas"<<endl;
  14.    cin>>n;
  15.    vector<vector<int> > matriz ( m, vector<int> ( n ) );
  16.    vector<vector<int> > matrizt ( n, vector<int> ( m ) );
  17.    int k = 0;
  18.  for ( int i = 0; i < m; i++ ) {
  19.    for ( int j = 0; j < n; j++ ){
  20.      //cout << "["<<i+1<<"]"<< "["<<j+1<<"]= ";/*activa esta y la siguiente para entrar a mano*/
  21.      //cin >>matriz[i][j];
  22.      matriz[i][j] = k++;/*y desactivas esta*/
  23.    }
  24.  }
  25.  for ( int i = 0; i < m; i++ ) {
  26.    for ( int j = 0; j < n; j++ )
  27.      cout<< setw ( 3 ) << matriz[i][j] <<' ';
  28.    cout<<'\n';
  29.    }
  30.    for(int i=0;i<n;i++){
  31.             for(int j=0;j<m;j++){
  32.                  matrizt[i][j]=matriz[j][i];
  33.  
  34.              }
  35.    }
  36.  cout<<'\n';
  37.  for ( int i = 0; i < n; i++ ) {
  38.    for ( int j = 0; j < m; j++ )
  39.      cout<< setw ( 3 ) << matrizt[i][j] <<' ';
  40.    cout<<'\n';
  41.  }system("pause");
  42.   // muestra(matriz,n,m);
  43.   // transpon(matriz,n,m);
  44.  
  45.    system("pause");
  46.    return 0;
  47.  }
  48.  

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++:

Código
  1. #include <iostream>
  2. #include <cstdio>
  3. using std::cout;
  4. using std::cin;
  5. using std::endl;
  6.  
  7. #include <string>
  8. using std::getline;
  9. using std::string;
  10.  
  11. int main()
  12. {
  13. int numero1;
  14. int numero2;
  15. double numero3;
  16. string nombre;
  17.  
  18. cout << "Bienvenido, escriba 1 numero entero\n";
  19. cin >> numero1;
  20. cout << "Bien! ahora escriba un numero con decimales!\n";
  21. cin >> numero3;
  22. cout << "Escriba un numero entero\n";
  23. cin >> numero2;
  24. while (getchar ()!='\n');
  25. cout << "Escribe tu nombre y apellido!";
  26. while (getchar ()!='\n');
  27. cout << "\nBienvenido: " << nombre << endl;
  28. cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2;
  29. cout << "hagamos unas cuentas...";
  30. cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl;
  31. numero3 = static_cast <double> (numero1) / numero2;
  32. cout << "tomando enteramente seria: " << numero1 / numero2;
  33. cout << "tomando con static es: " << numero3;
  34. cin.get();
  35. return 0;
  36. }
  37.  
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 :laugh: :laugh:

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!.
Páginas: 1 ... 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 [100] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 ... 132
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines