Problemas en ciclo for

Iniciado por CesarCort, 7 Mayo 2014, 20:55 PM

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

CesarCort

Buenas, antes de todo soy nuevo en el foro mi nombre es Cesar Enrique soy universitario y bueno ando llevando una curso de programación, estamos aún en el uso de ciclos for y ahora había que presentar un programa que luego de ingresar los datos de la matriz  imprima y sume las diagonales de una matriz cuadrada y sus filas, Esta matriz tiene que tener un orden mayor a 3, por lo que el usuario debe poder introducir el orden (m por m, m mayor que 3).
El problema está en la parte de comentarios, antes del primer for...Cuando compilo el programa sin esta parte todo va bien, ojo que m=3, pero cuando activo el código borro el m=3 claro está porque le pido al usuario que ingrese m pero al hacer esto y luego de ingresar todos los valores de la matriz al momento de imprimir lo único que me hace es imprimir los últimos 3 datos ingresados. cuestión que no entiendo que pasa y necesito ayuda, quizás este ignorando algo tan elemental pero en este momento no se me ocurre nada, agradezco de antemano la ayuda y las intenciones :)
PD: Uso de compilador Dev c++ 5.6.2




#include <iostream>
#include <conio.h>
#include <cstdlib>



using namespace std;
int main(int argc, char** argv) {


int m,i,j,Tabla[m][m];
int Sumfil=0,SumaD=0,SumaDinv=0;

cout<<"\t OBTENGA LA SUMA DE FILAS Y DIAGIONALES DE SU MATRIZ"<<endl;
cout<<endl;
///Eh aquí el problema, cuando activo está parte del codigo borro m=3 y solo declaro int m
/*
cout<<"Ingrese el orden de su matriz Cuadrada:";
cin>>m;
if(m<=2){
cout<<"Numero no Valido";}
else{}
Tabla[m][m];
*/
for(i=1;i<=m;i++){
for(j=1;j<=m;j++){

cout<<"Ingresa Valor["<<i<<"]["<<j<<"]:";
cin>>Tabla[i][j];
}
        }

//For para mostrar la tabla
cout<<endl;
cout<<"SU MATRIZ ES:"<<endl<<endl;
for( i=1;i<=m;i++){
for(j=1;j<=m;j++){
cout<<Tabla[i][j]<<"\t";
        }
cout<<endl;
}
//Suma de filas
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++){
Sumfil+=Tabla[i][j];

}
cout<<"Suma de la fila("<<i<<"): "<<Sumfil<<endl;
Sumfil=0;
                }
//Suma de las diagonales

for(i=1;i<=m;i++)
{
for( j=1;j<=m;j++){
if(i=j){
SumaD+=Tabla[i][j];
}

}
}
cout<<"LA SUMA DE LA DIAGONAL ES : "<<SumaD<<endl;

//Suma de la diagonal inversa

for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++){

if(i!=m+1-j ){
Tabla[i][j];
}
else {SumaDinv+=Tabla[i][j];
}
}
}
cout<<"LA SUMA DE LA DIAGONAL INVERTIDA ES: "<<SumaDinv<<endl;

return 0;
}

leosansan


Declaras Tabla antes de tiempo y en los for se va desde 0 a < m,  si no te pasas de la longitud del array.

Con esto funciona pero te dejo que arregles tu lo de las diagonales:

Código (cpp) [Seleccionar]
do{
    cout<<"Ingrese el orden de su matriz Cuadrada:";
    cin>>m;
      if(m<3){
    cout<<"Numero no Valido";}
  }while (m<3);
  int Tabla[m][m];
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cout<<"Ingresa Valor["<<i<<"]["<<j<<"]:";
cin>>Tabla[i][j];
}
  }

  //For para mostrar la tabla
  cout<<endl;
  cout<<"SU MATRIZ ES:"<<endl<<endl;
  for( i=0;i<m;i++){
    for(j=0;j<m;j++){
      cout<<Tabla[i][j]<<"\t";
    }
  cout<<endl;
}
//Suma de filas
for(i=0;i<m;i++) {
for(j=0;j<m;j++)
Sumfil+=Tabla[i][j];
cout<<"Suma de la fila("<<i<<"): "<<Sumfil<<endl;
Sumfil=0;
  }
//Suma de las diagonales


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



Blaster

Puedes calcular la suma de la primera diagonal de esta manera

Código (cpp) [Seleccionar]
for( i = 0; i < m; i++ )
    SumaD += Tabla[i][i];


No es necesario usar dos for, y con la segunda tambien

Código (cpp) [Seleccionar]
for( i = 0, j = m-1; i < m; i++, j-- )
   SumaDinv += Tabla[i][j];


Saludos

CesarCort

Vaya era algo que ignoraba dado que recién estoy iniciando el curso... me sirvió mucho la ayuda y la sugerencia, Gracias  ;D .
Por cierto como hago para presentar el código con indices y colores en los mensajes del foro ?

leosansan

Cita de: CesarCort en  7 Mayo 2014, 22:05 PM
............................
Por cierto como hago para presentar el código con indices y colores en los mensajes del foro ?

Elige en las etiquetas GeSHi las de C++.

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



CesarCort

Hombre gracias ! gracias por todo, encantado con mi primera experiencia en el foro. ;D