
- •Министерство общего и профессионального образования российской федерации московский государственный технический университет (мами) Кафедра "Прикладная и вычислительная математика"
- •Программирование на языке Фортран
- •Основные понятия. Программирование расчетов по формулам
- •Real*4 – ранг 3
- •Ввод-вывод информации
- •Разветвляющиеся программы и операторы управления
- •If ( выражение ) Then
- •Программирование циклов
- •C *** Конец внутреннего цикла ***
- •Обработка массивов
- •Подпрограммы
Ввод-вывод информации
С п р а в о ч н а я и н ф о р м а ц и я
Операторы ввода-вывода служат для обмена информацией между памятью ЭВМ и ее внешними устройствами. Операторы ввода-вывода делятся на две группы: операторы передачи данных и вспомогательные операторы.
Операторы передачи данных. К ним относятся оператор ввода данных Read и оператор вывода информации Write.
Оператор ввода данных Read имеет следующую форму записи
Read ( управление ) список
где -- управление – перечень управляющей информации о способе выполнения операции ввода, записываемый в общем виде как
( [ Unit= ] n, [ Fmt= ] f [, Err = s ] [, End = m ] )
Здесь n |
– номер канала ввода – целая константа или переменная, принимающая значение от 0 до 32767; |
f |
– метка вспомогательного оператора, задающего форму ввода данных, или символ "*" при его отсутствии; |
s |
– метка оператора, которому следует передать управление, если при вводе данных обнаружена ошибка; |
m |
– метка оператора, которому следует передать управление, если при вводе данных исчерпана вся информация. |
список – последовательность имен переменных, разделенных запятыми.
Оператор Read рассматривается как некоторое логическое устройство ввода, с которого будет поступать исходная информация. Канал ввода устанавливает связь этого логического устройства с физическим - клавиатурой, файлами на жестком диске и другими носителями информации. Каналы ввода с номерами *, 0 и 5 по умолчанию закреплены за клавиатурой.
Оператор вывода данных Write имеет форму записи
Write ( управление ) список
где – управление- перечень управляющей информации о способе выполнения операции вывода, записываемый в общем виде как
( [ Unit= ] n, [ Fmt= ] f ).
Здесь n |
– номер канала вывода; |
f |
– метка вспомогательного оператора, задающего форму вывода данных, или символ "*" при его отсутствии. |
список – последовательность имен переменных, разделенных запятыми.
Использование канала вывода информации в операторе Write аналогично использованию канала ввода в операторе Read. Каналы вывода с номерами *, 0 и 6 по умолчанию закреплены за экраном монитора.
Использование операторов Read и Write иллюстрируется следующим фрагментом программы:
Write(*, *) ' Введите А и В '
Read(5, *) A, B
Write(6, *) ' A= ', A, ' B= ', B
При выполнении указанных команд на экран монитора будет выведен текст
Введите A и B
и ЭВМ перейдет в состояние ожидания ввода данных. С клавиатуры надо будет набрать значения вещественных переменных A и B в форме F или E, разделенных хотя бы одним пробелом, например
2.7 0.18Е+03
и нажать клавишу "Enter". Последний оператор Write выведет на экран монитора строку
A= 2.700000 B= 180.000000
Вспомогательные операторы. К ним относятся операторы Open, Close и Format.
Оператор Open позволяет связать канал ввода-вывода, используемый в операторе Read или Write, с требуемым файлом на диске. Общая форма записи оператора
Open ( [ Unit= ] n, File = имя файла [, Status = тип ][, Err = s ] )
-
где n
– номер канала ввода-вывода;
имя файла
– название файла, записанное в форме символьной константы;
тип
– символьная константа, определяющая статус файла:
'old' – старый (ранее созданный);
'new' – новый (вновь создаваемый);
'scratch' – временный (на время работы программы);
s
– метка оператора, которому следует передать управление, если установить связь с файлом не удалось.
Оператор Close отсоединяет используемый в программе канал ввода-вывода от файла. Общая форма записи оператора
Close ( [ Unit= ] n [, Status = тип ][, Err = s ] )
-
где n
– номер канала ввода-вывода;
тип
– символьная константа, определяющая статус файла:
'keep' – сохранить файл;
'delete' – уничтожить;
s
– метка оператора, которому следует передать управление, если при выполнении оператора произошла ошибка.
Совместное использование операторов Read, Write, Open и Close иллюстрируется следующим фрагментом программы:
Open(5, File = 'dat', Status = 'old')
Open(6, File = 'res', Status = 'new')
Read(5, *) A, B
Write(6, *) ' A= ', A, ' B= ', B
Close(6, Status = 'keep')
Close(5, Status = 'keep')
Данный фрагмент программы отличается от приведенного выше тем, что значения переменных A и B считываются из файла dat, связанного с оператором Read по пятому каналу, а результат записывается в файл res, который связан с оператором Write по шестому каналу.
Оператор Format – вспомогательный оператор, используемый для описания форм ввода и вывода данных. Он имеет вид
метка Format ( список )
-
где метка
– метка оператора - обязательный параметр;
список
– перечень спецификаций, отделенных друг от друга либо запятой, либо наклонной чертой "/". Спецификации определяют расположение данных во входном или выходном потоке информации и размеры областей, отводимых под числовые, логические и символьные константы.
Оператор Format является невыполняемым оператором и может располагаться в любом месте программы.
Спецификации оператора Format делятся на числовые, символьные, логические и управляющие.
К числовым спецификациям относятся спецификации I, F, E и D, записывающиеся в виде:
Iw, Fw.d, Ew.d, Dw.d,
где w – число позиций, отводимое для записи числа;
d – число позиций в поле w, отводимое для записи дробной части (мантиссы) константы.
Спецификация I используется в операциях ввода-вывода целых констант. Запись Iw указывает, что для целой константы отводится поле из w позиций. Например, по спецификации I3 можно ввести или вывести целую константу 812.
Спецификация F используется в операциях ввода-вывода вещественных констант с фиксированной точкой. Запись Fw.d указывает на то, что для константы отводится поле из w позиций, среди которых d позиций отводятся под ее дробную часть, а остальные – под знак числа, его целую часть и десятичную точку. Например, по спецификации F5.2 можно ввести или вывести вещественную константу -8.12.
Спецификация
E используется
в операциях ввода-вывода вещественных
констант с плавающей точкой. Запись
Ew.d указывает на то, что для константы
отводится поле из w позиций, среди которых
d позиций отводятся под ее мантиссу, а
остальные - под знак числа, десятичную
точку, признак порядка в виде буквы E,
знак порядка и его величину. Например,
по спецификации E10.3 можно ввести или
вывести вещественную константу
-.812E+01. При выводе обязательно должно
выполняться условие
Спецификация D используется в операциях ввода-вывода вещественных констант с плавающей точкой. Bce правила, справедливые для спецификации E, справедливы и для D.
Для перечисленных спецификаций действуют следующие правила:
Пpи ввoдe пpoбeлы знaчeния нe имeют. Знaк плюc перед числом может отcутcтвовать.
Если пpи ввoдe по cпeцификaциям F и E дecятичнaя тoчкa стоит в пoлe ввoдa, то параметр d игнорируется.
Если количество передаваемых символов константы меньше размера поля w, то при выводе числа его последняя цифра будет напечатана в крайней правой позиции поля. Оставшиеся позиции заполняются пробелами.
Ecли пpи вывoдe чиcлo пpeвocxoдит шиpину выделенного пoля, тo вce пoлe зaпoлняeтcя звeздoчкaми.
Если при выводе дробная часть числа не помещается в отведенных d позициях, то число округляется.
Если пpи чтeнии констант по cпeцификaциям I, F, E и D пoлe ввoдa coдepжит зaпятую, то считывaниe cлeдующeгo пoля нaчинаeтcя co знaкa, cлeдующeгo зa зaпятoй.
К символьным спецификациям относятся спецификация A, позволяющая осуществлять ввод-вывод символьных строк.
Спeцификaция A имeeт вид A или Aw. B пepвoм cлучae A автоматически пpинимaeт размер пoля, равный длине символьной переменной из списка ввода-вывода. Во втором случае размер поля ввода-вывода определяется значением параметра w, который рекомендуется выбирать равным длине используемой символьной переменной.
Непосредственный вывод символьных строк выполняется путем заключения их в апострофы. Например вывести текст МАМИ можно включив в оператор Format запись ‘МАМИ’. При выводе текста, содержащего внутри себя апостроф, символ апострофа необходимо набрать дважды. Например, чтобы напечатать текст О’Генри необходимо в операторе Format записать 'O''Генри'.
Управляющие спецификации. К ним относятся спецификации позиционного редактирования T и X и спецификация управления записью «/».
Спецификация T в виде Tn опpeдeляет в записи позицию n, в кoтоpую при выводе или c кoтopoй при вводе будет пepeдaвaтьcя cлeдующий cимвoл.
Спецификация X, используемая в форме nX, при ввoдe пpoпуcкaeт n позиций, а при вывoдe пишет n пpoбeлoв (n – указывать обязательно).
Спецификация «/» используется в качестве разделителя спецификации и указывает на необходимость перехода к обработке следующей записи. При вводе читается новая запись – новая строка файла. При выводе – осуществляется переход на следующую строку.
При использовании оператора Format надо учитывать следующие особенности его работы.
Если в нем используются повторяющиеся комбинации спецификаций I, F, E, D, A или L, то перед ними можно использовать параметр повторения, указывающий их количество. Вместо оператора Format(I4, I4, I4, F6.2, F6.2) можно записать Format(3I4, 2F6.2). Аналогичным образом можно повторять и группы спецификаций, заключая их в скобки. Например оператор Format(I4, F6.2, I4, F6.2, I4, F6.2) может быть заменен на Format(3(I4, F6.2)).
Если количество спецификаций в операторе Format меньше количества переменных в списке ввода-вывода, то после использования всех спецификаций работа продолжается с первой спецификации, стоящей после последней внутренней открывающей скобки.
При выводе данных на экран монитора или принтер первая позиция каждой выводимой строки должна оставаться свободной, так как она используется под управляющий символ терминального устройства и ее содержание не выводится.
Пример выполнения задания. Составить программу для вычисления и печати значений функции
для шести значений аргумента, принадлежащих отрезку от xmin=-3 до xmax= 1. Исходные данные задать в файле dan. Результат поместить в файл с именем res в форме:
Получено:
Y( х1 ) = y1
Y( х2 ) = y2
.................
Составил : <Ф.И.О.>
Файл исходных данных dan
-3.0
-1.5
-2.5
-0.5
0.5
1.0
Программа
program lab_2
implicit none
Real x, y
Open(5, File = 'dat')
Open(6, File = 'res')
write(6,10)
10 format('Получено:')
15 read(5,1, end=50) x
1 format(f4.1)
y= 4.*x/(x*x+1.)
write(6,20) x, y
20 format('Y(',f5.2') = ',F5.2)
go to 15
50 write(6,30)
30 format('Составил: Иванов')
end program
Файл результатов res
Получено:
Y(-3.00) = -1.20
Y(-1.50) = -1.85
Y(-2.50) = -1.38
Y(-0.50) = -1.60
Y( 0.50) = 1.60
Y( 1.00) = 2.00
Составил: Иванов
З а д а н и е к л а б о р а т о р н о й р а б о т е
Составить программу для вычисления значений функции для десяти значений аргумента, принадлежащих отрезку [xmin, xmax]. Исходные данные задать в файле dan. Результат поместить в файл res в форме, указанной в таблице 1..
1. |
|
2. |
|
3. |
|
4. |
, форма № 4; |
5. |
|
6. |
|
7. |
, форма № 4; |
8. |
, форма № 1; |
9. |
|
10. |
|
11. |
|
12. |
|
13. |
|
14. |
|
15. |
|
16. |
, форма № 1; |
17. |
, форма № 3; |
18. |
, форма № 4; |
19. |
, форма № 2; |
20. |
, форма № 1; |
21. |
, форма № 4; |
22. |
|
23. |
, форма № 3; |
24. |
, форма № 2; |
25. |
|
26. |
, форма № 4; |
27. |
, форма № 2; |
28. |
, форма № 1; |
29. |
, форма № 3; |
30. |
, форма № 4. |
Таблица 1.
№ |
Форма вывода информации |
№ |
Форма вывода информации |
1
|
Результат ************************** I X = x1 дает Y = y1 I ************************** I X = x2 дает Y = y2 I ************************** I ......... ......... I ************************** Составил : <Ф.И.О.> |
2
|
Таблица результатов: для Х = х1 ==> Y = y1 для Х = х2 ==> Y = y2 для Х = х3 ==> Y = y3 для Х = х4 ==> Y = y4 ................................. Составил : <Ф.И.О.> |
3
|
Результаты расчетов: при Х = х1 получаем Y = y1 при Х = х2 получаем Y = y2 при Х = х3 получаем Y = y3 ....................................... Составил : <Ф.И.О.> |
4
|
Получено: Y( х1 ) = y1 Y( х2 ) = y2 Y( х3 ) = y3 ................. Составил : <Ф.И.О.> |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 3