Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda ejercicio! (matriz simetrica)

Estas en el tema de Ayuda ejercicio! (matriz simetrica) en el foro de C/C++ en Foros del Web. Tengo que hacer este ejercicio: Una matriz cuadrada A se dice que es simétrica si A(i, j) = A(j, i) para todo i, j dentro ...
  #1 (permalink)  
Antiguo 28/10/2010, 15:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Ayuda ejercicio! (matriz simetrica)

Tengo que hacer este ejercicio: Una matriz cuadrada A se dice que es simétrica si A(i, j) = A(j, i) para todo i, j
dentro de los límites de la matriz. Elabore un programa que lea una matriz y
diga si es simétrica o no.
Ya hice el programa, pero no sé si estoy interpretando bien el ejercicio...:


int m,n,i,j;
bool simetrica = true;
cout<<"Ingrese numero de filas:";
cin>>m;
cout<<"Ingrese el mismo numero que ingreso en filas para las Columnas";
cin>>n;
if (m!=n){cout<<"La matriz no es cuadrada"<<endl;}
int a[m][n];


for (i=0;i<m;i++){
for (j=0;j<n;j++){
cout<<"Digite dato:_["<<i<<"]["<<j<<"]:_";
cin>>a[i][j];
if(a[i][j] != a[j][i]){
simetrica = false;}}

}

cout<<"La matriz digitada es:"<<endl;
for(i=0;i<m;i++){
for(j=0;j<n;j++){

cout<<" "<<a[i][j];
}
cout<<endl;
}
if(simetrica) cout<<"Es simetrica"<<endl;
else cout<<"No es simetrica"<<endl;
system("pause");


cuando creo que es simetrica...el programa me dice que no lo es...
AYUDA! Por favor!

Última edición por ironsea75; 28/10/2010 a las 16:43
  #2 (permalink)  
Antiguo 28/10/2010, 16:50
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Matriz simetrica

Cita:
Iniciado por ironsea75 Ver Mensaje
Tengo que hacer este ejercicio: Una matriz cuadrada A se dice que es simétrica si A(i, j) = A(j, i) para todo i, j
dentro de los límites de la matriz. Elabore un programa que lea una matriz y
diga si es simétrica o no.
Ya hice el programa, pero no sé si estoy interpretando bien el ejercicio...:

Código c:
Ver original
  1. int m,n,i,j;
  2.     bool simetrica = true;
  3.     cout<<"Ingrese numero de filas:";
  4.     cin>>m;
  5.     cout<<"Ingrese el mismo numero que ingreso en filas para las Columnas";
  6.     cin>>n;
  7.     if (m!=n){cout<<"La matriz no es cuadrada"<<endl;}
  8.     int a[m][n];
  9.    
  10.    
  11.     for (i=0;i<m;i++){
  12.         for (j=0;j<n;j++){
  13.              cout<<"Digite dato:_["<<i<<"]["<<j<<"]:_";
  14.              cin>>a[i][j];
  15.              if(a[i][j] != a[j][i]){
  16.              simetrica = false;}}
  17.                        
  18.         }
  19.            
  20.             cout<<"La matriz digitada es:"<<endl;
  21.             for(i=0;i<m;i++){
  22.                         for(j=0;j<n;j++){
  23.                                          
  24.                                          cout<<" "<<a[i][j];
  25.                                          }
  26.                         cout<<endl;              
  27.                         }
  28.        if(simetrica) cout<<"Es simetrica"<<endl;
  29.        else cout<<"No es simetrica"<<endl;                
  30.       system("pause");

cuando creo que es simetrica...el programa me dice que no lo es...
AYUDA! Por favor!
Tu problema esta aqui:

Código c:
Ver original
  1. for (i=0;i<m;i++){
  2.          for (j=0;j<n;j++){
  3.               cout<<"Digite dato:_["<<i<<"]["<<j<<"]:_";
  4.               cin>>a[i][j];
  5.               if(a[i][j] != a[j][i]){
  6.                  simetrica = false;}
  7.            }
  8. }

Tu asumes que aqui ya puedes decir si tu matriz es simetrica o no, pero en realidad tu variable "simetrica" siempre va a resultar falsa. Digamos que metes tu primer valor

Código:
a[0][0] = 1
Aqui como a[0][0] se compara con si misma, no pasa nada, pero al introducir un segundo valor. por ejemplo:
Código:
 a[0][1] = 2
a[0][2] trata de compararse con a[2][0], el cual no has introducido, entonces simetrica se hace falsa. Por lo que tu programa siempre arrojara que tu matriz no es simetrica. Lo que tienes que hacer son dos barridos. uno para introducir valores, y el siguiente para comprobar si la matriz es simetrica.

Otros detalles que vi en tu programa son:
Código:
  int a[m][n];
No soy un experto en c++ pero segun yo no puedes hacer este tipo de declaraciones, la asignacion de memoria no se puede hacer en tiempo de ejecucion, mas que utilizando funciones como malloc, calloc y realloc. por lo que necesitas usar una puntero a puntero para poder hacer un arreglo bidimencional en tiempo de ejecucion.

el otro detalle es, ¿para que pedir dos valores para el numero de columnas y el numero de filas si se supone debes utilizar una matriz cuadrada?

bueno espero haberte ayudado

Saludos++
  #3 (permalink)  
Antiguo 28/10/2010, 17:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda ejercicio! (matriz simetrica)

No sé si te entendí bien, ¿debo hacer otro ciclo que me compare cada una de las posiciones?
  #4 (permalink)  
Antiguo 28/10/2010, 17:17
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Ayuda ejercicio! (matriz simetrica)

Sip, son dos ciclos, uno para introducir los valores, y el siguiente para compararlos
  #5 (permalink)  
Antiguo 28/10/2010, 17:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda ejercicio! (matriz simetrica)

int m,n,i,j;

cout<<"Ingrese numero de filas:";
cin>>m;
cout<<"Ingrese numero de Columnas:";
cin>>n;
int a[m][n];
if (m==n){



for (i=0;i<m;i++){
for (j=0;j<n;j++){
cout<<"Digite dato:_["<<i<<"]["<<j<<"]:_";
cin>>a[i][j];}}
cout<<"La matriz digitada es:"<<endl;
for(i=0;i<m;i++){
for(j=0;j<n;j++){

cout<<" "<<a[i][j];
}
cout<<endl;
}
for (i=0;i<m;i++){
for(j=0;j<n;j++){
if (a[i][j]==a[j][i]){
cout<<"Es simetrica"<<endl;}
else cout<<"No es simetrica"<<endl;}}

}

else cout<<"No es cuadrada."<<endl;
system("pause");



Por qué está mal?? soy pesimo programando!

Última edición por ironsea75; 28/10/2010 a las 18:03

Etiquetas: matriz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:05.