- •Лекция-3
- •1.10.2. Некоторые правила ввода.
- •1.10.3. Ввод и вывод данных из текстового файла.
- •§ 1.11. Операторы stop, pause, goto, continue
- •§ 1.12. Операторные функции
- •§ 1.13. Циклы
- •1.13.1. Понятие о цикле.
- •1.13.2. Простейшая конструкция do.
- •1.13.3. Do-цикл с параметром (цикл с шагом).
- •1.13.4. Цикл с условием.
- •1.13.5. Операторы прерывания циклов.
- •1.13.6. О вложенности do-конструкций.
- •1.13.7. Некоторые правила работы с do и do while циклами.
- •1.13.8. Примеры организации циклов.
1.10.2. Некоторые правила ввода.
Запись файла – это строка символов, завершаемая символом новой строки. Файл состоит из записей и завершается специальной записью «конец файла».
Поле записи файла– это часть записи, содержащая данные, которые могут быть использованы оператором ввода.
Ввод под управлением списка выполняется по следующим правилам:
поля записи могут разделяться запятой и пробелами;
если между полями записи присутствует слеш (/), то ввод прекращается;
каждый оператор ввода (если не задана соответствующая опция) выполняет ввод с начала новой записи;
если число элементов списка ввода больше числа полей записи, то для ввода недостающих значений оператор ввода перейдет к следующей записи;
для ввода значения логической переменной достаточно набрать T(в случае.TRUE.) илиF(в случае.FALSE.).
В соответствии с перечисленными правилами, оператору ввода
read *,x,y,z |
может соответствовать одна запись
1.1, 2.2, 3.3
Вместе с тем, конструкции ввода вида
read *,x read *,y read *,z |
соответствует три записи
1.1
2.2
3.3
При создании, например, в первой строке большего числа полей ввода, чем это необходимо
1.1 4.4 5.5 6.6 7.7
2.2
3.3
поля с символами 4.4 5.5 6.6 7.7 будут в последнем примере ввода проигнорированы («лишние» данные прочитаны не будут). По результатам ввода будем соответственно иметь:x=1.1,y=2.2,z=3.3.
Т.е. для каждого оператора READ следует набирать числа с новой строки данных (даже если на предыдущей строке не все числа прочитаны).
Ошибки ввода возникают в следующих ситуациях:
число элементов списка ввода больше числа доступных для чтения полей записи (то есть выполняется попытка чтения записи «конец файла» или вслед за этой записью);
размещенные на читаемом поле символы не могут быть преобразованы в тип соответствующего элемента списка ввода.
Так, если, например, имеем оператор ввода
read *,k |
то соответствующая ошибка ввода последует при задании, в частности,
k=2
правильный ввод:
2
1.10.3. Ввод и вывод данных из текстового файла.
Пусть необходимо определить вещественные переменные x,y,z, задав им при вводе значения 1.2, 3.4 и 5.6. Создадим файл inpdata.dat, например, на логическом диске D: в папке SAMPLE (заметим, что если файл расположен в том же месте, откуда выполняется запуск программы, то достаточно указать лишь имя файла и расширение (если есть), причем для файла исходных данных часто выбирают расширение dat) и занесем в него строку:
1.2 3.4 5.6
Программа вводаиз файла:
real x,y,z ! ниже всюду 10 - номер устройства ввода-вывода open(10,file=’d:\sample\inpdata.dat’) read(10,*)x,y,z ! Ввод из файла inpdata.dat print *,’x=’,x,’ y=’,y,’ z=’,z ! Вывод на экран close(10) end |
Оператор OPENсоздает в программе устройство ввода-вывода и соединяет его с файломinpdata.dat. В оператореREADвместо первой звездочки используется номер устройства(файловая переменная), что обеспечивает ввод данных из файла, который с этим устройством связан. Номер устройства может быть константой или переменной целого типа. В последнем случае переменная должна предварительно получить нужное значение (любым допустимым в Фортране способом). Правила ввода из текстового файла и с клавиатуры совпадают.
Пример программы выводаданных в файл имеет вид:
real x,y,z ! ниже всюду 11 - номер устройства ввода-вывода open(11,file=’d:\sample\results.dat’) x=1.1; y=2.2; z=3.3 write(11,*)’x=’,x,’ y=’,y,’ z=’,z ! Вывод в файл results.dat close(11) end |
Количество файлов, которое может быть открыто, определяется настройкой операционной системы. Обычно их оказывается достаточно. Ненужные ранее открытые файлы рекомендуется закрывать, т.е., отключать от программы. Это делается с помощью оператора CLOSEвидаCLOSE(номер устройства), причемномер устройства должен соответствовать одному из открытых файлов. Если понадобится, файл можно открыть снова.