[Como podrás ver te modifico un poco el anterior para que puedas entrar diferentes valores
pero solo podrás entrar de 1x1 a 8x8 puesto que el procedimiento de zipzac no admite mayor
valor de 8x8 pero si quieres puedes aumentarlo a lo que quieras modificando ese procedimiento
a mas valores.
Te daré un pequeño consejo dependiendo de loquee el profesor tiene enseñado si presentas
esto tal como esta se puede mosquear un poquito.
Lo mejor es que con esta guía lo pongas a tus conocimientos eso te asegurara una mejor presentación y un mejor aprendizaje para ti.
El explicarte todo el programa llevaría muchas lineas de texto pero en esta misma sección
en [ Compilador de pascal 7.7 ] y tienen un pequeño curso que te ayudara .}
program arreglos;
uses
crt;
const
n : integer = 8; {Valores maximos del Arreglo}
m : integer = 8;
type
arreglo = array[1..8,1..8] of integer;
var
x, y, cuen : integer;
tecla : char;
matriz : arreglo;
arrayzipzac : array[1..(8 * 8)] of integer; {array Para la presentacion
en zipzac}
procedure rellenaarreglo; {Ponemos Valores al arreglo segun n y m}
var
z : integer;
begin
z := 1;
for y := 1 to m do
for x := 1 to n do
begin
matriz[x,y] := z;
z := z + 1;
end;
end;
procedure zipzac(dato : arreglo); {Preparamos y presentamos el zipzac}
var
ti : integer;
xx, yy : integer;
sal : boolean;
begin
ti := 1;
for yy := 1 to m do
for xx := 1 to n do
begin
arrayzipzac[ti] := dato[xx,yy]; {pasamos los datos al array}
ti := ti + 1;
end;
gotoxy(12,(m * 2) + 2);write('Arreglo Orijinal');
for xx := 1 to n do
for yy := 1 to m do
begin
gotoxy(xx * 4,yy * 2);write(dato[xx,yy]);
end;
ti := 1;
xx := 1;
yy := 1;
sal := false;
x := 1;
y := 1;
repeat {Realizamos el zipzac pasando los datos al arreglo}
matriz[xx,yy] := arrayzipzac[ti];
case ti of
1,6,15,28,36,49,58,63 : xx := xx + 1;
2,7,8,9,16,17,18,19,20,29,30,31,32,33,34,35,44,45,46,47,
48,55,56,57,62 : begin
xx := xx - 1;
yy := yy + 1;
end;
3,10,21,43,54,61 : yy := yy + 1;
4,5,11,12,13,14,22,23,24,25,26,27,37,38,39,40,41,42,50,
51,52,53,59,60 : begin
xx := xx + 1;
yy := yy - 1;
end;
end;
ti := ti + 1;
until (sal = true) or (ti > (n * m) - 1);
gotoxy(50,(m * 2) + 2);write('Arreglo En Zipzac');
for y := 1 to m do
for x := 1 to n do
begin
gotoxy(40 + (x * 4),(y * 2));write(matriz[x,y]);
end;
end;
procedure presentaenelordendado; {Pedimos forma de las tres y presentamos}
var
x1, y1 : integer;
begin
gotoxy(4,2);write('En que orden [I] = izq/arriv/avaj [D] ',
'= der/avaj/arriv [Z] = zipzac');
repeat
tecla := upcase(readkey);
until tecla in ['I','D','Z'];
clrscr;
case tecla of
'I' : begin
gotoxy(5,(m * 2) + 2);write('Arreglo izq/arriv/avaj');
for y := 1 to n do
for x := 1 to m do
begin
gotoxy(x * 4, y * 2);write(matriz[x,y]);
end;
end;
'D' : begin
gotoxy(5,(m * 2) + 2);write('Arreglo der/avaj/arriv');
y1 := 1;
for y := m downto 1 do
begin
x1 := 1;
for x := n downto 1 do
begin
gotoxy(x1 * 4, y1 * 2);write(matriz[x,y]);
x1 := x1 + 1;
end;
y1 := y1 + 1;
end;
end;
'Z' : begin
zipzac(matriz);
end;
end;
end;
procedure presentadiagonalprincipal; {Presentamos la diagonal principal}
var
xx, yy : integer;
begin
for xx := 1 to n do
for yy := 1 to m do
begin
gotoxy(xx * 4,yy * 2);write(matriz[xx,yy]);
end;
gotoxy(12,(m * 2) + 2);write('Arreglo Orijinal');
y := 1;
for x := 1 to n do
begin
gotoxy(40 + (x * 4),y * 2);write(matriz[x,y]);
y := y + 1;
end;
gotoxy(44,(m * 2) + 2);write('Arreglo Diagonal principal');
end;
procedure presentalosdearrivadeladiagonal;
var
xx, yy : integer; {presintamos los valores de arriva de
la diagonal}
begin
for xx := 1 to n do
for yy := 1 to m do
begin
gotoxy(xx * 4,yy * 2);write(matriz[xx,yy]);
end;
gotoxy(12,(m * 2) + 2);write('Arreglo Orijinal');
y := 1;
repeat
for x := y + 1 to m do
begin
gotoxy(40 + (x * 4),y * 2);write(matriz[x,y]);
end;
y := y + 1;
until y > n;
gotoxy(40,(m * 2) + 2);write(' Los De Arriva De La Diagonal');
end;
procedure presentalosdeabajodeladiagonal;
var
xx, yy : integer; {presintamos los valores de abajo de
la diagonal}
begin
for xx := 1 to n do
for yy := 1 to m do
begin
gotoxy(xx * 4,yy * 2);write(matriz[xx,yy]);
end;
gotoxy(12,(m * 2) + 2);write('Arreglo Orijinal');
y := n;
repeat
for x := y - 1 downto 1 do
begin
gotoxy(40 + (x * 4),y * 2);write(matriz[x,y]);
end;
y := y - 1;
until y < 1;
gotoxy(42,(m * 2) + 2);write('Los De Abajo De La Diagonal');
end;
procedure presentalosdearribayabajodeladiagonal;
var
xx, yy : integer; {presintamos los valores de arriva y abajo de
la diagonal}
begin
for xx := 1 to n do
for yy := 1 to m do
begin
gotoxy(xx * 4,yy * 2);write(matriz[xx,yy]);
end;
gotoxy(12,(m * 2) + 2);write('Arreglo Orijinal');
y := 1;
repeat
for x := y + 1 to m do
begin
gotoxy(40 + (x * 4),y * 2);write(matriz[x,y]);
end;
y := y + 1;
until y > n;
y := 1;
for x := 1 to n do
begin
gotoxy(40 + (x * 4),y * 2);write(chr(92));
y := y + 1;
end;
y := n;
repeat
for x := y - 1 downto 1 do
begin
gotoxy(40 + (x * 4),y * 2);write(matriz[x,y]);
end;
y := y - 1;
until y < 1;
gotoxy(40,(m * 2) + 2);write('Los De Arriba y Abajo De La Diagonal');
end;
procedure entradatamanomatriz; {Entramos los valores de la matriz}
var
erro, nn, mm : integer;
num : string[2];
ted : char;
begin
clrscr;
gotoxy(10,2);write('*** Entre Tama¤o De La Matriz Max [8x8] ***');
gotoxy(10,3);write('<<< [ESC] Genera matriz 8x8 >>>');
gotoxy(10,5);write('Valor De N = ');
gotoxy(23,5);
repeat
ted := readkey;
until ted in[#49..#56,#27];
if ted <> #27 then
begin
num[1] := ted;
num[0] := chr(1);
val(num,nn,erro);
gotoxy(10,6);write('Valor De M = ');
gotoxy(23,6);
repeat
ted := readkey;
until ted in[#49..#56,#27];
if ted <> #27 then
begin
num[1] := ted;
num[0] := chr(1);
val(num,mm,erro);
n := nn;
m := mm;
end;
end;
end;
procedure menugeneral; {El menu prindipal}
var
tec : char;
sal : boolean;
begin
sal := false;
repeat
clrscr;
gotoxy(10,1);write('<<<<<< Menu General >>>>>>');
gotoxy(10,2);write('--------------------------');
gotoxy(10,4);write(' 1 : Presenta En El Orden Dado');
gotoxy(10,5);write(' 2 : Cantenido Diagonal Principal');
gotoxy(10,6);write(' 3 : Contenido De Encima De Diagonal');
gotoxy(10,7);write(' 4 : Contenido De Abajo De Diagonal');
gotoxy(10,8);write(' 5 : Contenido De Abajo y Encima De Diagonal');
gotoxy(10,9);write(' 6 : Salir');
gotoxy(10,11);write('**** Elija Opcion 1 a 6 ****');
tec := readkey;
if tec in[#49..#54] then
begin
case tec of
#49 : begin clrscr; presentaenelordendado; readln; end;
#50 : begin clrscr; presentadiagonalprincipal; readln; end;
#51 : begin clrscr; presentalosdearrivadeladiagonal; readln; end;
#52 : begin clrscr; presentalosdeabajodeladiagonal; readln; end;
#53 : begin clrscr; presentalosdearribayabajodeladiagonal; readln; end;
#54 : sal := true;
end;
end;
until sal = true;
end;
begin
clrscr;
entradatamanomatriz; {Programa principal}
rellenaarreglo;
menugeneral;
end.