Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.10.2024

Просмотров: 103

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

71

цию транспонирования матрицы.

В этой программе мы познакомимся с возможностью поясне­ ний алголовского текста, которая состоит в том, что после точ­ ки с .запятой или слова begin можно написать слово сс— ent , затем любой поясняющий текст, оканчивающийся точкой с запятой.

На работу программы это не оказывает никакого влияния. Не­

 

смотря на искусственный характер этого цримера, он даст нам

 

наглядное пояснение всего изложенного.

 

 

 

 

 

Полная программа, вычисляющая матрицу

д

, с использо­

ванием процедуры транспонирования матриц будет следующей:

 

 

begin real eua?

Integer

l.m .qt

array

a,b ,o,d

[o« 1 2 ,0»I2j [

 

 

 

procedure

5Tens

(

a ,

m,

n

 

 

 

 

 

 

begin real

pj

integer

l,k j

 

 

 

 

 

 

 

 

fo r

1 ; *

m

step 1

u n til

n d£

 

 

 

 

 

 

 

 

for

k s»l*i

step ц until n do

 

 

 

 

begin

pi»e

£ i,k j}

e[i,k ]»= .a jk ,ijj a [k,ij

=»P

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВОД

( a,

b,

о

) i

 

 

 

 

 

 

 

 

Trnnn tИ.0 .1 2 )!

oomment

 

место матрицы a

заняла матрица aT

i

for .1» a 0 step 1

until

12

do

 

 

 

 

 

 

fo r

m: a

0

step

1

until 12

do

 

 

 

 

 

,®| .=a[j,m j+b[j, ra); oomment найдена сумма матриц а

и Ъ

3'

Trans (c 9 0 , 1 2 );

comment

место матрицы

о

заняла матрица

о1

:

for j s

=t 0 step 1

until

12

do

 

 

 

 

 

 

3 fo r

m: =

0

step

1

 

until

12

 

do

 

 

 

 

 

begin sum 1 = О ;

 

 

 

 

 

 

 

 

 

 

 

 

 

for q » =» 0 aten 1

until

12

йД

 

 

 

 

sum»

= sum

* a £ j,q ]

*

0

[*’*] }

 

 

 

 

d

j'j,mj

:

-

sum

 

 

 

 

 

 

 

 


■— 72

 

 

end .

окончено умножение матриц аТ + ь и

оТ

Тгвпв(ъ,о,72) .comment

место матрицы

ъ заняла матрица

ф

ъ i

for

,1 : =

О step

1

until 1 2

do

 

 

 

 

for

m*

=

O step 1

 

until 12

do

 

 

 

d p

,mj

•=

d £j,m j

-b

jV.mj; comment

найдена матрица

g

;

 

 

 

печать

(d)

;

 

 

 

 

 

end

 

 

stop

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Необходимо

отметить некоторые особенности этой програм­

мы. Прежде всего надо обратить внимание на то, что обозначение одного из фактических параметров совпадает с обозначением со­ ответствующего формального параметра. Выше уже указывалось на допустимость подобного, но мы еще раз хотим подчеркнуть, что это совершенно разные вели, а совпадают только их обозначе­

ния. В нашем примере это формальный

параметр а

 

и массив

компонент матрицы

а

. Кроме того,

подчеркнем,

что

после

выполнения процедуры Trans

( а . О,

1 2 ) идентификатор

а

обозначает массив компонент транспонированной матрицы, т.е.

матрицы

m

. Затем при нахождении суммы матриц

а

и

ъ .

а

этой сумме опять присваивается наименование

а

. Далее

пос­

ле

выполнения

процедур

Тгапв

( е,0,12) и

Trans

 

( ъ>0.12)

транспонированным матрицам с2

и

 

присваиваются

"старые"

наименования,

т.е. с

и ъ . При нахождении

произведения мат­

риц ят + ъ и

 

мы присваиваем этому произведению наиме­

нование

d

. Наконец, при нахождении разности матриц (а^+ъ)*

* с

и

ът

 

мы снова присваиваем этому произведению

наименование

d

. Нестандартное

слово АЛГ01-60

stop

,

стоящее

перед заключительным

end

, означает

остановку

машины; оно может

быть

опущено без изменения работы програм­

мы.

 

 

 

Приведем еще один

подобный

пример. Пусть патл нужно най­

ти'сумму площадей

треугольников со сторонами, которые образо­

ваны из отрезков длинной а,ь,с

и d . Для этого сконструи­


73 •'

руем процедуру, вычисляющую площадь треугольника по трем его сторонам, точнее, по длинам трех его сторон. Эту гггацедуру

построим на основании формулы Герона

где а,ь,с

- длины сторон треугольника;

Р - полупериметр

Тогда для решения поставленной задачи,

нам нужно будет

четыре раза обратиться к этой процедуре, а затем сложить по­ лученные результаты. Программа, приводимая ниже," решает эту задачу; заметим что она не претендует на оптимальность,

begin re a l

B ,b,e,d,aum 5

array

Q

: 4J

-

 

 

 

procedure

Г (x ,y ,z ,e )

{

Гба!

x ,y ,z ,e

;

 

 

 

begin real

p

;

 

 

 

 

 

 

 

 

 

 

 

pi = .5 * (x + у * z ) t

 

 

 

 

 

si

=sqrt

(p r(p -

x) л

(p -

у)

(p

-

z) )

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВОД

( a , b , c , d

) ;

 

 

 

 

 

 

 

 

 

 

Г (a,b,c,Q

JYJ

 

)

 

 

 

 

 

 

 

 

 

 

 

Г ( b , c , d , Q

[ 2 ] )

 

 

 

 

 

 

 

 

 

 

 

r ( c , d , a , Q [ 3 ]

 

)

 

 

 

 

 

 

 

 

 

 

 

Г ( d , a , b , Q [4 ] )

 

 

 

 

 

 

 

 

 

 

 

sum: = Q M +

Q

[ 2]

Q

[3 ]

*

Q

H ;

 

 

 

 

печать

( sum

) f

st°P

 

 

 

 

 

 

 

end .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отметим только, что x,y

и

s

- формальные параметры про­

цедуры

с идентификатором

 

г

, обозначающие длины

сторон

треугольника,

а

з

-

формальный

параметр той же

процедуры


74

для обозначения результата процедуры, т.е. площади треуголь­ ника.

Подведем краткие итоги изложенных сведений о процедуре.

Процедура в языке АЛГОЛ-60 задается своим описанием, которое

состоит из символа provedага

( заголовка процедуры и тела

процедуры. Заголовок процедуры указывает идентификатор про­

цедура, список формальных параметров и порядок их следования;

он служит связующим звеном между обращением к процедуре и те­ лом цроцедуры. В заголовке процедуры могут быть поставлены таи называемые спецификаторы формальных параметров. Их постановка

облегчает работу транслятора, и поэтому она обычно исполь­

зуется.

 

 

3 качестве спецификаторов используются следующие слова

АЛГОЛа.

Integer

,

 

real ,

 

 

■Boolean

,

 

switch

,

 

string

,

real array. Integer array. Boolean array.

procedure, real prodadnre,

Integer prooadore. Boolean prooednre.

Следует отметить, что с внешней стороны спецификаторы

очень похожи на

описания, но

существенное отличие их от опи- г

ramri» состоит в

том, что для

соответствующих переменных не

[

предусматривается выделение ячеек в памяти машины, поэтому

;

есть и некоторые внешние отличия.

 

Так, при спецификации идентификатора массива не указы-

'


ваготся границы изменения его индексов, а цри спецификации идентификатора переключателя не указывается массив его меток. Кроме того, есть еще одно условие. Если некоторая переменная

относится к разряду значений, т.е. ,то обязательно должен быть указан тип принимаемых ею значений; слово value должно ставиться перед спецификациями.

Примеры спецификаций

re a l х

$

 

 

Integer

 

к

j

 

Boolean

 

F

j

 

a rra y

e

j

 

 

mrltoh

p o ly ;

 

valne

n;

Integer. ' a

;

valne

e ,y f

a rra y a

; re a l у ;

Отметим, что во всех приведенных н а ш

процедурах использова­

на спецификация. Обращение к процедуре является оператором, состоящим из идентификатора процедуры и списка фактических параметров, которые должны быть помещены в том не порядке, как соответствующие им формальные параметры. Тело процеду­ ры, вообще говоря, является блоком, но может быть составным оператором или дане простым оператором.

Процедура - функция

Остановимся на одном частном случае процедуры, когда в результате выполнения ее имеет место присвоение значения

только

одной переменной.

В

этом случае обращение к процедуре может быть сущест­

венно упрощено оформлением этой процедуры как функции. Тог­ да написание названия этой процедуры с подстановкой факта-