Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/10/2010, 16:50
Trovaz
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 7 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++