- с клавиатуры, из файла, с внешнего устройства (сканера, стриммера...)
Вывод данных из программы осуществляется:
- на экран монитора, в файл, на внешнее устройство (принтер, графопостроитель...)
Принятые имена устройств ввода/вывода в операционной системе MS-DOS:
- консоль (клавиатура при вводе, экран монитора при выводе) – CON, файл – полное имя файла, принтер – PRN.
12.3 Операторы ввода/вывода
Указывают, какие данные подлежат вводу или выводу, куда или откуда.
READ (<N устр.>,<M формата>)<список элементов>
WRITE(<N устр.>,<M формата>)<список элементов>
<N устр> – номер устройства ввода или вывода – целое число 1..99.
Если вместо номера устройства используется символ «*», то подразумевается CON.
Зарезервированные системой номера устройств:
5 - ввод с системного устройства ввода (в MS DOS – клавиатура);
6 - вывод на системное устройство печати (в MS DOS – экран монитора);
7 - вывод на системное перфокарточное устройство.
Каждому устройству сопоставлено системное имя по его номеру:
FTХХF001 - имя устройства номер ХХ (используется в системных сообщениях)
<M формата> - метка оператора формата (* – формат по умолчанию)
<список элементов> – последовательность объектов ввода или вывода.
Последовательность объектов ввода или вывода представляет собой последовательность через запятую переменных или констант, либо конструкций, описывающих последовательность переменных или констант. К конструкциям, описывающим последовательность переменных или констант, относится имя массива, обозначающее последовательность элементов массива, а также неявный цикл.
Неявный цикл представляет собой следующую конструкцию:
(<список выражений>, <параметр>=n1,n2,n3).
Такая запись обозначает последовательность объектов, полученных последовательными подстановками в выражения, стоящие в списке, значений параметра <параметр>, начиная со значения n1 до значения n2 с шагом n3.
Два особых оператора в/в:
READ<M формата>,<спис. элементов>=READ(5,<M форм>)<спис. элементов>
PRINT<M формата>,<спис. элементов>=WRITE(6,<M форм>) <спис. элементов>
12.4 Оператор формата (FORMAT)
Указывает, в каком виде должны быть представлены данные.
<M формата> FORMAT(<список спецификаций>)
<М формата> - метка оператора формата.
Спецификации (w - число позиций, d – точность – целые константы)
· Iw – целое в w позициях;
· Fw. d – действительное с фиксированной точкой, всего w позиций, из них d после десятичной точки;
· Ew. d – действительное в экспоненциальной форме, всего w позиций, 4 позиции под символ E, знак порядка и порядок, одна позиция под десятичную точку и, возможно, одна под знак числа, d знаков под дробную часть;
· Dw. d – то же, но для числа с удвоенной точностью;
· Lw – логическое в w позициях (только при выводе);
· Aw – текстовое;
· Zw – целое в шестнадцатеричном представлении;
· wX – w пробелов;
· 'text' – любой текст;
· / – переход на новую строку.
В списках спецификаций могут использоваться объединения нескольких спецификаций в группы (заключаются в скобки), повторители (целые положительные числа перед спецификацией или группой) указывают, сколько раз нужно повторить спецификацию или группу спецификаций.
12.5 Логическая запись
Логическая запись интерпретируется в текстовых файлах как строка.
- при каждом обращении к оператору ввода/вывода начинается новая логическая запись; конец списка спецификаций заканчивает очередную логическую запись, чтение списка спецификаций осуществляется с последней группы спецификаций с учетом повторителя, если групп спецификаций в списке нет, то чтение списка спецификаций осуществляется с начала списка; символ "/" в списке спецификаций заканчивает текущую логическую запись.
12.6 Взаимодействие операторов в/в и оператора FORMAT.
При выполнении форматного оператора ввода/вывода читаются одновременно список элементов ввода/вывода и список спецификаций соответствующего оператора FORMAT. Данное списка ввода/вывода вводится или выводится по соответствующей ей спецификации списка спецификаций.
Расширенная форма оператора READ
READ(<Nустр>,<Mформ>,ERR=<Merr>,END=<Mend>,IOSTAT=<i>)<список> <список> - список элементов ввода>
<Merr> – метка оператора, на который передается управление в случае возникновения ошибки ввода;
<Mend> – метка оператора, на который передается управление в случае возникновения ситуации "конец файла" на устройстве ввода.
<i> – переменная целого типа.
Установки | Ситуация | |||
IOSTAT | END | ERR | Конец файла | Ошибка |
Нет | нет | Нет | Ошибка этапа выполнения | Ошибка этапа выполнения |
Нет | нет | Да | Переход к <M err> | Переход к <M err> |
Нет | да | Нет | Переход к <M end> | Ошибка этапа выполнения |
Нет | да | Да | Переход к <M end> | Переход к <M err> |
Да | нет | Нет | <i> не ноль, выполн прод | <i> не ноль, выполн прод |
Да | нет | Да | <i> не ноль, выполн прод | <i> не ноль, к <M err> |
Да | да | Нет | <i> не ноль, к <M end> | <i> не ноль, выполн прод |
Да | да | Да | <i> не ноль, к <M end> | <i> не ноль, к <M err> |
12.7 Управляющие символы при печати
При осуществлении вывода в текстовый файл (в частности, при выводе данных на экран монитора) используется договоренность, что первый символ каждой записи является управляющим. Это означает, что этот символ не записывается в файл, а используется для управления записями файла. Вот некоторые действия, определяемые управляющими символами:
Управляющий символ | Действие |
' ' (пробел) | переход на следующую логическую запись |
'+' | в начало той же логической записи |
'0' | вставляется пустая логическая запись и переход на следующую |
Имеется возможность «отключить» эту договоренность.
12.8 Представление целого и действительного в памяти.
(Используется спецификация Z):
Величина | Шестнадцатеричное представление | Машинное представление |
INTEGER | ||
0 | ||
1 | ||
-1 | FFFFFFFF | FFFFFFFF |
10 | 0000000A | 0A000000 |
100 | ||
REAL | ||
0. | ||
1. | 3F800000 | 0000803F |
-1. | BF800000 | 000080BF |
10. | ||
100. | 42C80000 | 0000C842 |
1 бит - знак числа, 8 бит - порядок, 23 биты – мантисса
Действительный 0. 0|00 0
Действительная 1 0|00 0
Действительная 2. 0|00 0
Действительная 4. 0|00 0
Действительная 8. 0|00 0
Действительная -1. 1|00 0
Действительная 10. 0|00 0
Действительная 100. 0|00 0
Мантисса (со слепой единицей) умножается на 2 в степени <показатель> - 1111111
Пример
DIMENSION A(10),B(3,2)
WRITE(*,77)I, X,J, Y,A, B,(A(I),I=1,3),((B(I, J),I=1,3),J=1,2)
77 FORMAT(' ',2(I5,F10.3),/,5E10.3,/,5E10.3,/,(3F10.5))
При несоответствии типа переменной и спецификации данное воспринимается как относящееся к типу спецификации без преобразования. Неинициализированные данные представляются нулевыми значениями.
Полагая, что все данные не инициализированы, получаем выдачу:
^^^^0^^^^^^.000^^^^0^^^^^^.000
^.000E+00^^.000E+00^^.000E+00^^.000E+00^^.000E+00
^.000E+00^^.000E+00^^.000E+00^^.000E+00^^.000E+00
^.000E+00^^.000E+00^^.000E+00
...
^.000E+00^^.000E+00^^.000E+00
12.9 Оператор DATA
Инициализация переменных начальными значениями.
DATA cписок-п/cписок-к/[[,]список-п/cписок-к]...
гдe:
список-п – список пepeмeнныx, элeмeнтoв мaccивa или имeн мaccивoв.
список-к – cпиcoк кoнcтaнт, или кoнcтaнт с повторителем.
Повторителем является конструкция <n>*, где n – целое число.
Пpимep:
DIMENSION Y(100)
CHARACTER str
DATA x1,x2(3),x3,x4,n/5*3.14159/,str, A,I, Y/3*'Help',100*0/
Ocoбeннocти:
· Пpизнaк пoвтopeния, co cтoящeй пocлe нeгo кoнcтaнтoй, эквивaлeнтeн cпиcку вcex кoнcтaнт, имeющиx oднo и тoжe знaчeниe и пoвтopяющиxcя cтoлькo paз, cкoлькo oпpeдeлeнo знaчeниeм кoнcтaнты пoвтopeния.
· Oпepaтop DATA являeтcя нeвыпoлняeмым oпepaтopoм. Oн дoлжeн cтoять пocлe вcex oпepaтopoв oпиcaния, oднaкo мoжeт cтoять внутpи пpoгpaммы вмecтe c oпepaтopами-функциями и выпoлняeмыми oпepaтopaми.
· Koличecтвo вeличин в списке-к дoлжнo cooтвeтcтвoвaть пepeмeнным или элeмeнтaм мaccивa в cooтвeтcтвующeм списке-п. Появление имени массива в списке cooтвeтcтвуeт пepeчню вcex элeмeнтoв этoгo мaccивa в порядке расположения в пaмяти. Элeмeнты мaccивa дoлжны "индeкcиpoвaтьcя" тoлькo пpи пoмoщи констант.
· Символьный элeмeнт дoлжен быть paвной или мeньшей длины, чтo и длинa cooтвeтcтвующeй пepeмeннoй или элeмeнтa мaccивa. Ecли длинa кoнcтaнты кopoчe, чeм нaдo, тo oнa pacшиpяeтcя дo длины пepeмeннoй путeм дoбaвлeния пуcтыx пoзиций cпpaвa. Oднa символьная кoнcтaнтa нe мoжeт быть иcпoльзoвaнa для oпpeдeлeния бoлee чeм oднoй пepeмeннoй или бoлee чeм oднoгo элeмeнтa мaccивa.
· Toлькo лoкaльныe пepeмeнныe, массивы и элeмeнты мaccивoв мoгут иcпoльзoвaтьcя в oпepaтope DATA. Пpи пoмoщи oпepaтopa DATA нe мoгут быть инициализированы фopмaльные пapaмeтpы, пepeмeнные из бeзымянныx COMMON-блoкoв и имeнa функций.
· Знaчeния пepeмeнным и мaccивaм из имeнованныx COMMON – блoкoв мoгут быть инициализированы oпepaтopoм DATA, ecли этoт DATA coдepжитcя в пoдпpoгpaммe BLOCK DATA.
· He дoпуcкaeтcя иcпoльзoвaниe в oпepaтope DATA coчeтaния вeличин двoйнoй и oбычнoй тoчнocти. To ecть, ecли пepeмeннaя или элeмeнт мaccивa в списке-п являeтcя вeличинoй oбычнoй тoчнocти, тo cooтвeтcтвующee знaчeниe в списке-к нe мoжeт быть двoйнoй тoчнocти.
Пpимepы:
INTEGER N, ORDER, ALPHA
REAL COEF(4),EPS(2)
DATA N/0/,ORDER/3/
DATA ALPHA/'A'/
DATA COEF/1.0,2*3.0,1.0/,EPS(1)/.00001/
DATA t1/1/,t10/10/,t100/100/,r1,r10,r100/1.,10.,100./
WRITE(6,70)t1,t10,t100,r1,r10,r100
70 FORMAT(6A4)
STOP
END
Данные трактуются как текстовые. На печать будет выдано (^ – пробел)
^^А?^^^A^^LB^^А?^^^A^^LB
или в шестнадцатеричном виде:
0000803F 00002CF 00002C842
Текстовые данные можно хранить в переменных действительного и целого типа, с помощью спецификации А их можно распечатать:
DATA t1/'a'/,t2/'ab'/,t3/'abc'/,t4/'abcd'/,t5/'abcde'/
WRITE(6,70)(t1,t2,t3,t4,t5,i=1,5)
70 FORMAT(' ',5A1,/,' ',5A2,/,' ',5A3,/,' ',5A4,/,' ',5A5)
STOP
END
Внимательно изучите выдачу (символом ^ обозначены пробелы):
aaaaa
a^abababab
a^^ab^abcabcabc
a^^^ab^^abc^abcdabcd
^a^^^^ab^^^abc^^abcd^abcd
Еще один полезный пример:
CHARACTER*4 c1*1,c2*2,c3*3,c4,c5*5
c1='abc'
c2='abc'
c3='abc'
c4='abc'
c5='abc'
WRITE(6,* )c1,c2,c3,c4,c5
WRITE(6,70)(c1,c2,c3,c4,c5,i=1,2)
70 FORMAT(' ',5A2,/,' ',5A6)
STOP
END
Результат (символом ^ обозначены пробелы):
aababcabc^abc^^
^aabababab
^^^^^a^^^^ab^^^abc^^abc^^abc
12.10 Сравнение текстовых данных
Текстовые данные в переменных типа REAL и INTEGER (неявное описание)
X='A' - нельзя! | X. EQ.'A' - нельзя |
DATA A/'A'/ X=A – нормально | DATA A/'A'/,X/'A'/ A. EQ. X - истина |
DATA I/'A'/ X=I - преобразование типа | DATA A/'A'/,I/'A'/ A. EQ. I - ложь! |
12.11 Функции для данных типа CHARACTER
Для данных типа CHARACTER определены отношения (.EQ. .NE. .GT. .GE. .LT. .LE.), лексиграфический порядок, более короткая строка дополняется справа пробелами. Логические функции двух переменных (LLT, LLE, LGT, LGE) возвращают логическую величину – результат соответствующего сравнения.
LEN(<текстовое выражение>) - возвращает количество символов в строке.
INDEX(<текст. выр1>,<текст. выр2>) – возвращает номер позиции (целое), начиная с которой текст. выр2 входит контекстом в текст. выр1.
ICHAR(<текст. выр>) - возвращает целое - ASCII код первого символа в строке.
CHAR(<целое>) - трактует целое как код и возвращает соответствующее значение типа CHAR.
// - операция конкатенации (склейки) текстовых данных.
Лекция 13
13.1 Программные единицы
· Программная единица – часть программы, которая может быть отдельно откомпилирована. Начинается с заголовка, заканчивается оператором END.
· Программная единица может находиться в отдельном файле. В одном файле могут находиться несколько программных единиц.
· Два прохода транслятора осуществляются над каждым файлом (над каждой программной единицей в файле), создаются новые файлы с объектными кодами программных единиц. На шаге редактирования связей следует указать все файлы, содержащие объектные коды всех программных единиц через запятую.
· Головная программа – всегда одна, заголовок [PROGRAM], заголовка может не быть.
· Подпрограмма-процедура – дополнительный оператор языка, заголовок SUBROUTINE
· Подпрограмма-функция типа Т – дополнительная операция над данными типа Т, заголовок FUNCTION.
· Блок данных – единственный в программе (если он есть). В блоке данных осуществляется формирование начального состояния переменных в программе, заголовок BLOCK DATA
13.2 Библиотечные и встроенные функции
· Встроенные в транслятор функции: ABS(цел/действ/компл), ... При трансляции в объектный код вместо обращения к функции вставляется непосредственно код реализации этой функции.
· Библиотечные функции действительного аргумента: SQRT, EXP, LOG, SIN, COS, TAN, ASIN, ACOS, ATAN, COTAN, SINH, COSH, TANH, ... Объектный код библиотечной функции подсоединяется к пакету программных единиц программы на этапе редактирования связей. Обращение к библиотечной функции как и к обычной (пользовательской) функции.
13.3 Оператор-функция
Оператор-функция определена единственным оператором и по виду подобна оператору присваивания. Функция-оператор может появиться только после операторов описания и перед выполняемыми операторами в программной единице. Оператор-функция может быть только арифметического или логического типа.
Оператор-функция является невыполняемым оператором. Описание оператор-функции используется транслятором для формирования алгоритма вычисления значения переменной с именем оператора-функции по значениям фактических параметров, указанных при обращении к оператор-функции. Описание оператор-функции выглядит так:
<имя>(<список формальных параметров>)=<выражение>
Тип оператора-функции определяется по имени <имя>, выражение <выражение> должно относиться к тому же типу.
Вызов (обращение к оператор-функции) в выражении:
…<имя>(<список фактических параметров>)
Формальные параметры – переменные.
Фактические параметры – константы, переменные, выражения.
Значения фактических параметров передаются в выражение, выражение вычисляется и результат присваивается переменной – имени оператор-функции.
Правило соответствия: Списки формальных и фактических параметров согласованы по количеству, типу и порядку следования.
Пример
SUM(A, B)=A+B | Описание |
SRED(X, Y)=SUM(X, Y)*0.5 | Описание и обращение |
... | |
C=SRED(0.314,Z+17.2)+1 | Обращение |
13.4 Подпрограмма-функция
Описание подпрограммы-функции – вся программная единица:
[<тип>] FUNCTION <имя>(<список формальных параметров>)
...
<имя>=<выражение> - обязательный оператор
...
RETURN - оператор возврата в вызывающую программу
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


