
- •Приближенные вычисления
- •Ряд Тейлора
- •Точность вычислений
- •Рекуррентная формула
- •Блок-схема алгоритма
- •Текст программы
- •Отладка программы
- •Альтернативная блок-схема
- •Bвод и вывод данных
- •Операторы open и close
- •Оператор read – ввод данных
- •Оператор write – вывод данных
- •Оператор format
- •Спецификации числовых данных
- •Вывод комплексных чисел
- •Спецификации нечисловых данных
- •Cпецификация формата – «слэш»
- •Взаимодействие операторов write и format .
- •Оператор NameList
Операторы open и close
Оператор open связывает условный номер устройства с файлом для ввода или вывода данных (“открывает” файл):
open(номер устройства, file=имя файла)
На номер устройства ссылаются операторы read и write. Можно открыть несколько файлов, но каждому из них должен быть сопоставлен уникальный номер устройства. Имя файла – символьная строка.
Если файл не существует, он создается, а если такой файл существует, то он обновляется при выводе. Другие возможности работы с файлами регулируются дополнительными параметрами.
Оператор close отсоединяет файлы от устройства (“закрывает” файлы): close (список номеров устройств)
Не обязательно явно закрывать открытые файлы. При нормальном завершении программы каждый файл, открытый в ней, закрывается. Однако, следует закрыть файл, если необходимо открыть другой файл на этом же устройстве, не выходя из программы.
Пример.
open (1, file=’in.txt’)
open (2, file=’out.txt’)
read (1,*) a, b
write (2,*) "a =", a, " b =", b, " a+b =", a+b
close (1, 2)
Оператор read – ввод данных
Данные, подготовленные для ввода в символьном виде, разделяются между собой запятыми, пробелами или символами конца строки (клавиша <Enter>). При вводе они преобразуются в значения переменных списка в соответствии с форматом (форматный ввод) или с типами переменных (ввод под управлением списка).
Некоторые свойства оператора read:
Данные при вводе контролируются
Пример. Ввести число из файла 'data.txt':
1.23
Фрагмент для чтения:
integer m
open (7, file='data.txt')
read (7, *) m
Попытка ввести вещественное значение для целой переменной приведет к ошибке ввода, которая будет зафиксирована на экране монитора (ошибка выполнения): Run-time error F6101: READ(data.txt) – invalid INTEGER
В некоторых случаях данные конвертируются в соответствии с типом переменной. Например, если для ввода вещественных переменных подготовлены целые числа, в результате ввода переменным будут присвоены вещественные значения с нулевой дробной частью.
Пример. Ввести числа из файла 'data.txt':
123, 21, 17
Фрагмент для чтения:
real a, b, c
open (7, file='data.txt')
read (7, *) a, b, c ! a= 123.0; b= 21.0; c= 17.0
Каждый оператор read начинает читать данные с новой строки, независимо от того, все ли данные предыдущей строки прочитаны.
Пример. Прочитать две строки из файла 'data.txt':
1.23, 4.56 77 55
11, 13
Фрагмент программы для чтения:
real x,y,z; integer m,n
open (7,file='data.txt')
read (7,*)x, y, z ! x= 1.23; y= 4.56; z= 77.0
read (7,*)m, n ! m= 11; n= 13
В списке управляющей информации оператора read может присутствовать необязательный параметр end вида end = метка Этот параметр указывает, что при достижении конца файла в случае отсутствия ошибок ввода, управление будет передано оператору с меткой метка. Использование этого параметра удобно, когда неизвестно, сколько данных подготовлено в файле.
Пример.
real x, y, z
do
read (*,*, end=99) x, y, z
write (*,*) x, y, z, sin(x) + sin(y) + sin(z)
enddo
99 exit
Цикл будет продолжаться до тех пор, пока не будут введены все числа, подготовленные в файле.
Чтобы избежать аварийного завершения программы вследствие ошибки ввода данных, можно запрограммировать переход на обработку ошибки ввода, указав метку в качестве значения дополнительного параметра err в операторе read, например:
Пример.
integer m,n
do
read (*,*, err=88) m, n
. . .
exit
88 write(*,*) ‘ Re-enter the data’ ! Повторите ввод данных
enddo
Цикл будет продолжаться до тех пор, пока не будут введены корректные данные.
Форматный ввод данных требует подготовки этих данных в соответствии с форматом, что неудобно и используется редко.