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!
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
¡muchas gracias por corregir el error! ;)