Ада инициализирует массив на основе пользовательского ввода

StackOverflow https://stackoverflow.com/questions/1608584

  •  05-07-2019
  •  | 
  •  

Вопрос

Я перехожу с Java / C ++ на Ada, и мне сложно разобраться с мелочами. Можно ли объявить массив и спросить пользователя о минимальных / максимальных значениях, а затем инициализировать его? Мне не нравится определять постоянные значения для MIN и MAX, и кажется, что должен быть способ сделать это.

Вы можете определить неограниченный тип, но вам все равно придется инициализировать размер в блоке объявления перед запуском вашей программы. Нужно ли иметь тело пакета, затем объявление процедуры, а затем блок объявления внутри процедуры, которая фактически выполняет работу, как показано ниже?

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;
Это было полезно?

Решение

То, что вы там показываете, должно работать. Однако " объявить " Блок совершенно не нужен, если только вы не хотите перехватывать исключения диапазона в объявлении переменной массива или чем-то еще. Я бы изменил это, чтобы прочитать:

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

(мне также не нравится иметь зарезервированные слова в заглавных буквах.)

<Ч>

Еще одна вещь, которую я должен упомянуть: массивы Ada не имеют , чтобы быть на основе 0, как в языках Cish. Они могут быть, но вы также можете сделать так, чтобы они начинались с 1, или -200, или как хотите.

Причина, по которой я привел это, заключается в том, что я вижу, как вы определили Graph_Box, он на самом деле имеет высоту + 1 высоту и ширину + 1 ширину. Вы, вероятно, не хотите этого, так как это может запутать кого-то позже (возможно, даже вас).

Моя типичная идиома - начинать индексы моего массива с 1, если у меня нет веских причин не делать этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top