Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-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 у ; |
|
Отметим, что во всех приведенных н а ш |
процедурах использова |
на спецификация. Обращение к процедуре является оператором, состоящим из идентификатора процедуры и списка фактических параметров, которые должны быть помещены в том не порядке, как соответствующие им формальные параметры. Тело процеду ры, вообще говоря, является блоком, но может быть составным оператором или дане простым оператором.
Процедура - функция
Остановимся на одном частном случае процедуры, когда в результате выполнения ее имеет место присвоение значения
только |
одной переменной. |
В |
этом случае обращение к процедуре может быть сущест |
венно упрощено оформлением этой процедуры как функции. Тог да написание названия этой процедуры с подстановкой факта-