DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦d36d0cfac⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Carre, seg_058aa7

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



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;

E3 Meta Data

    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  ┆                ┆