Grupo de C++
Publico Grupo
Publico Grupo
Active 4 dias
Este grupo esta relacionado con nuestro curso profesional de C++. Aquí se comparten temas generales... View more
Publico Grupo
Responder a: Ayuda ejemplo 5. Matrices
Hola, me agrada que este foro de seguimiento a dudas de los ejercicios.
Me encontré con esta problemática igual y deseo compartir la solución que le di. (acepto ideas jeje):
Primero me di cuenta que cualquier matriz cuadrada al transponerse, su último valor siempre sera igual , por eso el ejercicio siempre daba ‘V’ en la ultima comprobación de las matrices.
Ejemplo:
Matriz Original Matriz Transpuesta
[1] [3] [7] [1] [4] [7] ¿Lo ven? El 2 esta en la misma casilla final.
[4] [8] [9] [3] [8] [5] Los For invierten las filas y columnas al evaluar
[7] [5] [2] [7] [9] [2] las matrices, pero siempre dejan de ultimo esa
casilla Final al momento de comparar.
Segundo: Acá dejo de mi código de solución al ejercicio, espero ser claro, y cualquier aportación, consejo, tip, lo agradecería con mucho gusto. Saludos.
——————-Inicia código del ejercicio———————–
#include <iostream>
using namespace std;
int main() {
int renglon=0,columna=0,error=0;
//Use un do while para realizar por lo menos una vez la peticion del tamano de la matriz.
//En caso de no ser cuadrada la matriz, solicitara nuevamente el tamano de la matriz(fila/columna)
do{
if(error==1){ //Mensaje de error que se activa al repetirse el while.
cout<<“Error, las columnas deben ser del mismo numero de los renglones, inserte de nuevo los valores: “<<endl;
}
cout<<“Inserta la cantidad de renglones de la matriz: “;
cin>>renglon;
cout<<“Inserte la cantidad de columnas de la matriz: “;
cin>>columna;
error=1; //Puse esta variable error, para que en caso de que se vuelva a pedir el tamaño de la matriz
cout<<endl<<endl; // se muestre un mensaje de error y solicitar insertar otra vez los datos.
}while(columna!=renglon);
int matriz1[renglon][columna]={};
int casillas=renglon*columna; //Cree dos variables, la primera indica el numero de casillas que tendra la matriz
int suma=0;// por ejemplo si es de 3*3 dara 9 casillas.
cout<<“Favor de ingresar los valores correspondientes: “<<endl;
for(int r=0;r<=renglon-1;r++){
for(int c=0;c<=columna-1;c++){
cout<<“Ingrese el valor [“<<r<<“][“<<c<<“]: “;
cin>>matriz1[r];
}
}
/*
Mi solucion es esta, cuando se compara la matriz original con la transpuesta, se hace casilla por casilla, si todas son
iguales, querra decir que la matriz es simetrica, por ende si TODAS SON IGUALES, se irá sumando un 1 en la variable suma,
esto quiere decir que al finalizar el recorrido de la matriz, o sea, revisar todas sus CASILLAS, el total de los unos sumandos
sera igual al total de casillas de la matriz. Es decir, si la matriz es de 2 filas por 2 columnas, dará 4 casillas, si las 4
casillas al ser evaluadas con su matriz transpuesta son iguales, se sumara un 1 en cada una dando un total de 4.
O sea: Casillas=4…. Suma=4
Si alguna casilla no fuera igual, no se sumara nada, por ende suma y casillas sera diferentes y no se cumpliara la condicion
del IF para indicar que es simetrica.
*/
for(int r=0;r<=renglon-1;r++){
for(int c=0;c<=columna-1;c++){
if(matriz1[r]==matriz1[r]){
suma+=1; // cuando son iguales se suma un 1 a Suma.
}
}
}
if(casillas==suma){ //Si son iguales las casillas de la matriz al numero de aciertos evaluados en la transposicion, dara MAtriz Simetrica.
cout<<endl<<“Si es simetrica la matriz”;
}else{
cout<<endl<<“No es si metrica la matriz”;
}
return 0;
}
—————-Fin del ejercicio——————————–
Pd. Al copiar acá,no me respeto el identado de mi código, por ello decidí ponerlo en
imágenes para mayor claridad.