Ada inizializza un array basato sull'input dell'utente
-
05-07-2019 - |
Domanda
Vengo da Java / C ++ ad Ada e ho problemi a capire le piccole cose. È possibile dichiarare un array e chiedere all'utente i valori min / max e inizializzarlo? Non mi piace dover definire valori costanti per MIN e MAX e sembra che ci dovrebbe essere un modo per farlo.
È possibile definire un tipo non vincolato, ma è comunque necessario inizializzare la dimensione nel blocco di dichiarazione prima dell'avvio del programma. Dovrei avere il corpo del pacchetto, quindi la dichiarazione della procedura, quindi un blocco di dichiarazione all'interno della procedura che effettivamente funziona, come il seguente?
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;
Soluzione
Ciò che mostri lì dovrebbe funzionare. Tuttavia, il "dichiarare" Il blocco non è totalmente intuitivo, a meno che non si desideri rilevare eccezioni di intervallo nella dichiarazione della variabile di matrice o qualcosa del genere. Lo cambierei per leggere:
procedure Print_Graph(Min, Max, Height, Width: in Integer) is
Graph: Graph_Box(0..Height, 0..Width);
begin
Do_Stuf(Graph);
end Print_Graph;
(Non mi piace anche avere le parole riservate in maiuscolo.)
Un'altra cosa che dovrei menzionare: gli array Ada non devono essere basati su 0 come nelle lingue cish. possono essere, ma puoi anche farli iniziare da 1, o -200 o come vuoi.
Il motivo per cui ho sollevato questo è che vedo il modo in cui hai definito Graph_Box in realtà è Altezza + 1 elementi in altezza e Larghezza + 1 elementi in larghezza. Probabilmente non lo vorrai, poiché potrebbe confondere qualcuno in seguito (forse anche tu).
Il mio idioma tipico è iniziare i miei indici di array su 1, a meno che non abbia qualche buon motivo per non farlo.