Cuadrado Mágico
De Ejercicios
Contenido |
Enunciado
Diseña un algoritmo que determine si una matriz cuadrada forma un cuadrado mágico. Se considera un cuadrado mágico aquel en el cual las filas, columnas y las diagonales principal y secundaria suman lo mismo. Para ello el algoritmo deberá hacer uso de los subalgoritmos citados a continuación, y que también se han de diseñar:
- Subalgoritmo al que se le de la matriz y un número de fila y devuelva la suma de dicha fila
- Subalgoritmo al que se le de la matriz y un número de columna y devuelva la suma de dicha columna
- Subalgoritmo al que se le de la matriz y devuelva la suma de la diagonal principal y de la secundaria.
Soluciones
Programa en Matlab
Programa principal
%Programa CuadradoMagico %Descripción: Determina si una matriz cuadrada forma un cuadrado mágico. %Entradas: La matriz a estudiar. %Salidas: Mensaje de “Es cuadrado mágico” o “No es cuadrado mágico”. %Variables: % m: ARRAY(tama,tama) DE REALES % tama, x, y, pos, sdp, sds: ENTERO. % vf, vc: ARRAY(tama) DE REALES %Pedir la matriz cuadrada al usuario tama = input('Introduzca el tamaño de la matriz cuadrada: '); m = zeros(tama); disp('Introduzca los valores de la matriz:'); for x=1:tama for y=1:tama fprintf(Valor %i, %i',x,y); m(x,y)=input(': '); end end %Calcular las sumas de filas, columnas y diagonales. for pos=1:tama vf(pos)=sumaf(m,pos); vc(pos)=sumac(m,pos); end [sdp sds]=sumad(m); %Comprobar si es un cuadrado mágico if sdp==sds pos=1; while (sdp==vf(pos))&&(sdp==vc(pos))&&(pos<=tama) pos=pos+1; end if pos>tama disp('Cuadrado mágico'); else disp('No es cuadrado mágico'); end else disp('No es cuadrado mágico'); end
Módulo 1
function suma=sumaf(m,f) %FUNCIÓN suma=sumaf(m,f) %DESCRIPCIÓN: Devuelve la suma de una fila de una matriz. %PARÁMETROS DE ENTRADA: % m: ARRAY(?,?) DE REALES, Matriz cuadrada % f: ENTERO, Número de fila. %PARÁMETROS DE SALIDA: % suma: REAL, Suma de dicha fila. %VARIABLES: % pos: ENTERO suma=0; for pos=1:size(m,2) suma = suma+m(f,pos); end
Módulo 2
function suma=sumac(m,c) %FUNCIÓN suma=sumac(m,c) %DESCRIPCIÓN: Devuelva la suma de una columna de una matriz. %PARÁMETROS DE ENTRADA: % m: ARRAY(?,?) DE REALES, Matriz cuadrada % c: ENTERO, Número de columna. %PARÁMETROS DE SALIDA: % suma: REAL, Suma de dicha columna. %Variables: % pos: ENTERO. suma=0; for pos=1:size(m,1) suma=suma+m(pos,c); end
Módulo 3
function [dp ds]=sumad(m) %Programa: Devuelva la suma de la diagonal principal y de la secundaria de una matriz cuadrada. %PARÁMETROS DE ENTRADA: % m: ARRAY(?,?) DE REALES, Matriz cuadrada %PARÁMETROS DE SALIDA: % dp: REAL, Suma de la diagonal principal. % ds: REAL, Suma de la diagonal secundaria. %Variables: % pos, tama: ENTEROS dp=0; ds=0; tama = size(m,1); for pos=1:tama dp=dp+m(pos,pos); ds=ds+m(pos,tama-pos+1); end