Frage

Ich komme aus Java / C ++ zu Ada und Mühe habe die kleinen Dinge herauszufinden. Ist es möglich, ein Array und bitten Sie den Benutzer für die Min / Max-Werte dann initialisieren es zu erklären? Ich mag es nicht konstante Werte für die MIN und MAX definieren zu müssen und es scheint, wie es sollte eine Art und Weise, dies zu tun.

Sie können eine ungezwungene Art definieren, aber Sie haben noch die Größe in dem declare-Block zu initialisieren, bevor das Programm gestartet wird. Würde ich brauche das Paket Körper haben, dann die Prozedur Deklaration, dann ein declare-Block innerhalb der Prozedur, die die Arbeit tatsächlich der Fall ist, wie folgt?

PACKAGE BODY Build_Graph IS
    TYPE Graph_Box IS ARRAY(Integer RANGE <>, Integer RANGE <>) of Character;

    PROCEDURE Print_Graph(Min, Max, Height, Width: IN Integer) IS
    BEGIN
        DECLARE
            Graph: Graph_Box(0..Height, 0..Width);
        BEGIN
            Do_Stuf(Graph);
        END;
    END Print_Graph;

END Build_Graph;
War es hilfreich?

Lösung

Was Sie zeigen, sollte es funktionieren. Allerdings ist der „declare“ Block völlig unnötiger, es sei denn, Sie Bereich Ausnahmen auf der Array-Variablendeklaration oder etwas fangen wollen. Ich würde es ändern zu lesen:

procedure Print_Graph(Min, Max, Height, Width: in Integer) is
    Graph: Graph_Box(0..Height, 0..Width);
begin
    Do_Stuf(Graph);
end Print_Graph;

(Ich mag nicht auch die reservierten Worte in Kappen mit.)


Eine weitere Sache, die ich erwähnen sollte: Ada-Arrays nicht Haben sein 0-basiert wie in CISH Sprachen. Sie können sein, aber man kann sie auch bei 1 machen beginnen, oder -200, oder was auch immer Sie wollen.

Der Grund, warum ich dies bis zu bringen ist, dass ich die Art und Weise sehen Sie Graph_Box definiert es ist eigentlich Höhe + 1 Elemente hoch und Breite + 1 Elemente breit. Sie wollen wahrscheinlich nicht, dass, wie es geeignet ist, jemand später zu verwirren (vielleicht sogar Sie).

Mein typisches Idiom ist meinen Array-Indizes bei 1 zu beginnen, es sei denn ich einen guten Grund habe, nicht zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top