Título: pequeña duda sobre matriz simétrica c++
Publicado por: indict en 18 Abril 2013, 18:05 pm
Hola, he echo un programa donde dada una matriz devuelva "si" si es simétrica y "no" si no lo es. Pero solo me imprime por pantalla "no" cuando no lo es, y cuando si lo es no me imprime nada. ¿Qué debo rectificar para que me imprima por pantalla "si" cuando si lo es? #include<iostream> #include <cstdlib> #include<vector> #include<algorithm> #include <iomanip> using namespace std; bool Esdiagonal(vector<vector<int> >M){ int i=0,j; bool p=true; while(i<M.size()-1 and p){ j=i+1; while(j<M.size() and p){ if(M[i][j]!=M[j][i]){ p=false; } } } return p;
}
int main(){ int m,n; cout<<"introduzca el numero de filas"<<endl; cin>>m; cout<<"introduzca el numero de columnas"<<endl; cin>>n; vector<vector<int> > matriz ( m, vector<int> ( n ) ); int k = 0; for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ){ cout << "["<<i+1<<"]"<< "["<<j+1<<"]= ";/*activa esta y la siguiente para entrar a mano*/ cin >>matriz[i][j]; //matriz[i][j] = k++;/*y desactivas esta*/ } }
cout<<'\n'; for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < m; j++ ) cout<< setw ( 3 ) << matriz[i][j] <<' '; cout<<'\n'; } if(Esdiagonal(matriz)){cout<<"si"<<endl;} else{cout<<"no"<<endl;} // muestra(matriz,n,m); // transpon(matriz,n,m); system("pause"); return 0; }
¡Gracias por la ayuda!
Título: Re: pequeña duda sobre matriz simétrica c++
Publicado por: satu en 18 Abril 2013, 18:28 pm
Buenas!! Te falta incrementar i y j en la función!!! Y además el bucle interno lo tienes que recorrer según el número de elementos de M[i ] no de M bool Esdiagonal(vector<vector<int> > M) { unsigned i = 0, j; bool p = true; while(i < M.size() - 1 and p) { j = i + 1; while(j < M[i].size() and p) { if(M[i][j] != M[j][i]) { p = false; } j++; } i++; } return p; }
Saludos
Título: Re: pequeña duda sobre matriz simétrica c++
Publicado por: indict en 18 Abril 2013, 19:13 pm
¡muchas gracias por corregir el error! ;)
|