Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-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

оператор