
- •Lesson 3 Приближенные вычисления
- •Ряд Тейлора
- •Точность вычислений
- •Рекуррентная формула
- •Блок-схема алгоритма
- •Текст программы
- •Отладка программы
- •Альтернативная блок-схема
- •Bвод и вывод данных
- •Операторы open и close
- •Оператор read – ввод данных
- •Оператор write – вывод данных
- •Оператор format
- •Спецификации числовых данных
- •I -спецификация формата.
- •F -спецификация формата
- •E, d -спецификации формата
- •G-спецификация формата
- •Вывод комплексных чисел
- •Спецификации нечисловых данных a-спецификация формата
- •L-спецификация формата
- •X-спецификация формата
- •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 continue ! продолжение программы
Цикл будет продолжаться до тех пор, пока не будут введены все числа, подготовленные в файле.
Примечание. Операторcontinue – пустой оператор, по которому не производится действий, а выполнение программы продолжается со следующего оператора.
Чтобы избежать аварийного завершения программы вследствие ошибки ввода данных, можно запрограммировать переход на обработку ошибки ввода, указав метку в качестве значения дополнительного параметра err в оператореread, например:
Пример.
integer m,n
do
read (*,*, err=88) m, n
. . .
exit
88 write(*,*) ‘ Re-enter the data’ ! Повторите ввод данных
enddo
Цикл будет продолжаться до тех пор, пока не будут введены целые значения.