Ada Initialisieren eines Arrays basierend auf der Benutzereingabe
-
05-07-2019 - |
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;
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.