fbpx

Responder a: Ayuda ejemplo 5. Matrices

  • Adrian de la Cruz Espinosa Zurita

    Miembro
    2 febrero, 2020 en 8:35 pm

    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.