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;
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top