|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7168 (0x1c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Carre, seg_058aa7
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Text_Io;
package body Carre is
package Dimension_Io is new Text_Io.Integer_Io (Dimension);
package Dimension_Chiffres_Io is
new Text_Io.Integer_Io (Dimension_Chiffres);
function Cherche_Taille return Dimension is
Taille : Dimension;
begin
Text_Io.Put (" Entrez la taille du carre (nombre impair): ");
Dimension_Io.Get (Taille);
return Taille;
end Cherche_Taille;
procedure Initialiser (Tableau : in out Object;
Taille_Carre : in Dimension) is
A, B : Integer;
begin
for A in 1 .. Taille_Carre loop
for B in 1 .. Taille_Carre loop
Tableau.Valeurs (A, B) := 0;
end loop;
end loop;
end Initialiser;
procedure Va_Au_Centre (Taille_Carre : in Dimension;
Valeur_X, Valeur_Y : in out Integer) is
begin
Valeur_X := (Taille_Carre + 1) / 2;
Valeur_Y := (Taille_Carre + 1) / 2;
end Va_Au_Centre;
procedure Deplacer (Taille_Carre : in Dimension;
La_Direction : in Direction;
Valeur_X, Valeur_Y : in out Integer) is
begin
if La_Direction = Nord then
Valeur_X := Valeur_X - 1;
end if;
if La_Direction = Nord_Est then
if (Valeur_Y = Taille_Carre) then
Valeur_Y := 1;
else
Valeur_Y := Valeur_Y + 1;
end if;
if (Valeur_X = 1) then
Valeur_X := Taille_Carre;
else
Valeur_X := Valeur_X - 1;
end if;
end if;
if La_Direction = Nord_Ouest then
if (Valeur_Y = 1) then
Valeur_Y := Taille_Carre;
else
Valeur_Y := Valeur_Y - 1;
end if;
if (Valeur_X = 1) then
Valeur_X := Taille_Carre;
else
Valeur_X := Valeur_X - 1;
end if;
end if;
end Deplacer;
procedure Depose (La_Valeur : in Dimension_Chiffres;
Tableau : in out Object;
Valeur_X, Valeur_Y : in Integer) is
begin
Tableau.Valeurs (Valeur_X, Valeur_Y) := La_Valeur;
end Depose;
procedure Creer (Taille_Carre : in Dimension; Tableau : in out Object) is
Position_X, Position_Y : Integer;
Valeur_A_Deposer : Dimension_Chiffres := 1;
Aller_Au : Direction := Nord;
begin
Initialiser (Tableau, Taille_Carre);
Va_Au_Centre (Taille_Carre, Position_X, Position_Y);
Deplacer (Taille_Carre, Aller_Au, Position_X, Position_Y);
Depose (Valeur_A_Deposer, Tableau, Position_X, Position_Y);
for Valeur_A_Deposer in 2 .. (Taille_Carre * Taille_Carre) loop
Deplacer (Taille_Carre, Nord_Est, Position_X, Position_Y);
if Tableau.Valeurs (Position_X, Position_Y) /= 0 then
Deplacer (Taille_Carre, Nord_Ouest, Position_X, Position_Y);
end if;
Depose (Valeur_A_Deposer, Tableau, Position_X, Position_Y);
end loop;
end Creer;
procedure Affiche (Taille_Carre : in Dimension; Tableau : in Object) is
A, B : Integer;
begin
Text_Io.New_Line;
Text_Io.Put_Line (" ---- Carre Magique ----");
Text_Io.New_Line;
for A in 1 .. Taille_Carre loop
for B in 1 .. Taille_Carre loop
Dimension_Chiffres_Io.Put (Item => Tableau.Valeurs (A, B));
end loop;
Text_Io.New_Line;
end loop;
Text_Io.New_Line;
Text_Io.Put_Line (" ---- Fin du Carre Magique ----");
end Affiche;
end Carre;
nblk1=6
nid=6
hdr6=8
[0x00] rec0=22 rec1=00 rec2=01 rec3=052
[0x01] rec0=1f rec1=00 rec2=05 rec3=01a
[0x02] rec0=1a rec1=00 rec2=03 rec3=04e
[0x03] rec0=1a rec1=00 rec2=04 rec3=000
[0x04] rec0=18 rec1=00 rec2=06 rec3=000
[0x05] rec0=44 rec1=65 rec2=25 rec3=09e
tail 0x21766732e88d13dc4c2e5 0x42a00088462060003
Free Block Chain:
0x6: 0000 00 02 03 34 80 47 20 20 20 20 20 20 20 20 20 20 ┆ 4 G ┆
0x2: 0000 00 00 00 05 80 02 20 20 02 03 00 1b 20 20 20 20 ┆ ┆