Про "ассортимент" в аде - PullRequest
       40

Про "ассортимент" в аде

9 голосов
/ 10 декабря 2011

Следующая строка исходного кода в Ada,

type Airplane_ID is range 1..10;

, можно записать как

type Airplane_ID is range 1..x;

, где x - переменная? Я спрашиваю об этом, потому что хочу знать, можно ли изменить значение x, например, с помощью ввода текста. Заранее спасибо.

Ответы [ 4 ]

9 голосов
/ 10 декабря 2011

Нет, границы диапазона должны быть статическими выражениями.

Но вы можете объявить подтип с динамическими границами:

X: Integer := some_value;
subtype Dynamic_Subtype is Integer range 1 .. X;
3 голосов
/ 11 декабря 2011

Можно ли записать type Airplane_ID is range 1..x;, где x - переменная?Я спрашиваю об этом, потому что хочу знать, можно ли изменить значение x, например, с помощью ввода текста.

Я предполагаю, что вы имеете в виду, что изменение значения x изменяет сам диапазон вдинамический стиль;если так, то, строго говоря, нет ... но это не совсем полный ответ.

Вы можете сделать что-то вроде этого:

Procedure Test( X: In Positive; Sum: Out Natural ) is
  subtype Test_type is Natural Range 1..X;
  Result : Natural:= Natural'First;
 begin
   For Index in Test_type'range loop
     Result:= Result + Index;
   end loop;

   Sum:= Result;
 end Test;
3 голосов
/ 10 декабря 2011

Нет. Объявление диапазона Ады должно быть постоянным.

0 голосов
/ 16 сентября 2017

Как уже упоминалось в других ответах, вы можете объявлять диапазоны так, как вам хочется, при условии, что они объявляются в каком-то блоке - блоке объявления, процедуре или функции; например:

with Ada.Text_IO,Ada.Integer_Text_IO;
use Ada.Text_IO,Ada.Integer_Text_IO;

procedure P is
   l : Positive;
begin
   Put( "l =" ); 
   Get( l );
   declare
      type R is new Integer range 1 .. l;
      i : R;
   begin
      i := R'First;
      -- and so on
   end;
end P;
...