Matriz Simétrica Subalgoritmo
De Ejercicios
Contenido |
Enunciado
Diseñar un subalgoritmo que dada una matriz cuadrada y su tamaño nos diga si es o no simétrica.
Ejemplo de matriz simétrica:
1 | 4 | 7 |
4 | 2 | 9 |
7 | 9 | 3 |
Soluciones
Diseño en Pseudocódigo
Diseño 1 en Pseudocódigo por lperez
FUNCION Calculo_simetrica(A, tam): LOGICO ENTRADAS: A: ARRAY [1..tam, 1..tam] DE ENTEROS; matriz matemática cuadrada. tam: ENTERO, nº de filas y columnas de A, tam>0. SALIDAS: VERDAD la matriz A es simétrica y FALSO si no lo es. VARIABLES: i, j: ENTERO; p:LOGICO INICIO p<--VERDAD PARA i=1 HASTA tam HACER PARA j=1 HASTA tam HACER SI A(i,j)<>A(j,i) ENTONCES p<--FALSO FIN_SI FIN_PARA FIN_PARA DEVOLVER p FIN
Diseño 2 en Pseudocódigo por lperez
FUNCION Calculo_simetria(A, tam): LOGICO ENTRADAS: A: ARRAY [1..tam, 1..tam] DE ENTEROS; matriz matemática cuadrada. tam: ENTERO, nº de filas y columnas de A, tam>0. SALIDAS: VERDAD la matriz A es simétrica y FALSO si no lo es. VARIABLES: i, j: ENTERO; p:LOGICO INICIO p<--VERDAD PARA i=1 HASTA tam HACER PARA j=i+1 HASTA tam HACER SI A(i,j)<>A(j,i) ENTONCES p<--FALSO FIN_SI FIN_PARA FIN_PARA DEVOLVER p FIN
Diseño 3 en Pseudocódigo por lperez
FUNCION Calculo_simetria(A, tam): LOGICO ENTRADAS: A: ARRAY [1..tam, 1..tam] DE ENTEROS; matriz matemática cuadrada. tam: ENTERO, nº de filas y columnas de A, tam>0. SALIDAS: VERDAD la matriz A es simétrica y FALSO si no lo es. VARIABLES: i, j: ENTERO; p:LOGICO INICIO p<--VERDAD i<--1 MIENTRAS (i<= tam) AND (p) HACER j<--i+1 MIENTRAS (j<=tam ) AND (p) HACER SI A(i,j)<>A(j,i) ENTONCES p<--FALSO FIN_SI FIN_PARA FIN_PARA DEVOLVER p FIN
Diseño 4 en Pseudocódigo por lperez
PROCEDIMIENTO Calculo_simetria(A, tam, VAR simetria ENTRADAS: A: ARRAY [1..tam, 1..tam] DE ENTEROS; matriz matemática cuadrada. tam: ENTERO, nº de filas y columnas de A, tam>0. SALIDAS: simetria:LOGICO, VERDAD la matriz A es simétrica y FALSO si no lo es. VARIABLES: i, j: ENTERO; INICIO simetria<--VERDAD i<--1 MIENTRAS (i<= tam) AND (p) HACER j<--i+1 MIENTRAS (j<=tam ) AND (p) HACER SI A(i,j)<>A(j,i) ENTONCES simetria<--FALSO FIN_SI FIN_PARA FIN_PARA FIN
Comentario
En la primera solución se examinan todos los elementos de la matriz, de forma que comparará dos veces algunos elementos.
En la segunda solución no compara dos veces los mismos elementos ya que se recorre los elementos que están por encima de la diagonal y compara a cada uno con su simétrico.
Tanto en uno como en otro de los anteriores, si se encontrara un elemento que no cumple la simetría el subalgoritmo no terminaría sino que seguiría con las comparaciones hasta que el ciclo acabase (ya que se trata de ciclos PARA).
En la tercer solución se recorre los elementos sobre la diagonal principal, igual que en la segunda solución, pero hace que el subalgoritmo acabe en el momento que encuentra dos elementos que no cumplen con la simetría.
La cuarta solución es análoga a la tercera pero realizado con un procedimiento en lugar de con una función.
Programa en C
Solución 1 en C
//CONSTANTES: #define VERDAD 1 #define FALSO 0 int Calculo_simetrica(int A[1000][1000],int tam){ //ENTRADAS: //A: matriz matemática cuadrada //tam: numero de filas y de columnas de la matriz; tam>0 //SALIDAS: //VERDAD (1) si la matriz A es simetrica y FALSO (0) si no lo es //VARIABLES int i,j; int p; p=VERDAD; for(i=1; i<=tam; i++){ for(j=1; j<=tam; j++){ if(A[i][j]!=A[j][i]){ p=FALSO; } } } return(p); }
Solución 2 en C
//CONSTANTES: #define VERDAD 1 #define FALSO 0 int Calculo_simetrica(int A[1000][1000],int tam){ //ENTRADAS: //A: matriz matemática cuadrada //tam: numero de filas y de columnas de la matriz; tam>0 //SALIDAS: //VERDAD (1) si la matriz A es simetrica y FALSO (0) si no lo es //VARIABLES int i,j; int p; p=VERDAD; for(i=1; i<=tam; i++){ for(j=i+1; j<=tam; j++){ if(A[i][j]!=A[j][i]){ p=FALSO; } } } return(p); }
Solución 3 en C
//CONSTANTES: #define VERDAD 1 #define FALSO 0 int Calculo_simetrica(int A[1000][1000],int tam){ //ENTRADAS: //A: matriz matemática cuadrada //tam: numero de filas y de columnas de la matriz; tam>0 //SALIDAS: //VERDAD (1) si la matriz A es simetrica y FALSO (0) si no lo es //VARIABLES int i,j; int p; p=VERDAD; i=1; while((i<=tam)&&(p)){ j=i+1; while((j<=tam)&&(p)){ if(A[i][j]!=A[j][i]){ p=FALSO; } } } return(p); }
Solución 4 en C
//CONSTANTES: #define VERDAD 1 #define FALSO 0 void Calculo_simetrica(int A[1000][1000],int tam, int &simetrica){ //ENTRADAS: //A: matriz matemática cuadrada //tam: numero de filas y de columnas de la matriz; tam>0 //SALIDAS: //simatrica: VERDAD (1) si la matriz A es simetrica y FALSO (0) si no lo es //VARIABLES int i, j; simetrica=VERDAD; i=1; while((i<=tam)&&(p)){ j=i+1; while((j<=tam)&&(p)){ if(A[i][j]1=A[j][i]){ simetrica=FALSO; } } } }