Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие

.pdf
Скачиваний:
8
Добавлен:
23.10.2023
Размер:
5.14 Mб
Скачать

-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п*а а 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

в матрице х 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

Соседние файлы в папке книги из ГПНТБ