|
|
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_Magique, seg_058de7
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Io_Exceptions;
with Text_Io;
package body Carre_Magique is
package Mes_Val_Io is new Text_Io.Integer_Io (Valeur);
package Mes_Dim_Io is new Text_Io.Integer_Io (Dimension);
function Lire_Taille return Dimension is
T : Dimension;
Fichier_Es : Text_Io.File_Type;
Juste : Boolean := False;
begin
while Juste = False loop
begin
Text_Io.Put
("Entrez la taille du carre magique (nombre impair): ");
Mes_Dim_Io.Get (T);
if (T mod 2) /= 0 then
Juste := True;
end if;
exception
when Io_Exceptions.Data_Error =>
Text_Io.Put_Line ("Par defaut le carre est de taille 5");
return 5;
end;
end loop;
return T;
end Lire_Taille;
procedure Creer (C : in out Object) is
Position_Actuelle : Position;
V, Finale : Valeur;
Dir : Direction;
A, B : Dimension;
begin
Taille := C.Valeurs'Last;
C.Valeurs := (others => (others => 0));
Va_Au_Centre (Position_Actuelle);
Dir := Nord;
Bouger (P => Position_Actuelle, D => Dir);
Mettre_Valeur (C => C, V => 1, P => Position_Actuelle);
Finale := Taille * Taille;
for V in 2 .. Finale loop
Dir := Nord_Est;
Bouger (P => Position_Actuelle, D => Dir);
if C.Valeurs (Position_Actuelle.X, Position_Actuelle.Y) /= 0 then
Dir := Nord_Ouest;
Bouger (P => Position_Actuelle, D => Dir);
end if;
Mettre_Valeur (C => C, V => V, P => Position_Actuelle);
end loop;
end Creer;
procedure Afficher (C : in Object) is
begin
Text_Io.New_Line;
Text_Io.Put_Line ("----- Le carre magique demande -----");
Text_Io.New_Line;
for Y in 1 .. Taille loop
for X in 1 .. Taille loop
Mes_Val_Io.Put (C.Valeurs (X, Y));
end loop;
Text_Io.New_Line;
end loop;
end Afficher;
procedure Bouger (P : in out Position; D : in Direction) is
begin
case D is
when Nord =>
P.Y := P.Y - 1;
when Nord_Est =>
P.Y := P.Y - 1;
P.X := P.X + 1;
if P.X > Taille then
P.X := 1;
end if;
when Nord_Ouest =>
P.X := P.X - 1;
P.Y := P.Y - 1;
if P.X < 1 then
P.X := Taille;
end if;
end case;
if P.Y < 1 then
P.Y := Taille;
end if;
end Bouger;
procedure Va_Au_Centre (P : in out Position) is
begin
P.X := Taille / 2 + 1;
P.Y := P.X;
end Va_Au_Centre;
procedure Mettre_Valeur
(C : in out Object; V : in Valeur; P : in Position) is
begin
C.Valeurs (P.X, P.Y) := V;
end Mettre_Valeur;
end Carre_Magique;
nblk1=6
nid=4
hdr6=8
[0x00] rec0=20 rec1=00 rec2=01 rec3=03a
[0x01] rec0=1b rec1=00 rec2=06 rec3=01a
[0x02] rec0=24 rec1=00 rec2=03 rec3=00a
[0x03] rec0=0a rec1=00 rec2=02 rec3=000
[0x04] rec0=01 rec1=00 rec2=02 rec3=000
[0x05] rec0=44 rec1=66 rec2=a4 rec3=5cf
tail 0x21766e7f888e38c63f631 0x42a00088462060003
Free Block Chain:
0x4: 0000 00 05 03 fc 80 07 6c 65 20 6c 6f 6f 70 07 00 25 ┆ le loop %┆
0x5: 0000 00 00 00 09 80 06 2e 20 54 61 69 6c 06 20 20 20 ┆ . Tail ┆