Н. Джехани - Язык Ада (1988) (1160771), страница 9
Текст из файла (страница 9)
Операция (А геш В) определяется отно- шением А = (А/В) и В + (А геш В) где А и  — целые, / — операция целочисленного деления, а.(А геш В) имеет знак А и абсолютное значение меньшее, чем абсолютная величина В. С другой стороны, (А шоо В) имеет знак В и абсолютное значение меньшее, чем абсолютная величина В. Согласно такому ограничению, (А шее) В) определяется отно- шением А = В а Х + (А шее) В) где )ч) — некоторое целое. Тип аегулоп та Лги пааеого опеааида деастаие Гип левого операида о ар целый Фиксированный Фиксированный Фиксированный деление Универсальный гпип с фиксированной пючкой, т. е.
тип с произвольной точностью, не доступен пользователю. Значения этого типа должны явно преобразовываться в значения фиксированного типа, прежде чем они могут использоваться. 1.3.2.6. Операции наивысшего старшинства ~4.5.6] 1.4. Операторы [5] В данном разделе обсуждаются традиционные (такие как, например, в языке Паскаль) операторы языка Ада. Операторы, относяшиеся к параллельному выполнению, к исключительным ситуациям и включению машинного кода, выходят за рамки данного раздела.
Умножение Фиксированный целый Фиксированный целый Фиксированный Фиксированный Тот жа что и у левого операнда Тот же, что и у правого операнда Универсальный Гйиксироваиный Тот же, что и у левого операнда Универсальиый ФиксиРованный 1.4.1. Пустой операпюр [5.Ц В языке Ада присутствует оператор, который ничего не делает. Этот оператор есть пи!1; 17устой оператор используется в тех ситуациях, когда не нужно выполнять каких-либо действий, однако по синтаксису языка Ада требуется присутствие по крайней мере одного оператора. 1.4.2.
Присваивание [5.2] Оператор присваивания имеет форму Ч:= Е; где Ч вЂ” нмя переменной, а Š— это выражение. Выполнение оператора присваивания вызывает присваивание значения Е переменной, обозначенной через Ч. Тип Ч должен быть таким же, как и тип Е.
Более того, значение Е должно удовлетворять ограничениям, наложенным на тип Ч. Присваивание разрешено для всех типов. Например, полным массивам, отрезкам нли записям можно непосредственно присвоить значения. 1.4.3. Условный оператор [5.31 Условный оператор Ы имеет форму Ы логическое выраясение !Ьеп последовательность — операторов 1е!яЫ логическое- выражение Свеи последовательность операторов ! 1е1яе последовательность — операторов1 епд Ы; Выполняется последовательность операторов, соответствующая первому логическому выражению, если оно имеет значение !гпе.
В противном случае выполняется последовательность операторов, соответствующая части е!зе (если она присутствует). Следующий фрагмент программы, иллюстрирующий использование условного оператора, заимствован из абстрактной версии программы сортировки массива по методу быстрой сортировки, проведенной в конце данной главы. Ы один элемент Евеп ппП; е1зЫ два элемента Свеи упорядочить их е1зЫ более чем два элемента Сиеп разделить массив на две части и отсортировать каждую часть епд Ы 41 Вее ение 1.4.4. Операпюр выбора [5.41 Оператор выбора саяе используется для выбора одной последовательности операторов из нескольких возможных.
Он имеет вид саяе выражение 1я ггйеп вариант 1 ~ вариант ) = > последовательность операторов ггйеп вариант ~ ~ вариант ) = > последовательность-операторов| епд саяе; Выразсение в операторе выбора должно быть дискретного типа. Выполняется последовательность операторов, соответствующая тому варианту, который совпадает со значением выражения. Вариант должен быть статическим выражением дискретного типа или дискретного диапазона.
Вариант, являющийся дискретным диапазоном, — это сокращенная форма для списка вариантов, представляющих эти значения их диапазона. Варианты должны покрывать все возможные значения выражения в операторе выбора и взаимно исключать друг друга. Вариант огйегя можно задавать для последней альтернативы как сокращенное название всех оставшихся возможных значений выражения.
Примером оператора выбора является фрагмент программы-интерпретатора для бесскобочной польской нотации саяе С И ггйеп '+' => АРО; ягйеп ' — ' = > ЯЗВТВАСТ,' пйеп '*' = > М13ЬТ1Р1Х ягйеп '/' = > 1з1Ч1РЕ; ягйеп оГЬегя = >Р15Т ОХ БТАСК; епд саяе; Оператор выбора понятнее и более зффективен при реализации, чем многочисленные ветвления с использованием условного оператора И С = '+ ' ГЬеп АР1З; е1гй1 С = ' — ' ГЬеп ЯЗВТКАСТ, е!яИ С = "' ГЬеп МУЬТ1Р1У; е!яИ С = '/' 1Ьеп Р1Ч11зЕ; е1яе РОТ ОХ БТАСК; епд И; Оператор выбора в отличие от условного оператора можно использовать только в случае выбора, зависящего от значений дискретного выражения. 1.4.5. Циклы [5.51 Оператор цикла имеет три формы: ьнЫ1е логическое выражение 1оор последовательность операторов епд 1оор; аког параметр цикла 1п [гегегяе1 дискретный диапазон 1оор последовательность — операторов епд 1оор; 42 Глвва ! !оор последовательность операторов епй 1оор; Первый цикл, называемый циклом ггвйе, выполняется повторно до тех пор, пока логическое выражение имеет значение ТЛЕ.
Например, следующий цикл выполняется до тех пор, пока не достигнут конец файла Р. Операторы внутри цикла копируют значения из файла Р в файл К: гг!г!!е по! Ег(О ОР Р11.Е(Р) 1оор КЕА1)(Р, Х); %)К!ТЕ(К, Х); епо !оор; При второй форме, называемой циклом !ог, цикл выполняется по одному разу для Каждого значения из дискретного диапазона с параметром цикла, равным этому значению. Параметру цикла значения присваиваются в возрастающем порядке, когда отсутствует ключевое слово гечегяе, и в убывающем порядке, когда гегегяе присутствует. Параметр цикла явно не описывается. Он определяется неявно своим присутствием в цикле и имеет тип специфированного дискретного диапазона.
Параметр цикла локален по отношению к циклу, и его значение нельзя изменить в теле цикла. Ему нельзя присвоить никакое значение и его нельзя передавать процедуре каким-либо образом, позволяющим изменить его значение. Параметр цикла выступает в качестве константы внутри тела цикла. В следующем примере цикл выполняется для каждого значения индекса массива А, за исключением последнего, и при этом значения индексов присванваются параметру 1 в убывающем порядке: — из программы вычислений полинома по схеме — Горнера, приведенной в конце главы 1ог 1 !и гегегве А'Р1КБТ..А'(.АКТ вЂ” ! !оор — параметр цикла 1 описывается неявно своим — присутствием в заголовке цикла Я.1М: = ЯЗМ Ч + А(1); епд 1оор; Цикл 1ог не выполняется ни разу, если специфирован пустой диапазон. Например, следующий цикл не выполняется вообще, если ЬАБТ равно О.
1ог Л !и 1..!.АКТ 1оор — поиск в таблице ЯТ записей со значением — Х в поле 1(э Ы ВТ (1).1О = Х гйеп ге!нги ТК()Е; евд 11; епд !оор; Третья форма цикла используется тогда, когда не подходит ни цикл 1ог, ни цикл ггййе. В этой форме цикл повторяется до тех пор, пока выход из него ие будет указан явно, например с помощью операторов ехй, ге!вгп или йо!о, или неявно при возникновении исключительной ситуации. Третья форма цикла используется также для выражения бесконечных циклов, встречающихся в задачах йвв вняв (параллельных программах), которые никогда не должны останавливаться. Примерами таких программ являются часы, которые идут постоянно, а также бесконечный процесс чтения символов из буфера и выдача их в виде прописных букв. Второй из приведенных примеров иллюстрируется фрагментом программы: 1оор ВУРРЕК.КЕАО(Х); Р()Т((ЗРРЕК(Х)); епд 1оор; Выполнение оператора В()РЕЕК.КЕАР приостанавливается, когда буфер пуст и возобновляется при появлении в нем хотя бы одного символа.
1.4.5.1. Имена циклов Цикл можно пометить, написав перед ним идентификатор, например Помеченный цикл должен завершаться этим же именем, например епй 1оор 14 Метки циклов используются в операторах выхода. Пометка циклов полезна также в случае, когда циклы глубоко вложены друг в друга и когда первая и последняя строки цикла текстуально далеко разнесены. 1.4.6. Блоки 15.61 Блок — это последовательность операторов, которой предшествует множество локальных описаний и за которой следует последовательность реакций на исключительные ситуации (реакция на исключительные ситуации обсуждается в гл. 5 об исключениях). Блок может быть помеченным точно так же, как и цикл. 1 дес1аге описательная часть) Ьей)п последовательность операторов 1ехсерпоп обработчики исключений) епй; Блоки используются для ограничения области действия описаний и реакций на исключительные ситуации на те операторы, с которыми они логически связаны.
В отсутствие блоков эти описания будут «видимы» для всех других операторов и не будет возможности управлять реакциями на исключительные ситуации, возникающими в этих операторах. Память для объектов, описанных в блоке, распределяется при входе в блок и освобождается при выходе из него. Предположим, например, что необходимо написать фрагмент программы, обмениваюшей значения двух строк А и В типа 8ТК1Хб (1..80). бес)аге ТЕМР:ВТК1Ь(0(1..80); пива г Ьейш ТЕМР:= А; А:= В; В:= ТЕМР; епд; ТЕМР— это локальная по отношению к операторам переменная, которую они используют. ТЕМР невидима для других операторов в остальной части программы.