книги из ГПНТБ / Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие
.pdf-20 -
2.6.1.2.8.2.Если виход изсбласти цикла осущестззляется в результате выполнения этого цикла, то значение его пара метра становится неопределенным.
Если же выход из области цикла осуществляется с по мощью безусловного или вычисляемого операторов G0 Tg или арифметического оператора IF , то значение параметра цикла определено и совпадает с его значением в момент выполнения оператора, выводящего из облаоти цикла.
Замечание. Дня того, чтобы к определенному таким об разом параметру цикла можно было обращаться вне этого цик ла, необходимо предварительно преобразовать его значение.
Это осуществляется путем обращения (вне области цикла!) к встроенной функции FLgAr. Внутри области цикла, однако, к параметрам этого и внешних по отношению к нему циклов мож но (и нужно!) обращаться как к обычным переменным.
|
Пример. |
> |
|
Печать номера первого отрицательного элемента в мас |
|
сиве длины 100. |
|
|
|
Dg 1 1=1, 10 О; |
Gg Tg 2{ |
1 : |
IP (A(I).LT.O) |
|
|
KsO; |
|
2s |
Gg Tg 3; |
|
K=FL0AT ( I ) ; |
|
|
|
PRCTP 4-,K; |
|
4: FgRMAT ...
2.6.1.2.8.3.Внутри'области цикла запрещается изменять зна чения параметра цикла, а также начального, конечного зна чений и шага.
2.6.1.2.8.4.Запрещается переход извне внутрь области цик ла. В частности, если один и тот же оператор является ко нечным оператором для нескольких вложенных циклов, то ис-
- 21 -
пользование мотки упошнутого оператора разрешается толь
ко внутри области самого внутреннего (наиболее глубоко вложенного) цикла.
В случае, когда вход внутрь области цикла пли выход
из этой области осуществляются с помощью каких-либо ко
манд автокода или оператора cgf Tgf с возвратом, компилятор не обеспечивает ни сохранение значения параметра цикла
при выходе из пего, ни проверку на допустимость входа внутрь цикла. Программист при этом-должен учитывать, что
параметр самого внутреннего цикла хранятоя в РА (регист ре адреса), а значение параметра внешнего цикла J хранит
ся в той ;;:е ячейке, что и переменная J,B виде:
0.52. О. J.0
Таким образом, с помощью средств автокода параметр цикла
можно использовать и в этом случае.
Еще один пример. Печать таблицы значений полинома
11 |
а - х 1 1 - 1 (Л-массив коэффициентов полинома а. ) . |
|
^~ |
||
1=1 |
1 |
. |
|
|
|
|
Ш |
x»i,aoi |
Р=0;
DJ 2 1=1,11; 2: Р=РяХ+А(1)|
1: PRINT |
з, х. ?; |
3; | Я |
• • • |
Замечание. Разность между конечным значением и начальным значением должна быть кратна шагу.
2.6.1.3. Операторы ввода/вывода. ,
Имеются-.следующие типы операторов ввода/вывода:
-операторы печати;
-оператор ввода с перфокарт;
-оператор перфорации;
-оператор обмена с МБ и МП;
-оператор отладочной печати.
- 22 -
Все операторы ввода/вывода реализуются о помощью
обращений к соответствующим стандартным программам (за исключением ввода с перфокарт без контроля и без перевода).
2.6.1.3.1. Операторы печати.
Операторы печати имеют вид:
ГЮ1Ж; |
п, |
< список печати) ; |
или |
cW, |
< список печати > ? |
PMCNT |
Первый оператор осуществляет вывод на АЦПУ, а второйна
узкую печать.
п -метка оператора У0кгЛАт , в соответствии с которым осуществляется преобразование (редактирование) печатаемой
информации (этот оператор FgRUAlдолжен быть |
в той же |
программкой единице, что и оператор PRIKT |
; |
^ -признак виде узкой печати (десятичная(с переводом
или 6es него) или восьмеричная).
Список ьечати состоит из одного или отделенных друг о? друга запятыми нескольких элементов списка печати.
(Иногда он может отсутствовать - см.ниже). Элементом списка печати может быть:
-переменна? (простая или с индексом);
-идентификатор массива*
-неквный икнл.
Есда. в описке печати встречается переменная с индек
сом (либо в качестве самостоятельного элемента списка,ли
бо в качестве части неявного цикла), то индексные выраже
ния еч-ой переменной могут быть только (натуральными) чис
лам |
ИЛИ простыми переменными (но не выражениями вида |
С- s |
I , I + К илз С к I + К). |
Простейший элемент списка печати - это простая пере менная ы'4 один элемент массива. Таким образом, каждый элемент списка Печати эквивалентен одному ( переменная) кла нескольким (идентификатор массива* неявный цикл)
простейшим элементам списка печати.
- 23 -
При выполнении оператора PRIHT. указанным (в опера торе ВДМАТ или при помощи параметраV ) способом печата ются значения величин, упомянутых в списке печати.
Переменная специфицирует сама себя - печать одного значения (значения простой переменной или элемента масси ва).
Идентификатор массива специфицирует весь массив - печать всего массива. Если массив является двумерным, то он печатается по строкам, т.е. в следующем порядке:
а 1 1 ' а 1 2 ' * * * , а 1п*а 2Га 22*' **, а 2 п ' * • * »вш1, а т2"" в , а шп*
Неявный цикл специфицирует некоторую часть массива. Он имеет вид:
(Л(1), 1=11, 12, 13)
или
( А ( 1 , о С ), |
1=11, |
12, |
13) |
|
|
или , |
|
|
13) |
|
|
(А(оС ,1), М 1 , |
12, |
|
|
||
или |
J=J1, J2, J3), 1=11» |
|
|
||
( ( A ( I , J ) , |
12, |
13) |
|||
или |
|
|
13), J=J1, |
|
|
( ( A ( I , J ) , |
1=11, |
12, |
J2, |
J3) |
|
пли яе |
|
12, I J ) . |
|
|
|
( A ( I , I ) , |
1*11, |
|
|
||
Здесь: |
|
|
|
|
|
A - идентификатор массива; °C - (натуральное) число или |
|||||
простая переменная; I,J,I1,I2,I3»J1,J2,J3 |
- параметр цик |
||||
ла, начальное и конечное значения и шаг-соответствующих |
|||||
неявных циклов (ср. 2.6.1.2.8.). |
|
|
|||
В случае вложешюсти неявных циклов наиболее быотро |
|||||
меняется параметр внутреннего цикла. |
|
|
|||
При 13=1 |
или J3=»1 |
элемент неявного цикла ",13" или, |
соответственно, ", J3" можно не писать. Примеры.
Печать главной диагонали матрицы 10 х 10:
PRINT 1 , ( A ( I , I ) , 1п1,10)5
- 24 ~
Печать пторой строки матрицы 10 х 10: PRIST 1, ( A ( 2 , I I ) , 11=1,10);
Печать першх трех элементов К-го-столбца матрицы 10 х 10:
PRINT 1 , ( Л ( 1 , К ) , |
1=1,5); |
Печать по столбцам верхней левой подматрицы 3 x 3 |
|
в матрице 1С х 10: |
I*1,3)»Js1,3)f |
PRINT 1, ( ( A ( I , J ) , |
Печать на АЦПУ в соответствии со спешфикацшшн оператора гййКАД описана в 2.6.2.2,5. Если происходит печать только (текстовое) постоянной информации, специфкцированноп (ак тивными) элементами формата или накопленного на буфере ос татка, то<список печати >отсутствует, и, таким образом, оператор печати в STOM случае будет иметь вид:
PRIifT п;
Характер вывода на узкую печать определяется значе нием параметра t) , который должен бить цифрой 0,1 пли 2.
V =0 - восьмеричная печать (печать команд);
^=1 - печать чисел с переводом из двоичной системы счисления в десятичную;
^=Z ~ десятичная печать без перевода (печать шиф ров).
Вслучае вывода па узкую печать модно печатать и интерва ла. .Для печати одного интервала служит (отсутствующий при печати на АЦПУ) элемент списка печати "/" (косач черта).
Для печати нескольких интервалов косая черта повторяется несколько раз.
При печати чисел или шифров интервал имеет вид:
0,
при печати команд - 1.11.1111.1111.1111
2.6,143.2. Оператор ввода с перфокарт. '
Оператор ввода с перфокарт имеет вид:
READ ОС' (5 , А, В, C m , . . . ;
- 25 -
где c*L и (3 - признаки соответственно контроля правильнос ти ввода и перепода вводимого материала из десятичной сис темы в двоичную ( = 0 - контроль есть, оСй 1 - контроля нет; (Ъ =0 - перевод есть, ( 3 * 1 - перевода нет); Л, Б, С:п , ... - элементы ввода, отделенные друг от друга запятыми;
Л, В, ... - идентификаторы простых переменных (не являю щихся параметрами цикла и не тлеющих абсолютного адреса - см. 2.G.2.1.2) или массивов, значения которых вводятся с перфокарт (значения массивов вводятся поэлементно по строкам).
С:п - где п - натуральное число - означает, что подряд вводятся значения нескольких (а именно, п) простых пере менных (не являющихся параметрами цикла и не имеющих абсо лютного адреса). Эти значения вводятся одним массивом пер фокарт и присваиваются простым переменным в порядке их яв ного описания (см. 2.6.2.1.2). Все п простых переменных, начиная с переменной С, должны, таким образом, быть явно описаны,- в противном случае результат выполнения операто
ра READ не определен.
Каждый элемент ввода в операторе ввода с перфокарт дожен подготавливаться в виде отдельной колода перфокарт (в частности, одной перфокарты), снабженной правильной контрольной суммой (К£), если оС=0 (контроль есть), или , " 2 1 " . если Л =1 (контроля нет).
При выполнении оператора ввода с перфокарт вводятся соответствующие массивы данных, и значения этих данных присваиваются соответствующим элементам ввода.
Ввод с контролем реализуется с помощью стандартной программы (см. 5.9. ) , которая выходит на останов с печатью соответствующей информации при несовпадении конт рольной суммы, находящейся в конце вводимого массива перфо карт, с контрольной суммой, подсчитанной при его вводе, а также при вводе массива перфокарт, содержащего большее ко личество данных, чем длина соответствующего элемента ввода,
- 26 -
Длина вводимого массива данных может быть меньшей, чем длина соответствующего элемента ввода. Б этом случае
все остальные переменные (или элементы массива)-в элемен
те ввода сохраняют свои прежние значения. При вводе с контролем об этом печатается соответствующая информация, но останов не происходит.
При вводе с переводом перед присваиваниемзначений
вводимых данных соответствующим переменным происходит пере
вод этих значений в .двоичную систему счисления, т.е. внут реннюю форму представления данных в машине.
Замечание.
Нельзя непосредственно вводить с перфокарт значения
массивов - формальных параметров или массивов, расположен
ных в динамической памяти (см. 2.6.2.1.3.5).
2,6.1.3.3. Оператор перфорации.
Оператор перфорации имеет вид:
PUNCH А, В, С:п, . . . ;
где А, В, С: п, ... - элементы списка перфорации, отделен
ные друг от друга зашпыми.
Элементы списка перфорации в точности соответствуют элементам ввода с перфокарт (см.2.6.1.3.2.). Перфорация г::эчеки£ соответствующих переменных происходит в том виде, в каком из; представлены в машине (т.е. без перевода).
Каждый элемент списка перфорации перфорируется в виде
отдельной колоды перфокарт. В конце этой колоды перфорирует
ся перфокарта с ее контрольной суммой, и происходит останов:
0.77. 0. 0770. 0 Еслед за этим требуется установить на читающее устройство
отперфорированную колоду перфокарт и падать па ПУСК. Про изойдет (фиктивный) ввод упомянутой колоды. Если она отперфорирована и ввелась правильно, то продолжится дальнейшая
работа программы. В противном случае (т.е. если колода отперфорирована или ввелась неправильно)- произойдет АВОСТ ВЗ.У,
Тогда следует выбросить эту колоду перфокарт и нажать на
-27 -
ПУСК. Произойдет повторная перфорация той же колоды,
вслед за чем нужно повторить описанную проверку и т.д. - вплоть до правильной перфорации колоды.
Замечание.
Нельзя непосредственно отперфорировать значения
массивов - форлалышх параметров пли массивов, расположен ных в динамической памяти (см. 2.6.2.1.3.5.).
2.6.1.3.4. Операторы обмена с ЦБ или ЫЛ.
Программист может использовать магнитную ленту на
лентопротяжных механизмах О, I , 2 и 3 и магнитные бараба-'
ны U, I й 2. Однако, если в программе тлеются обращения к стандартным программам, вводимым с перфокарт, то последняя четверть 1.Ш-2 (3.0000*3.7777) не может быть использована.
Кроме того, если имеются динамические массивы (см, 2.6.2.^.3.5.), то не может бить использовано начало памяти на
магнитных.барабанах (начиная с МБ-0), т.е. участок, раз ный общей длине динамических массивов (с некоторой незначи
тельной поправкой, связанной с постраничной организацией
этих [массивов - см. $.5. ) .
Операторы обмена с Г.Ш или МЯ осуществляют считывание
или запись одного массива на магнитный барабан или магнит
ную лепту. Соблюдение указанных выше ограничений, однако,
компилятором•не проверяется, так что при их невыполнении могут возникнуть неопределенные результаты. Используемый массив не может быть формальным параметром и не может нахо
диться в динамической памяти.
Обмен с МБ или МЛ происходит с контролем. При неудач ной четырехкратной попытке записи или считывания происхо дит останов.
0.77. 0.7777.0 При нажатии на ПУСК попытка повторяется (см. также?. 4. ) .
Если дата записываемого массива в МОЗГ составляет н кодов, то на МБ или МП запишется (Н+1 кодов (последний код - контрольная сумма). Это следует учитывать при записи
- 28 -
последующих массивов на МБ и при разметке МЛ. Перед за
писью на ЬШ лента должна быть соответстгущим образом
размечена.
5.6.1.3.4.1. Обмен с магнитным барабаном.
Операторы обмена с магнитным барабаном имеют вид:
WRITS С И , а), А}
для записи на МБ и
READ (14 , в ) , А;
для считывания с МБ,
где S> - номер МБ (9 =0, 1 или 2 ) , а - адрес на МБ (вось
меричное число в диапазоне 0^а^37777д или простая пере менная, принимающая в момент выполнения данного оператора
целочисленные значения в диапазоне 0^ а * 16383JQ), Л - идентификатор записываемого или считываемого массива (из
МОЗУ-0 или М03У- 1 ) .
Простая переменная а не может быть параметром цикла или иметь абсолютный адрес.
2.6.1.3.4.2. Обмен с магнитной лентой.
Операторы обмена с магнитной лентой имеют вид:
|
WRITS ( 2 ^ | а ) , А| |
для записи на МЛ и |
|
|
READ ( 2 ^ » а ) , А; |
для считывания с МЛ, |
|
где |
- номер лентопротяжного механизма (SI =0, 1 , 2 |
или 3 ) , |
а - номер зоны на МЛ (восьмеричное целое число или |
простая переменная, принимающая в момент выполнения данно го оператора целые неотрицательные значения), А - иденти фикатор записываемого или считываемого массива (из МОЗУ-0 или М03У- 1 ).
Простая переменная а не может быть параметром цикла или иметь абсолютный адрес.
-29 -
2.6.1.3.5.Оператор отладочной печати.
Оператор отладочной печати слуяит для вывода указан ное количество раз па узкую печать элементов печати, рас смотрениях в 2.6.1.3.1.
Оператор отладочной печати имеет вид:
.DEBUG n, V , <список печати > }
где п - количестве повторений выполнения данного операто ра - натуральное десятичное число, $ - вид печати (V =0 - восьмеричная печать (команд), V =1 - печать чисел с пе реводом из двоичной системы в десятичную, V =2 - десятич ная печать без перевода (печать шифров)). Определение (списка печати > приводится в 2.6.1.3.1.
Оператор DEBUG выполняется тогда, когда на него по падает управление, а количество повторений его выполнения еше не исчерпано (т.е. он еще не выполнился п раз).
В случае д=1000 и/или i =1 соответствующие п и ^ мокно не писать. Если до < списка печати > указано только одно число, то считается, что это число - количество повто рений п. •
При печати элементы списка печати автоматически отде ляются друг, от друга интервалом, описанным в 2.6.1.3.1.
Примеры.
Печать 1000 раз (т.е. практически, каждый раз)чис лового массива А:
DEBUG А;
Печать два раза переменной С2 и диагональных элемен тов матрицы Р:
DEBUG 2, 02, |
1-1,10 ) | |
Печать каждый раз массива шифров (непереведенных де сятичных чисел) G:
DEBUG 1000, 2, 0}
Перед выводом £ списка печати ^ печатаются три строки:
+++0 +++++++++
++40 +++++•+++
+++0 +++++F