Не понял.. как вы на этапе КОМПИЛЯЦИИ определите возможную ошибку... - в вашем коде замаскированная проверка ВРЕМЕНИ ВЫПОЛНЕНИЯ
Часть сообщения не отправилась из-за невнимательности, наверное. И ваще правильнее, наверное, так (компилятора под рукой нет что бы проверить):
type ArrSize is new Integer range 1 .. 10;
with Ada.Text_IO; use Ada.Text_IO;
package ArrSize_IO is new Integer_IO(ArrSize);
arr: array (ArrSize) or Real;
i: ArrSize;
begin
Get(i); -- здесь будет исключение Data_Error, если введёное значение не является числом от 1 до 10
arr(i):=Pi;
Put(arr(i));
endЕстественно, проверка рантаймная, а по другому никак, чудес не бывает...
Как вариант, процедура Get, инстанцированная для типа ArrSize, просто не позволит ввести значение, не являющееся числом от 1 до 10. Тогда никаких ошибок времени выполнения не будет...