c++ matrices[3][4]

Iniciado por lukaszg_15, 25 Marzo 2014, 18:25 PM

0 Miembros y 1 Visitante están viendo este tema.

lukaszg_15

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 (cpp) [Seleccionar]
#include<iostream>
#include<cstdlib>
#include<fstream>

using namespace std;

int main ()
{
   int mata[3][4];
   int matb[3][4];
   int res[3][4];
   
for (int f=0; f<=3; f++){
for (int c=0; c<=4; c++)
{ cout<<"Matriz A["<<f<<"]["<<c<<"] = "; cin>> mata[f][c]; }
}

for (int i=0; i<=3; i++){
for (int b=0; b<=4; b++)
{ cout<<"Matriz B["<<i<<"]["<<b<<"] = "; cin>> matb[i][b]; }
}

for (int i=0; i<=3; i++){
for (int c=0; c<=4; c++){
   
   res[i][c]= mata[i][c] + matb[i][c];
   
   cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<c<<"]: "<< res[i][c]<<endl;
}
   }


system ("pause");
return 0;
}

rir3760

El problema se debe a que en todos los bucles utilizas el operador "<=" cuando deberia ser "<".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

lukaszg_15

perfecto muchas gracias, me fijare mas la proxima vez.

Yoel Alejandro

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 (cpp) [Seleccionar]

int main ()
{
    int mata[3][4];
    int matb[3][4];
    int res[3][4];
    int i, j;
   
for (i=0; i<3; i++){
for (j=0; j<4; j++)
{ cout<<"Matriz A["<<i<<"]["<<j<<"] = "; cin>> mata[i][j]; }
}

for (i=0; i<3; i++){
for (j=0; j<4; j++)
{ cout<<"Matriz j["<<i<<"]["<<j<<"] = "; cin>> matb[i][j]; }
}

for (i=0; i<3; i++) {
for (j=0; j<4; j++) {
res[i][j]= mata[i][j] + matb[i][j];

cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<j<<"]: "<< res[i][j]<<endl;
}
}
getchar();
return 0;
}


o si prefieres definir los contadores como locales del ciclo:
Código (cpp) [Seleccionar]

int main ()
{
    int mata[3][4];
    int matb[3][4];
    int res[3][4];
   
for (int i=0; i<3; i++){
for (int j=0; j<4; j++)
{ cout<<"Matriz A["<<i<<"]["<<j<<"] = "; cin>> mata[i][j]; }
}

for (int i=0; i<3; i++){
for (int j=0; j<4; j++)
{ cout<<"Matriz j["<<i<<"]["<<j<<"] = "; cin>> matb[i][j]; }
}

for (int i=0; i<3; i++) {
for (int j=0; j<4; j++) {
res[i][j]= mata[i][j] + matb[i][j];

cout<< "Resultado Suma matrices: " <<"["<< i <<"]["<<j<<"]: "<< res[i][j]<<endl;
}
}
getchar();
return 0;
}


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.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

lukaszg_15

gracias por la observacion nunca esta de mas saber hacerlo correctamente.  :xD

leosansan

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 (cpp) [Seleccionar]
#include <iostream>
#include<cstdio>

#define FILAS     3
#define COLUMNAS  4

using namespace std;
int main()
{
   int A[FILAS][COLUMNAS];
   int B[FILAS][COLUMNAS];
   int SUMA[FILAS][COLUMNAS];
   int i, j;

   for (i=0; i<FILAS; i++){
       for (j=0; j<COLUMNAS; j++){
           cout<<"A["<<i<<"]["<<j<<"] = ";
           cin>> A[i][j];
       }
   }
   for (i=0; i<FILAS; i++){
       for (j=0; j<COLUMNAS; j++){
           cout<<"B["<<i<<"]["<<j<<"] = ";
           cin>> B[i][j];
       }
   }
   for (i=0; i<FILAS; i++) {
     for (j=0; j<COLUMNAS; j++) {
       SUMA[i][j]= A[i][j] + B[i][j];
       cout<< "SUMA" <<"["<< i <<"]["<<j<<"]= "<< SUMA[i][j]<<endl;
     }
   }
   for (i=0; i<FILAS; i++){
     for (j=0; j<COLUMNAS; j++){
       cout<<SUMA[i][j]<<"  ";
     }
     cout<< endl;
   }
   getchar();
   return 0;
}



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





Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón