Внутри этой процедуры создадим локальную процедуру Double, которая умножает любое число, переданное ей, на 2, и локальную целую переменную `X'.
Обратите внимание на то, что целая локальная переменная `Х' имеет начальное значение 1. Тип Integer используют для хранения целых чисел со знаком, без учета их минимального и максимального значения. Если последнее не безразлично, то, как будет показано дальше, то же самое должно быть сделано по-другому.
Внутри этой новой процедуры находится локальная процедура 'Double', которая удваивает передаваемое ей значение. Локальная процедура, как и локальная переменная, может использоваться только процедурой, внутри которой она расположена. Возможность вложения процедур полезна в больших программах и является стандартной для языка Pascal (в отличие от С и С++).
Указание `in out' означает, что значение передается в процедуру и может быть изменено в ней.
Выражение "With .. Ada.Integer_Text_IО" указывает на то, что для текстового ввода-вывода целых чисел будет использоваться предопределенный пакет Ada 95 с именем Ada.Integer_Text_IО. Он содержит оператор "Put" который печатает переданное ему целое число.
Вторая инструкция "begin" является началом самой процедуры Compute. Процедура Compute содержит бесконечный цикл, который выводит текущее значение и удваивает его. Инструкция "Put" печатает число, а "New_Line" обеспечивает вывод текста с новой строки.
Компьютеры не могут оперировать с бесконечно большими числами; рано или поздно значение выходит за пределы области, выделенной ему для хранения. Что же происходит в этом случае? Некоторые языки программирования (например, С) просто допускают появление "мусора". Ada демонстрирует лучший подход: когда операция (такая, как умножение на 2) невыполнима, Ada вызывает "исключение". Таким образом, рано или поздно, эта программа будет прервана с сообщением, указывающим, почему и где произошло ее завершение. Как будет показано далее, исключения могут быть перехвачены и обработаны внутри программы.
Что обычно делает Ada, когда вычисление не может быть выполнено?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 1 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s1sf.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк