Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.10.2024
Просмотров: 94
Скачиваний: 1
37
•' во e ls e |
|
необходимо (попутно мы расширили определение арифме |
||||||||
тического выражения,, тем что в него могут входить условия). |
||||||||||
Следовательно, |
конструкции |
|
|
|
||||||
i f |
а |
= |
б |
then |
ys = 2 |
; |
|
|
|
|
j f |
Ъ |
= |
0 |
then |
z: = |
0 |
e ls e |
g : |
= 9 |
; |
являются допустимыми, в то время как конструкция |
||||||||||
g: |
= |
|
i f |
с = 1 |
then |
|
x f 2 |
• |
|
|
недопустима; правильной будет конструкция |
||||||||||
gs |
= |
i f |
с = 1 |
then |
х 1 2 |
e ls e |
2 - |
х t 3 ; |
Приведем пример программы, осуществляющей расчет таблицы зна чений функции, задаваемой так называемой разветвляющейся фор мулой.
' |
|
|
|
|
|
|
|
|
17000 |
- 0,485 |
В 2 |
, если |
R |
< 120 ; |
|||
3 = < |
■ Д § 0 Щ — |
|
, |
если |
в |
> |
120 |
|
I |
I + |
з £ — |
|
|
|
|
|
|
|
|
18000 |
|
|
|
|
|
|
для значений |
R |
от |
20 до 200 с шагом 5. |
В таких случаях |
||||
часто употребляется условная запись |
|
|
|
|||||
|
|
R |
= 20 |
(5) |
200 , |
|
|
|
но нужно иметь в виду, что к АЛГОЛ-60 она никакого отношения
не имеет. |
|
|
|
|
|
Для |
решения этой |
задачи |
необходимо цредусматр* - |
вать организацию цикла по |
R |
. Для этого нужно положить |
||
R. = |
20 и |
обеспечить счет по формуле, а затем увеличить зна |
||
чения |
R |
на шаг и проверить на окончание. Если новое зна |
||
чение |
н |
окажется больше 200, |
то вычисления прекращаются, |
в противном случае счет -продолжается. .
Нике приводится блок-схема этой программы
—38
Эта блок-схема реализуется, например, |
следующей программой: |
|||
begin real |
R, |
3 |
j |
|
R : = 20 ; |
|
|||
againj 3i= if |
R<120 |
then |
Г7СОО-0.485 * Rt 2 |
|
else |
1 3 0 0 0 /(1+Rf2 /1 8000)( |
|||
t |
|
|
|
|
печать |
(R,S) |
; |
|
|
If R"Jf200 |
then |
atop |
f |
|
R i = |
R |
+ 5 |
? |
|
go to |
again |
end |
|
—39
При обсуждении плана составления программы было употреблено слово "цикл" в расчете на его понятность, но теперь все же дадим строгое определение. Цикл в программе - это многократно повторяемый участок этой программы.
Оператор цикла
' Как правило, цри построении программ приходится всегда сталкиваться с тем, что в них многократно повторяются те или иные участки программы, т.е. с тем, что эти программы цикли ческие. Для подобных вычислений в АЛГОЛ-60 есть специальный и очень удобный аппарат - оператор цикла. Общая форма такого оператора имеет следующий вид:
fог < переменная > : = < список цикла > do < оператор>
Список цикла состоит из одного или нескольких элементов списка цикла, являющихся в простейшем случае арифметическими выраже ниями (в частности, переменными или числами).
Основная идея оператора цикла состоит в многократном вы полнении оператора, стоящего после do в соответствии со значениями, принимаемыми переменной. Если под управлением дан ного оператора цикла повторно выполняются несколько операто ров, то они-должны быть объединены в один составной оператор,
т.е. должны быть заключены в операторные скобки |
begin и end. |
||||||
|
Рассмотрим пример использования общей формы оператора |
||||||
цикла. Пусть требуется вычислить значение выражения |
|||||||
|
|
у = х 3 - a3 in (а2 * х 2) |
|
||||
для |
х |
= -20;-1,2;^",7;2,4;5,9 |
и напечатать соответствую |
||||
щее |
значения |
х и |
у . |
|
|
||
|
а |
for |
х: = -20, |
—‘1,2, 1.7, |
2.4,‘ 5.9 do |
|
|
|
|
begin у| |
= |
xt3 -at 3/3 > In (at 2 + xt2 |
) T |
||
|
|
|
|
печать (x, y) |
end |
|
Значительно удобнее выглядит оператор цикла в том случае, ког
—40
да мы имеем дело с равноотстоящими значениями переменной, т.е. с "шаговой" таблицей. В этом случае нужно задать только на
чальное значение, шаг и конечное |
значение переменной. Полный |
|||
|
__ |
|
|
for |
оператор цикла со списком цикла такого рода имеет вид |
-— |
|||
переменная: = начало step |
цриращение until |
конец |
do |
|
оператор. Заметим, что оператор, |
следующий после |
do |
, вы |
полняется до тех пор, пока значение переменной не превзойдет значения "конец", т.е. until понимается здесь как "пока включительно". Такая формулировка точна в случае положитель ного цриращения, а в случае отрицательного приращения вычис ления продолжаются до тех пор, пока переменная не станет мень ше значения "конец". Все это хорошо иллюстрирует ранее разоб ранный пример разветвляющейся программы. Эта программа может быть теперь записана проще:
begin r e e l |
R, 3 ; |
|
|
|
|
|
||
f o r |
Rj |
=20 |
step 5 |
u n t il |
200 |
d о |
|
|
beg in |
3i |
= |
I f R< 120 then |
17000-0.485 |
* |
Rf 2 |
||
|
e ls e |
1ЯООО / |
(1 + |
Rf2 |
/ 18000) |
; |
|
печать ; ч.ч )
end
\
end
Существует еще один вариант оператора цикла, дающий большую гибкость при определении числа повторений оператора. Такой вариант используется при циклах с незаданным заранее числом повторений, например при итерационных циклах или в циклах, находящих сумму ряда; в этих случаях окончание цикла определяется выполнением требований по точности.
В качестве примера оператора цикла такого рода приведем нахождение корня квадратного из числа А по формуле
(р'/еУ"х+рrev |
» Prev х:=х . |
Это осуществляется повторным вычислением по этой формуле до тех пор, пока не будет получена заданная близость значений *
и p re v х . Если разность между ними достаточно мала, то вычис
ление окончено, |
в противном случае prev х |
присваивается но |
||
вое значение, равное |
х , и вычисление продолжается и т.д. |
|||
Этот процесс описывается следующим образом: |
|
|||
|
prev х t |
= 1 |
; |
|
fo r х» |
= 0. 5х (A/prev |
x + p re v х ) w hile |
||
|
аЪэ (x -p re v x ) > ~ 6 do prev |
x«=x ; |
||
|
|
|
10 |
|
Оператор цикла подобного рода встречается в двух разновид ностях. В.одной из них начальное значение управляющей пере менной присваивается вне цикла, а в другой - внутри него.
Как видно, приведенный выше пример относится к первому
случаю. |
Заметим, |
что в АЛГОЛ-60 такое вычисление корня квад |
|
ратного |
не применяется; там предусмотрено использование стан |
||
дартной функции |
sqrt |
. Изложенное можно рассматривать как |
введение в построение циклических программ, которое заверша ется формальным оцределением оператора цикла.
Элементом списка цикла могут быть: |
|
|||
1) |
арифметическое выражение |
, |
|
|
2) |
арифметическое выражение |
step |
арифметическое вы |
|
ражение |
u n t i l |
арифметическое выражение |
, |
|
3) |
арифметическое выражение |
whlla |
булевское выражение* |
|
Список цикла состоит из одной или нескольких конструк |
||||
ций такого рода, отделенных одна от другой запятой. |
||||
Заголовок цикла имеет следующий вид: |
|
|||
|
for |
переменная: = список цикла do |
Оператор цикла состоит из заголовка цикла, за которым следу ет любой оператор (возможно составной), оператор может иметь метку. Полный вид оператора цикла будет таким:
fo r переменная : = список цикла do |
оператор |