Nella programmazione Ada, qual è il modo migliore per creare una matrice 2D di una dimensione specificata dall'utente?
Mi sto insegnando Ada per lavoro (dopo molti anni di programmazione in C), e ho difficoltà a capire come creare un array di una dimensione che è nota solo al runtime ...
Il mio semplice programma deve fare quanto segue.
- Chiedi all'utente di digitare due numeri, per la larghezza (X) e l'altezza (Y) di una matrice di caratteri bidimensionali.
- Utilizza questi valori come limiti superiori dell'array (0..X-1, 0..Y-1).
- Inizializza la matrice con zeri.
Dopo un po 'di googling penso di esserci quasi, se faccio un codice fisso dell'array a una dimensione fissa, allora il programma funziona bene, ma mi piacerebbe che l'array fosse dimensionato secondo il desiderio dell'utente.
Il mio programma completo è il seguente, non viene compilato, ma spero sia sufficiente per dimostrare cosa sto cercando di fare.
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Characters; use Ada.Characters;
procedure test is
type Two_Dimensional_Char_Array is array (Integer range <>, Integer range <>) of character;
--grid : Two_Dimensional_Char_Array (0..59, 0..29) := (others => (others => ' '));
grid : Two_Dimensional_Char_Array;
procedure Draw_Grid(scr : Two_Dimensional_Char_Array) is
X, Y : Integer := 0;
begin
Put("Width? ");
Get(X);
Put("Height? ");
Get(Y);
declare
grid : Two_Dimensional_Char_Array(0..X-1, 0..Y-1);
begin
grid := (others => (others => 0));
end;
Put("+");
for X in scr'First(1)..scr'Last(1) loop
Put("-");
end loop;
Put_Line("+");
for Y in scr'First(2)..scr'Last(2) loop
Put("|");
for X in scr'First(1)..scr'Last(1) loop
Put(scr(X, Y));
end loop;
Put_Line("|");
end loop;
Put("+");
for X in scr'First(1)..scr'Last(1) loop
Put("-");
end loop;
Put_Line("+");
end Draw_Grid;
begin
grid(0,0) := 'a';
grid(0,1) := 'b';
grid(1,1) := 'c';
grid(20,10) := 'd';
grid(59,29) := 'X';
Draw_Grid(grid);
end test;