Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.10.2024
Просмотров: 97
Скачиваний: 1
48
чений подынтегральной функции вне цикла. Соответствующей программой будет
begin real |
а, Ъ, n, sum, h, |
я, |
J0 ; |
|
|||
ВВОД |
( а , Ъ , п ) |
|
|
|
|||
hj = ( Ъ-е) / п |
• |
|
|
|
|||
sums = |
О ( |
|
|
|
|
|
|
for я* = a step |
2 w h until |
b - 2 д h do |
|
||||
sumt=sum +1 |
/ |
(h o c ? 16 Ж |
/ |
(1*(x t h)fl6) |
♦ |
||
|
|
|
|
* |
l |
/ (1 -p(x -fr2 * |
h) f 16 ) ; |
j0 s = |
h / |
3 * |
|
sum . |
|
|
|
печать |
( J0 ) |
|
|
|
|
- |
end
Ниже будет показало, что и эта программа может быть уп рощена.
Переменные с индексами
Эти переменные позволяют использовать один и тот же идентификатор для обозначения многих величин. Совокупность всех величин, описываемых одним идентификатором, называется массивом, а отдельные величины - его элементами. Элементы мож но найти в массиве по их индексам. Количество индексов может быть любым; они записываются в квадратных скобках и отделяют ся друг от друга запятыми.
В качестве цримера использования переменных с индекса ми, приведем систему двух линейных алгебраических уравнений,
записанных в виде
а11я1 •* в: 2 х 2 = Ъ1 ;
4
е?1 *1 * s2? *2 = ъ 2 •
—49 -
Для решения ее воспользуемся формулами Крамера;
х1 |
Ъ1в?г ~ sl2b? |
|
а'|1аор - |
В12.Н21 |
|
|
-_11Ь5 - Ъ1-а21 |
|
|
В11а ?2 “ |
®1 2 а21 |
и приведем программу, |
вычисляющую решение системы, причем |
описание и процедуру ввода пока опустим. Кроме того, присво им идентификатор знаменателю и предусмотрим, что если этот знаменатель меньше Ю -^, То значит допущена ошибка и вычис ления прекращаются.
Тогда алгоритм вычисления будет иметь следующий вид:
demon: =а [1 , ij * а [2,Щ - а |
[1, ^*а [2, ij |
} |
|
|
||||||
If |
еЬв |
(Депош) < ^ -5 then |
stop |
; |
|
|
|
|
||
х |
[l] |
: |
= |
(b[lj a a [2,1 |
- e [1 ,2j |
x |
h [ 2] |
) / |
denom f |
|
x |
[ 2] |
s.= |
(a [l,ij x b f 8] - b [ f ] |
* |
b ^2,ij |
) / |
denom ; |
При использовании в АЛГОЛ-60 переменных с индексами не обходимо сообщать следующую информацию:
1.Какие из переменных являются переменными с индексами
2.Сколько индексов имеет каждая из переменных с индек
сами.
3.Сколько элементов в каждом массиве..
4.Как пронумерованы элементы массива.
Ответ на все эти вопросы дает описание массива. Оно ставится в начале того блока, в котором используется массив. Но прежде чем-переходить к тому, как строится описание мас сива, сформулируем два определения._
Граничная пара состоит из двух арифметических выраже ний, разделенных двоеточием (большей частью это просто целые числа). Список граничных пар состоит из одной или более гра ничных пар, разделенных запятыми.•
Теперь можно дать понятие об описании массива. Оно на-
50 ~
чннается с описания типа элементов массива, т.е. reel,integer
или |
Boolean |
(т.е. все элементы массива имеют один и |
||
тот |
же тип!), |
затем следует слово |
a r r a y |
, за ним иденти |
фикатор массива, наконец, следуют квадратные скобки, внутри которых расположено столько граничных пар, сколько позиций для индексов имеет описываемый массив. Каждая граничная пара задает диапазон изменений индекса на данной позиции. Нижняя граница, так называемое первое число в паре, не может быть ■ больше верхней границы, т.е. второго числа в паре, а элемен ты нумериуются по данному индексу от нижней границы до верх
ней с шагом единица. Если |
перед словом |
array |
тип массива |
не указан, то этот массив' |
относится к |
типу real |
(заме |
тим, что это условие распространяется только на |
массивы). |
||
Цри написании нескольких массивов одного и |
того же |
типа, |
|
МОЖНО не |
повторять СЛОВ arrev. real array, in teger array |
*дя |
|
Ял п Ь а д |
я т • Пр» описании нескольких массивов одного и |
того же типа, имеющих одни и те же списки граничных пар, мож но написать этот список граничных пар в квадратных скобках • после идентификатора последнего массива, т.е. только один раз, цри этом идентификаторы массивов отделяются друг от дру га запятыми. Наконец, отметим, что при описании массивов раз ных типов порядок их произволен.
Теперь приведем примеры описаний различных массивов:
a r r a y |
rau |
|
L1 : 2<3 |
; |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
a r r a y |
laabda |
[ |
- 2 : 3 ] ; |
|
|
|
|
||||
a rra y |
io ta |
|
t |
-24 : -б] ; |
|
|
|
|
|||
r e a l |
чггву |
L |
|
[1:6,0:24]; |
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
r i a l |
array |
A |
[ l : 5 Э] , |
в |
[l:200] |
, |
с |
[l:I0,1:10,1:^; |
|||
a rra y |
D, |
E, |
P, |
G, H |
[I : 20 , I : 2С( |
|
|
||||
in teger |
array |
data |
[-8 |
: -3, |
-2 |
: 3, |
27 : 5э] ; |
||||
Boolean array |
Quine |
|
[ I |
: 30, I : б] |
; |
||||||
Boolean array |
j , k, ш |
[о |
: |
2б ], |
n [ i |
: |
16^ ,р ,а [о :б ] |
\
— 51
агга£ |
* |
[l:IO,I:IoJ |
, у ljD :49j; integer |
|
вггат |
I |
[-1 |
0 :0 ] ; |
||
boolean array N |
[iO |
2 2oj |
J array А. В, |
С |
[1:9, |
0:l6j |
5 |
|||
Integer |
array |
i .1 к |
[о |
: 5, 0 : 5, 0 |
: 5, I |
; ioj ; |
||||
array |
B C D |
|
[i : |
2, I : 50] |
|
|
|
|
|
|
|
Как уже указывалось, |
в большинстве |
случаев граничные па |
ры образуются из целых чисел, однако они могут образовывать ся и из любых арифметических выражений.
Если соответствующие арифметические выражения принимают не целые значения, то они округляются до ближайшего целого значения, а в случае окончания на 5 - в большую сторону. Так,
если элемент массива характеризуется |
А [2.4, 5.8, |
6 .б] , |
|||
то этот элемент эквивалентен тому, который характеризуется |
|||||
А • [2,6,7] |
и аналогично в |
[-2.84, |
1.89, -7,б] |
эквивалещ- |
|
. тен в |
[-3.2, -7] . |
|
|
|
|
Приведенные выше примеры использования индексных выра |
|||||
жений не объясняют, почему они имеют большое значение в |
|||||
МГ0Л-60. Можно думать, что это еще один способ обозначений |
|||||
переменных и |
только, однако |
это не так. |
|
Применяя индексы, которые сами являются переменными, можно составить программу, используя общий элемент одного массива или общие элементы нескольких массивов, а затем вы полнить одинаковые вычисления для многих элементов, меняя значения их индексов. Чаще всего это делается с помощью опе ратора цикла.
Приведем примеры програш такого рода. Пусть требует
ся составить программу, |
вычисляющую с у ш у квадратов двадца |
ти чисел: |
20 |
|
|
' Зд = |
„ |
i =1
Будем считать, что эти двадцать чисел образуют один массив, одномерный и обозначаемый идентификатором х . Тогда на