Está en la página 1de 27

Más sobre Matrices

Las filas van en sentido horizontal y aumentan de arriba hacia abajo


Las columnas van en sentido vertical y aumentan de izquierda a derecha
Recuerden que “PseInt” quiere decir Pseudo-Interpretador y que “PseInt” utiliza seudolenguaje y
que para el Curso, lo hemos configurado para trabajar con subíndices que se numeran desde 0.

(SEGÚN CONFIGURACIÓN INICIAL)

Actividad grupal: (dirigida por el profesor para


identificar elementos de una matriz)
Sumas de elementos en diagonales principales, diagonales secundarias, los
elementos delimitados por la zona X (equis) y los elementos delimitados por la zona
cruz
Diagonal principal 1 => i = j; ( i:0,..,n-1); (j:0,..,n-1) desde posición (0,0); cuando se recorren
desde (0,0) ambos subíndices aumentan (hacia abajo)
Diagonal secundaria 1 => i + j = n – 1; (i:n-1,..,0); (j: 0,..,n-1) desde posición (n-1,0); cuando se
recorre desde (n-1,0) un subíndice disminuye y el otro aumenta (hacia arriba)
Diagonal principal 2 => (i:n-1,..,0); (j:m-1,..,m-1-(n-1)) desde posición (n-1, m-1); cuando se
recorren desde (n-1,m-1) ambos subíndices disminuyen (hacia arriba)
Diagonal secundaria 2 => (i:0,..n-1);(j:m-1,.., m-1-(n-1)) desde posición (0,m-1); cuando se
recorre desde (0,m-1) un subíndice aumenta y el otro disminuye (hacia abajo)

Para matrices cuadradas (N=M) de orden par:


A1 => elementos por encima de las dos diagonales
A2 => elementos por debajo de la principal y encima de la secundaria
A3 => elementos por encima de la principal y debajo de la secundaria
A4 => elementos por debajo de las dos diagonales
A5 => elementos que pertenecen a las dos diagonales

Para matrices cuadradas (N=M) de orden impar:


A1 => elementos de la zona superior izquierda de la cruz
A2 => elementos de la zona superior derecha de la cruz
A3 => elementos de la zona inferior izquierda de la cruz
A4 => elementos de la zona inferior derecha de la cruz
A5 => elementos que pertenecen a la cruz
(N = 4 par)

(N = 5 impar)
Actividad grupal: (dirigida por el profesor para identificar elementos de
una matriz)

A00 A01 A02 A03 A04 A05 A06 A07

A10 A11 A12 A13 A14 A15 A16 A17

A20 A21 A22 A23 A24 A25 A26 A27

A30 A31 A32 A33 A34 A35 A36 A37

A40 A41 A42 A43 A44 A45 A46 A47

A50 A51 A52 A53 A54 A55 A56 A57

Ejercicios: teniendo definida una matriz de N filas x M columnas


A) Recorrer la matriz usando dos “Para” y hallar la suma de los elementos que están por encima de la
diagonal ppal1, sobre la diagonal ppal1 y por debajo de la diagonal ppal1.
B) Lo mismo que A) pero cambiando ppal1 por sec1.
C) Lo mismo que A) pero cambiando ppal1 por ppal2
D) Lo mismo que A) pero cambiando ppal1 por sec2

 Teniendo la matriz definida usar un solo “Para” hallar la suma de los elementos que pertenecen a ppal1 y
sec1

 Teniendo la matriz definida usar un solo “Para” hallar la suma de los elementos que pertenecen a ppal2 y
sec2 cuando N ≠ M

 Teniendo la matriz definida usar un solo “Para” hallar la suma de los elementos que pertenecen a ppal1,
ppal2, sec1 y sec2 cuando N ≠ M

 Teniendo definida una matriz cuadrada de orden par, hallar la suma de los elementos A1, A2, A3, A4, A5

 Teniendo definida una matriz cuadrada de orden impar, hallar la suma de los elementos A1, A2, A3, A4,
A5
Actividad:
 Leer NA (5≤ NA≤ 13) impar
 Leer MA (4≤ NA≤ 12) y con MA < NA
 Leer matriz A de NA filas por MA columnas
 Escribir la Matriz A leída
 Con la matriz leída formar una matriz CA donde no aparezcan ni la primera y última filas y ni la primera y
últimas columnas (o sea eliminando primera y última filas y columnas)
 Escribir la matriz CA obtenida
 Con la matriz CA calcular la suma de los elementos negativos que están sobre la diagonal secundaria 2, la
cantidad de números positivos qué pertenecen a la diagonal secundaria 2, el valor absoluto del promedio
de la suma de los elementos que están por debajo de la diagonal secundaria 2

Matrices en el juego del Ajedrez

Desplazamientos de la pieza de ajedrez caballo, desde la posición (i 0,j0)

Las filas van en sentido horizontal y aumentan de arriba hacia abajo


Las columnas van en sentido vertical y aumentan de izquierda a derecha
Algoritmo caballo
Definir T,ii,jj,i,j,k,n,m,i0,j0,ix,jy Como Entero
Dimension T(8,8),ii(8),jj(8)
ii(0)=2;ii(1)=2;ii(2)=1;ii(3)=1;ii(4)=-1;ii(5)=-1;ii(6)=-2;ii(7)=-2;
jj(0)=-1;jj(1)=1;jj(2)=-2;jj(3)=2;jj(4)=2;jj(5)=-2;jj(6)=-1;jj(7)=1;
n=8
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Para j<-0 Hasta n-1 Con Paso 1 Hacer
T[i,j]=0
Fin Para
Fin Para
i0=Aleatorio(0,n-1)
j0=Aleatorio(0,n-1)
//i0=3;j0=4;
k=1;T(i0,j0)=k;
ix=i0;jy=j0;m=8*8;
Para j<-2 Hasta m Con Paso 1 Hacer
Para i<-0 Hasta 7 Con Paso 1 Hacer
ix=i0+ii(i);jy=j0+jj(i);
Si ix>-1 & ix<8 & jy>-1 & jy<8 Entonces
Si T[ix,jy]=0 Entonces
k=k+1;T[ix,jy]=k;
i0=ix;j0=jy;
Fin Si
Fin Si
Fin Para
Fin Para
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir sin saltar T[i,j]," "
Fin Para
Escribir" "
Fin Para
Escribir " "
Escribir" k:",k
FinAlgoritmo

Ejercicio: desarrolle un algoritmo donde la pieza de ajedrez “caballo” toma o no una


posición previamente ocupada
(… se genera aleatoriamente dos posiciones diferentes dentro del tablero de ajedrez,
la primera corresponde a una pieza de ajedrez cualquiera y la segunda la posición
del caballo en el tablero). El programa debe escribir en forma matricial las
posiciones de las piezas y un mensaje indicando si el caballo toma o no la otra ficha)
Actividad:Desarrolle en “PseInt” un algoritmo que ejecute los siguientes pasos:
1. Leer y escribir N (generación aleatoria) [3,9]
2. Si N es par, crear un arreglo denominado A que contenga los primeros N*N elementos pares
mayores de 100. Si N es impar, crear un arreglo denominado A que contenga los primeros
N*N elementos impares mayores de 100.
3. Escribir el arreglo A resultante del paso 2.
4. Crear una matriz X cuadrada de orden N x N que contenga el arreglo A en forma ascendente,
fila por fila.
5. Escribir la matriz X resultante del paso 3.
6. Crear una matriz X cuadrada de orden N x N que contenga el arreglo A en forma descendente,
fila por fila.
7. Escribir la matriz X resultante del paso 5.
8. Crear una matriz X cuadrada de orden N x N que contenga el arreglo A en forma de espiral.
9. Escribir la matriz X resultante del paso 6.

Para ilustración de lo que se pide, examinen los dos ejemplos (para N impar y para N par) que
aparecen a continuación:
Taller:
Elaborar un algoritmo que realice las siguientes tareas:
Que a través de una función genere y guarde en memoria 5 valores, a saber:
 Número de filas: NA y NB; (5<=N<= 15) y número de columnas: MA y MB;
(7<=M<=21), tal que NA ≠ MA; NB ≠ MB; NA > NB y MA > MB
 Tipo de superposición: T; (1,2,3,4)
Nota: en el cuerpo del programa principal deben presentarse los 5 datos
generados
Ayuda: use un vector
Que a través de una función genere y guarde en memoria dos matrices [A]NA x MA y
[B] NB x MB , de tal forma que la matriz [A] sea más grande que la matriz [B] (tanto en
filas como en columnas), donde los elementos de la matriz A y matriz B, A [i,j] y B[i,j]
estén en los rangos: ( -99.99 <= A[i,j]; B[i,j] <= +99.99). {Se deben hacer dos
invocaciones, una para [A] y otra para [B]}
Que a través de una función presente todos los datos generados de [A] y [B]. {Se
deben hacer dos invocaciones, una para [A] y otra para [B]}
Que a través de una función cree una matriz [C] donde los elementos de la matriz
[C] se definen como sigue: C[i,j]=A[i,j]+B[i, j] donde estén definidos los elementos (i,j)
en cada una de las matrices y C[i,j]=A[i,j] donde los elementos (i,j) solo están
definidos en la matriz [A] de acuerdo al valor generado de la variable T (tipo de
superposición)
=> Superposición Superior Izquierda (1 en la gráfica adjunta), T=1
=> Superposición Superior Derecha (2 en la gráfica adjunta), T=2
=> Superposición Inferior Izquierda (3 en la gráfica adjunta), T=3
=> Superposición Inferior Derecha (4 en la gráfica adjunta), T=4

Gráfica que ilustra las cuatro posibles de superposiciones de la matriz A y matriz B

Que a través de una función presente la matriz [C] obtenida (la misma función que
presenta los valores de [A] y [B])
Ayuda
Superior izquierda

Inferior derecha

Superior derecha
Inferior izquierda

Ejemplos usando Funciones creadas por el usuario

// 1
// funcion que no recibe ni devuelve
Funcion Saludar
Escribir "Hola mundo!"
FinFuncion

// funcion que recibe un argumento por valor, y devuelve su doble


Funcion res = CalcularDoble(num)
Definir res como real
res = num*2 // retorna el doble
FinFuncion

// funcion que recibe un argumento por referencia, y lo modifica


Funcion Triplicar(num por referencia)
num = num*3 // modifica la variable duplicando su valor
FinFuncion

// proceso principal, que invoca a las funciones antes declaradas


Algoritmo PruebaFunciones

Definir x Como Real

Escribir "Llamada a la funcion Saludar:"


Saludar // como no recibe argumentos pueden omitirse los paréntesis vacios

Escribir "Ingrese un valor numérico para x:"


Leer x

Escribir "Llamada a la función CalcularDoble (paso por valor)"


Escribir "El doble de ",x," es ", CalcularDoble(x)
Escribir "El valor original de x es ",x

Escribir "Llamada a la función Triplicar (paso por referencia)"


Triplicar(x)
Escribir "El nuevo valor de x es ", x
FinAlgoritmo
// 1

// 2
Funcion res1 = Aleatorios()
Definir res1 como Entero
res1 = Azar(7) +3
Mientras res1 % 2 = 0 Hacer
res1 = Azar(7) +3
FinMientras
FinFuncion

Funcion EscribaMatrix(x,n)
Definir i,j Como Entero
Escribir " Matriz de :",n,"x",n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar " ... "
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar x[i,j]," "
FinPara
Escribir " "
FinPara
FinFuncion

Algoritmo SubProcesoMatriz0
Definir i,j,N,M,S Como Entero
N=Aleatorios(); M=N
Dimension S[9,9]
Para i<-0 Hasta N-1 Con Paso 1 Hacer
Para j<-0 Hasta M-1 Con Paso 1 Hacer
S[i,j]=Azar(90)+10
FinPara
FinPara
EscribaMatrix(S,N)
FinAlgoritmo
// 2

// 3
Funcion res1 = Aleatorios()
Definir res1 como Entero
res1 = Azar(7) +3
FinFuncion

Funcion EscribaMatrix(x,n)
Definir i,j Como Entero
Escribir " Matriz de :",n,"x",n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar " ... "
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar x[i,j]," "
FinPara
Escribir " "
FinPara
Escribir " "
FinFuncion

Funcion vlr=CalcularMayor(x,n)
Definir i,j,IM,JM, tmp Como Entero
Definir vlr Como Real
tmp=x[0,0];IM=0;JM=0
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Si x[i,j]>tmp Entonces
tmp=x[i,j];IM=i;JM=j
FinSi
FinPara
FinPara
vlr=tmp+IM/10+JM/100
FinFuncion

Algoritmo SubProcesoMatriz0_A4
Definir i,j,N,M,S Como Entero
Definir Mayor,tmp Como Real
N=Aleatorios(); M=N
Dimension S[10,10]
Para i<-0 Hasta N-1 Con Paso 1 Hacer
Para j<-0 Hasta M-1 Con Paso 1 Hacer
S[i,j]= Azar(90)+10
FinPara
FinPara
EscribaMatrix(S,N)
Mayor=CalcularMayor(S,N)
Escribir " "
Escribir " ...",Mayor
N=trunc(Mayor)
tmp=Mayor-N
i=trunc(tmp*10)
tmp=tmp/10
j=trunc(tmp*10)
Escribir " ",i,", ",j
FinAlgoritmo
// 3

//4
Funcion res1 = Aleatorios()
Definir res1 como Entero
res1 = Azar(7) +3
Mientras res1 % 2 = 0 Hacer
res1 = Azar(7) +3
FinMientras
FinFuncion

Funcion EscribaMatrix(x,n)
Definir i,j Como Entero
Escribir " Matriz de :",n,"x",n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar " ... "
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar x[i,j]," "
FinPara
Escribir " ";
FinPara
Escribir " ";
FinFuncion

Funcion a4=CalcularA4(x,n)
Definir a4,k,m Como Entero
a4=0;m = trunc(n/2);
Escribir"m : ",m;Escribir"";
Escribir sin saltar " ..."
Para k<-0 Hasta n-1 Con Paso 1 Hacer
Escribir sin saltar x[k,m], " "
a4=a4+x[k,m]
FinPara
Escribir " "
FinFuncion

Algoritmo SubProcesoMatriz0_A4
Definir i,j,N,M,S,A4 Como Entero
N=Aleatorios(); M=N
Dimension S[9,9]
Para i<-0 Hasta N-1 Con Paso 1 Hacer
Para j<-0 Hasta M-1 Con Paso 1 Hacer
S[i,j]=Azar(90)+10
FinPara
FinPara
EscribaMatrix(S,N)
A4=CalcularA4(S,N)
Escribir " "
Escribir " ...",trunc(N/2),", Vertical:",A4
FinAlgoritmo
// 4

//5
Funcion res1 = AleatorioNimpar()
Definir res1 como Entero
res1 = Azar(9)+3
Mientras res1 % 2 = 0 Hacer
res1 = Azar(9)+3
FinMientras
FinFuncion

Funcion res2 = AleatorioF()


Definir res2 como Entero
res2 = Azar(2)
FinFuncion

Funcion EscribaMatrix(x,n)
Definir i,j Como Entero
Escribir " Matriz de :",n,"x",n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar " ... "
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar x[i,j]," "
FinPara
Escribir " "
FinPara
FinFuncion

Funcion res3=CalcularSuma(x,n,f)
Definir j,k,m Como Entero
Definir res3 como Real
res3=0.0;m=trunc(n/2);j=n
Si f=0 Entonces // sumar la vertical y la horizontal
Para k<-0 Hasta n-1 Con Paso 1 Hacer
res3=res3+x[k,m]+x[m,k]
FinPara
res3=res3-x[m,m]
Sino // sumar la diagonal principal y la diagonal secundaria
Para k<-0 Hasta n-1 Con Paso 1 Hacer
j=j-1
res3=res3+x[k,k]+x[k,j]
FinPara
res3=res3-x[m,m]
FinSi
FinFuncion

Algoritmo SubProcesos_Tema_A
Definir i,j,N,F Como Entero
Definir A,Suma Como Real
N=AleatorioNimpar()
Dimension A[11,11]
Para i<-0 Hasta N-1 Con Paso 1 Hacer
Para j<-0 Hasta N-1 Con Paso 1 Hacer
A[i,j]= Azar(199)-99 + (Azar(199)-99 )/100
FinPara
FinPara
F=AleatorioF()
EscribaMatrix(A,N)
Suma=CalcularSuma(A,N,F)
Escribir " "
Escribir " ... F:",F," ,Suma:",Suma
FinAlgoritmo
//5

//6
// diag ppal => i=j
// diag sec => i+j = M-1
// encima diag ppal => i<j
// debajo diag ppal => i>j
// encima diag sec => i+j<M-1
// debajo diag sec => i+j>M-1

Funcion res1 = AleatorioM()


Definir res1 como Entero
res1 = Azar(7)+4
Mientras res1 % 2 = 1 Hacer
res1 = Azar(7)+4
FinMientras
FinFuncion

Funcion res2 = AleatorioF()


Definir res2 como Entero
res2 = Azar(3)
FinFuncion

Funcion EscribaMatrix(x,n)
Definir i,j Como Entero
Escribir " Matriz de :",n,"x",n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar " ... "
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Escribir Sin Saltar x[i,j]," "
FinPara
Escribir " "
FinPara
FinFuncion

Funcion res3=CalcularSuma(x,n,f)
Definir i,j,M Como Entero
Definir res3 como Real
res3=0.0;M=n
Para i<-0 Hasta n-1 Con Paso 1 Hacer
Para j<-0 Hasta n-1 Con Paso 1 Hacer
Si (f=0) & ((i<j & i+j<M-1) | (i>j & i+j>M-1)) Entonces
res3=res3+x[i,j]
FinSi
Si (f=1) & (i=j | i+j=M-1) Entonces
res3=res3+x[i,j]
FinSi
Si (f=2) & ((i>j & i+j<M-1) | (i+j>M-1 & i<j)) Entonces
res3=res3+x[i,j]
FinSi
FinPara
FinPara
FinFuncion

Algoritmo SubProcesos_Tema_B
Definir i,j,M,F Como Entero
Definir B,Suma Como Real
M=AleatorioM()
Dimension B[10,10]
Para i<-0 Hasta M-1 Con Paso 1 Hacer
Para j<-0 Hasta M-1 Con Paso 1 Hacer
B[i,j]=Azar(199)-99 + (Azar(199)-99 )/100
FinPara
FinPara
F=AleatorioF()
EscribaMatrix(B,M)
Suma=CalcularSuma(B,M,F)
Escribir " "
Escribir " ... F:",F," ,Suma:",Suma
FinAlgoritmo
// 6
// Suma magica
Algoritmo Matriz_magica
Definir i,j,aux,N,suma,sumas,magica Como Entero;
Definir EsMagica Como Logico
Dimension sumas[22],magica[10,10];
//N=Azar(8) +3;
N=10;
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
magica[i,j]=Azar(N*N)+1
//Escribir " Dar dato: ",i," ",j;
//Leer magica[i,j];
FinPara
FinPara
Para i=0 Hasta 2*N+2-1 Con Paso 1 Hacer
sumas[i]=0;
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[i]=sumas[i]+magica[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[j+N]=sumas[j+N]+magica[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N]=sumas[2*N]+magica[i,i];
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N+1]=sumas[2*N+1]+magica[i,N-1-i];
FinPara
EsMagica=Verdadero
aux=sumas[0];
Para i=1 Hasta 2*N+1 Con Paso 1 Hacer
// sumas[i]=aux;
Si (aux!=sumas[i]) Entonces
Escribir " ... la matriz no es magica ...";
i=2*N+3; EsMagica=Falso
FinSi
FinPara
Si EsMagica Entonces
Escribir " ... la matriz es magica y la suma es: ",aux;
FinSi
FinAlgoritmo
// Suma mágica

¿Paseo mágico del Caballo?


1,48,31,50,33,16,63,18
30,51,46,3,62,19,14,35
47,2,49,32,15,34,17,64
52,29,4,45,20,61,36,13
5,44,25,56,9,40,21,60
28,53,8,41,24,57,12,37
43,6,55,26,39,10,59,22
54,27,42,7,58,23,38,11

/// ¿Paseo Mágico Caballo ?


///1;48;31;50;33;16;63;18
///30;51;46;3;62;19;14;35
///47;2;49;32;15;34;17;64
///52;29;4;45;20;61;36;13
///5;44;25;56;9;40;21;60
///28;53;8;41;24;57;12;37
///43;6;55;26;39;10;59;22
///54;27;42;7;58;23;38;11
Algoritmo PaseoMagicoCaballo
Definir i,j,k,aux,N,suma,sumas,magico,s Como Entero;
Definir PaseoMagico como logico
Dimension sumas[22],magico[8,8],s[64];
s[0]=1;s[1]=48;s[2]=31;s[3]=50;s[4]=33;s[5]=16;s[6]=63;s[7]=18
s[8]=30;s[9]=51;s[10]=46;s[11]=3;s[12]=62;s[13]=19;s[14]=14;s[15]=35
s[16]=47;s[17]=2;s[18]=49;s[19]=32;s[20]=15;s[21]=34;s[22]=17;s[23]=64
s[24]=52;s[25]=29;s[26]=4;s[27]=45;s[28]=20;s[29]=61;s[30]=36;s[31]=13
s[32]=5;s[33]=44;s[34]=25;s[35]=56;s[36]=9;s[37]=40;s[38]=21;s[39]=60
s[40]=28;s[41]=53;s[42]=8;s[43]=41;s[44]=24;s[45]=57;s[46]=12;s[47]=37
s[48]=43;s[49]=6;s[50]=55;s[51]=26;s[52]=39;s[53]=10;s[54]=59;s[55]=22
s[56]=54;s[57]=27;s[58]=42;s[59]=7;s[60]=58;s[61]=23;s[62]=38;s[63]=11
N=8;k=0
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
magico[i,j]=s[k];k=k+1
FinPara
FinPara
Para i=0 Hasta 2*N+2-1 Con Paso 1 Hacer
sumas[i]=0;
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[i]=sumas[i]+magico[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[j+N]=sumas[j+N]+magico[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N]=sumas[2*N]+magico[i,i];
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N+1]=sumas[2*N+1]+magico[i,N-1-i];
FinPara
aux=sumas[0];
Escribir sin saltar aux," "
PaseoMagico=Verdadero
Para i=1 Hasta 2*N+1 Con Paso 1 Hacer
Escribir sin saltar sumas[i]," "
Si (aux!=sumas[i]) Entonces
Escribir"";Escribir " ... el paseo no es mágico ...";
PaseoMagico=Falso
i=2*N+3;
FinSi
FinPara
Escribir""
Si PaseoMagico Entonces
Escribir " ... el paseo sí es mágico y el número mágico es: ",aux;
FinSi
Para i=0 Hasta N-1 Con Paso 1 Hacer
Escribir sin saltar" .."
Para j=0 Hasta N-1 Con Paso 1 Hacer
si magico[i,j]<10 entonces escribir sin saltar"0";finsi
Escribir sin saltar magico[i,j]," "
FinPara
Escribir""
FinPara
Escribir""
FinAlgoritmo
///¿Paseo Mágico Caballo?
Verificando un cuadrado Mágico de 7x7
/// Suma magica
Funcion GeneraMagico7x7(magico,s)
Definir i,j,k,n como entero
n=7
Para i=0 Hasta n-1 Con Paso 1 Hacer
Para j=0 Hasta n-1 Con Paso 1 Hacer
magico[i,j]=0
FinPara
FinPara
i=0;j=trunc(n/2) /// posición del 1 (uno) en la mitad de la primera fila
k=1;magico[i,j]=k /// colocando el 1 (uno) en la mitad de la primera fila
Para k=2 Hasta n*n Con Paso 1 Hacer
i=i-1;j=j+1 /// subiendo de izquierda a derecha
Si i<0 Entonces
i=n-1
FinSi
Si j>n-1 Entonces
j=0
FinSi
Si magico[i,j]=0 Entonces
magico[i,j]=k
Sino
i=i+1;j=j-1 /// bajando de derecha a izqueirda
Si i>n-1 Entonces
i=0
FinSi
Si j<0 Entonces
j=n-1
FinSi
i=i+1 /// haciendo la sierra (bajar en el sentido i)
magico[i,j]=k
FinSi
FinPara
k=0
Para i=0 Hasta n-1 Con Paso 1 Hacer
Para j=0 Hasta n-1 Con Paso 1 Hacer
s[k]=magico[i,j];k=k+1
FinPara
FinPara
FinFuncion
Algoritmo Matriz_magica7x7
Definir i,j,k,aux,N,suma,sumas,magica,s Como Entero;
Definir EsMagica Como Logico
Dimension sumas[16],magica[7,7],s[49];
N=7;k=0
GeneraMagico7x7(Magica,s)
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
magica[i,j]=s[k];k=k+1
FinPara
FinPara
Para i=0 Hasta 2*N+2-1 Con Paso 1 Hacer
sumas[i]=0;
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[i]=sumas[i]+magica[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
Para j=0 Hasta N-1 Con Paso 1 Hacer
sumas[j+N]=sumas[j+N]+magica[i,j];
FinPara
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N]=sumas[2*N]+magica[i,i];
FinPara
Para i=0 Hasta N-1 Con Paso 1 Hacer
sumas[2*N+1]=sumas[2*N+1]+magica[i,N-1-i];
FinPara
EsMagica=Verdadero
aux=sumas[0];
Para i=1 Hasta 2*N+1 Con Paso 1 Hacer
// sumas[i]=aux;
Si (aux!=sumas[i]) Entonces
Escribir " ... la matriz no es magica ...";
i=2*N+3; EsMagica=Falso
FinSi
FinPara
Si EsMagica Entonces
Escribir"";Escribir""
Escribir " ... la matriz es magica y la suma es: ",aux;Escribir"";Escribir""
Para i=0 Hasta N-1 Con Paso 1 Hacer
Escribir sin saltar" .. "
Para j=0 Hasta N-1 Con Paso 1 Hacer
si magica[i,j]<10 entonces escribir sin saltar"0";finsi
Escribir sin saltar magica[i,j]," "
FinPara
Escribir""
FinPara
Escribir""
FinSi
FinAlgoritmo
/// Suma mágica

También podría gustarte