Dev - C++ - Código para comprobar si una matriz es simétrica

 
Vista:
sin imagen de perfil

Código para comprobar si una matriz es simétrica

Publicado por Joaquín (1 intervención) el 29/06/2023 07:54:57
Tengo 3 códigos (1 hecho con variable booleana, los otros 2 con flag una inicializada en 'T' y la otra en 'F').

cual es mas eficiente? o se aplica de manera correcta?

------------------------------------ Propuesta con variable Booleana -------------------------------
Estuve pensandolo y solo sirve si lo inicializo en true si pienso hacerlo en false al momento de probar el programa da resultados erroneos

#include<iostream>
using namespace std;
int main(){
int i,j,fil,col;
bool simetria=true;
cout<<"\t ----- || Comprobando si una matriz es simetrica || -----"<<endl;
do{
cout<<"\nIngrese el numero de filas de la matriz: "; cin>>fil;
cout<<"Ingrese el numero de columnas de la matriz: "; cin>>col;
}while(fil<=0||col<=0);
float m_prueba[fil][col],m_trans[fil][col];
if(fil==col){
cout<<"\nIngresando los valores de la matriz: "<<endl;
for(int i=0;i<fil;i++){
for(int j=0;j<col;j++){
cout<<"Ingrese el valor en la Pos["<<i<<"]["<<j<<"]: ";
cin>>m_prueba[i][j];
}
}
cout<<"\nLa matriz tendria la forma: "<<endl;
for(int i=0;i<fil;i++){
for(int j=0;j<col;j++){
cout<<"\t"<<m_prueba[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\nLa matriz transpuesta es de la forma: "<<endl;
for(int i=0;i<fil;i++){
for(int j=0;j<col;j++){
m_trans[i][j]=m_prueba[j][i];
cout<<"\t"<<m_trans[i][j];
}
cout<<"\n";
}
for(int i=0;i<fil;i++){
for(int j=0;j<col;j++){
if(m_trans[i][j]!=m_prueba[i][j]){
simetria=false;
break;
}
}
if(!simetria){
break;
}
}
if(simetria){
cout<<"\n\t----- La matriz es SIMETRICA -----"<<endl;
}else{
cout<<"\nLa matriz NO es simetrica"<<endl;
}
}else{
cout<<"\nLa matriz no es cuadrada, por lo tanto no es simetrica."<<endl;
}
system("PAUSE");
return 0;
}

-------------------------------- Propuesta con flag inicializada en TRUE ------------------------------------
Sinceramente, de las 2 propuestas con flag, considero ésta como la más eficiente al ser la más corta.

#include<iostream>
using namespace std;
int main(){
int fila,columna,i,j;
char flag='T';
cout<<"\t ----- || Comprobando la simetria de una matriz || -----"<<endl;
do{
cout<<"Ingrese el numero de filas de la matriz: "; cin>>fila;
cout<<"Ingrese el numero de columnas de la matriz: "; cin>>columna;
}while(fila<=0||columna<=0);
int matriz[fila][columna];
if(fila==columna){
cout<<"\nIngresando los valores en la matriz: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"Ingrese el valor de la matriz en la Pos["<<i<<"]["<<j<<"] ----> ";
cin>>matriz[i][j];
}
}
cout<<"\nLa matriz ingresada es de la forma: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"\t"<<matriz[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\nLa matriz transpuesta es de la forma: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"\t"<<matriz[j][i];
}
cout<<"\n";
}
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
if(matriz[i][j]!=matriz[j][i]){
flag='F';
break;
}
}
}
if(flag=='T'){
cout<<"\n\t ----- La matriz es simetrica -----"<<endl;
}else{
cout<<"\nLa matriz NO es simetrica"<<endl;
}
}else{
cout<<"\nLa matriz no es cuadrada. Por lo tanto, no es simetrica."<<endl;
}
system("PAUSE");
return 0;
}
---------------------------------- Propuesta con flag inicializada en FALSE -------------------------------------------------
Al ser mas extensa me parece menos atractiva pero sigue siendo efectiva.

#include<iostream>
using namespace std;
int main(){
int fila,columna,i,j;
char flag='F';
cout<<"\t ----- || Comprobando la simetria de una matriz || -----"<<endl;
do{
cout<<"Ingrese el numero de filas de la matriz: "; cin>>fila;
cout<<"Ingrese el numero de columnas de la matriz: "; cin>>columna;
}while(fila<=0||columna<=0);
int matriz[fila][columna];
if(fila==columna){
cout<<"\nIngresando los valores en la matriz: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"Ingrese el valor de la matriz en la Pos["<<i<<"]["<<j<<"] ----> ";
cin>>matriz[i][j];
}
}
cout<<"\nLa matriz ingresada es de la forma: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"\t"<<matriz[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\nLa matriz transpuesta es de la forma: "<<endl;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
cout<<"\t"<<matriz[j][i];
}
cout<<"\n";
}
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++){
if(matriz[i][j]==matriz[j][i]){
flag='T';
}else{
flag='F';
break;
}
}
}
if(flag=='T'){
cout<<"\n\t ----- La matriz es simetrica -----"<<endl;
}else{
cout<<"\nLa matriz NO es simetrica"<<endl;
}
}else{
cout<<"\nLa matriz no es cuadrada. Por lo tanto, no es simetrica."<<endl;
}
system("PAUSE");
return 0;
}

De todos... ¿Cual es el mejor?¿Tuve algun error? Aprecio cualquier devolucion de su parte. Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder