Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lukaszg_15 en 25 Marzo 2014, 18:25 pm



Título: c++ matrices[3][4]
Publicado por: lukaszg_15 en 25 Marzo 2014, 18:25 pm
hola tengo una duda en un ejercicio, lo tengo todo hecho pero no me hace la suma de forma correcta, es decir por ejemplo no me suma mata[0][1] con matb[0][1] lo suma con otro numero y no entiendo la razon, aqui os dejo el ejercicio:

Código
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main ()
  8. {
  9.    int mata[3][4];
  10.    int matb[3][4];
  11.    int res[3][4];
  12.  
  13. for (int f=0; f<=3; f++){
  14. for (int c=0; c<=4; c++)
  15. { cout<<"Matriz A["<<f<<"]["<<c<<"] = "; cin>> mata[f][c]; }
  16. }
  17.  
  18. for (int i=0; i<=3; i++){
  19. for (int b=0; b<=4; b++)
  20. { cout<<"Matriz B["<<i<<"]["<<b<<"] = "; cin>> matb[i][b]; }
  21. }
  22.  
  23. for (int i=0; i<=3; i++){
  24. for (int c=0; c<=4; c++){
  25.  
  26.    res[i][c]= mata[i][c] + matb[i][c];
  27.  
  28.    cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<c<<"]: "<< res[i][c]<<endl;
  29. }
  30.    }
  31.  
  32.  
  33. system ("pause");
  34. return 0;
  35. }


Título: Re: c++ matrices[3][4]
Publicado por: rir3760 en 25 Marzo 2014, 18:39 pm
El problema se debe a que en todos los bucles utilizas el operador "<=" cuando deberia ser "<".

Un saludo


Título: Re: c++ matrices[3][4]
Publicado por: lukaszg_15 en 25 Marzo 2014, 18:41 pm
perfecto muchas gracias, me fijare mas la proxima vez.


Título: Re: c++ matrices[3][4]
Publicado por: Yoel Alejandro en 25 Marzo 2014, 19:34 pm
Y no tienes que inventar tantos nombres de índices, i, j, b, c, f, etc. Puedes usar siempre los mismos nombres i, j, y el programa queda más sencillo:
Código
  1. int main ()
  2. {
  3.    int mata[3][4];
  4.    int matb[3][4];
  5.    int res[3][4];
  6.    int i, j;
  7.  
  8. for (i=0; i<3; i++){
  9. for (j=0; j<4; j++)
  10. { cout<<"Matriz A["<<i<<"]["<<j<<"] = "; cin>> mata[i][j]; }
  11. }
  12.  
  13. for (i=0; i<3; i++){
  14. for (j=0; j<4; j++)
  15. { cout<<"Matriz j["<<i<<"]["<<j<<"] = "; cin>> matb[i][j]; }
  16. }
  17.  
  18. for (i=0; i<3; i++) {
  19. for (j=0; j<4; j++) {
  20. res[i][j]= mata[i][j] + matb[i][j];
  21.  
  22. cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<j<<"]: "<< res[i][j]<<endl;
  23. }
  24. }
  25. getchar();
  26. return 0;
  27. }

o si prefieres definir los contadores como locales del ciclo:
Código
  1. int main ()
  2. {
  3.    int mata[3][4];
  4.    int matb[3][4];
  5.    int res[3][4];
  6.  
  7. for (int i=0; i<3; i++){
  8. for (int j=0; j<4; j++)
  9. { cout<<"Matriz A["<<i<<"]["<<j<<"] = "; cin>> mata[i][j]; }
  10. }
  11.  
  12. for (int i=0; i<3; i++){
  13. for (int j=0; j<4; j++)
  14. { cout<<"Matriz j["<<i<<"]["<<j<<"] = "; cin>> matb[i][j]; }
  15. }
  16.  
  17. for (int i=0; i<3; i++) {
  18. for (int j=0; j<4; j++) {
  19. res[i][j]= mata[i][j] + matb[i][j];
  20.  
  21. cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<j<<"]: "<< res[i][j]<<endl;
  22. }
  23. }
  24. getchar();
  25. return 0;
  26. }

En este caso preferiría el primer método porque ciertamente usarás las variables i,j a lo largo de todo el código. Recomendaría también usar getchar() en lugar de system("PAUSE") por las razones que ha sido explicadas muchas veces en el foro, jeje.


Título: Re: c++ matrices[3][4]
Publicado por: lukaszg_15 en 25 Marzo 2014, 20:18 pm
gracias por la observacion nunca esta de mas saber hacerlo correctamente.  :xD


Título: Re: c++ matrices[3][4]
Publicado por: leosansan en 25 Marzo 2014, 20:34 pm
En tu código, a no ser que sólo sea una parte, te sobran una librería: <fstream> y si quieres hacer uso de getchar en lugar de system, sobraría la librería <csdtlib> y faltaría la <cstdio>.

Yo soy más partidario de que el usuario, que normalmente no tiene pajorera idea de informática, introduzca los índices como se hace en mates, es decir el primer elemento de la matriz es el (1,1) y así sucesivamente así como llamar a las matrices con el nombre con que se declaran las variables, si no al final se puede uno liar de quién es quién. Y no queda mal una impresión final en forma de matriz de la matriz suma.

Y por último, sería partidario de declarar como macros el número de filas y columnas, no sea que tengas que cambiar esas dimensiones. Te ahorrarías ir por todo el código cambiando el 3 y el 4 por los nuevos valores en cambio con las macros sólo tienes que cambiarlos a ellos en un solo sitio:


Código
  1. #include <iostream>
  2. #include<cstdio>
  3.  
  4. #define FILAS     3
  5. #define COLUMNAS  4
  6.  
  7. using namespace std;
  8. int main()
  9. {
  10.    int A[FILAS][COLUMNAS];
  11.    int B[FILAS][COLUMNAS];
  12.    int SUMA[FILAS][COLUMNAS];
  13.    int i, j;
  14.  
  15.    for (i=0; i<FILAS; i++){
  16.        for (j=0; j<COLUMNAS; j++){
  17.            cout<<"A["<<i<<"]["<<j<<"] = ";
  18.            cin>> A[i][j];
  19.        }
  20.    }
  21.    for (i=0; i<FILAS; i++){
  22.        for (j=0; j<COLUMNAS; j++){
  23.            cout<<"B["<<i<<"]["<<j<<"] = ";
  24.            cin>> B[i][j];
  25.        }
  26.    }
  27.    for (i=0; i<FILAS; i++) {
  28.      for (j=0; j<COLUMNAS; j++) {
  29.        SUMA[i][j]= A[i][j] + B[i][j];
  30.        cout<< "SUMA" <<"["<< i <<"]["<<j<<"]= "<< SUMA[i][j]<<endl;
  31.      }
  32.    }
  33.    for (i=0; i<FILAS; i++){
  34.      for (j=0; j<COLUMNAS; j++){
  35.        cout<<SUMA[i][j]<<"  ";
  36.      }
  37.      cout<< endl;
  38.    }
  39.    getchar();
  40.    return 0;
  41. }


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: c++ matrices[3][4]
Publicado por: Eternal Idol en 25 Marzo 2014, 20:38 pm
En una oracion se resolvio el problema, no entiendo para que pusieron despues tanto codigo, traten de que escriba el codigo el que tiene el problema.