- •22. Операторы ввода-вывода в Фортране, аналогия последовательного обмена с кассетным магнитофоном
- •23. Ответы на вопросы "Что", "Куда-откуда" в операторах обмена данными
- •25. Форматный вывод таблиц
- •Правило таблицы
- •26. Атрибуты и новая форма описания объектов в современном Фортране. Массивы в раннем фортран -77 и современном Фортране. Конформные массивы.
- •27. Секция и конструктор массива
- •Примеры манипуляций с секциями
- •28. Характеристики массива
- •29.Размещение массива в памяти компьютера
23. Ответы на вопросы "Что", "Куда-откуда" в операторах обмена данными
Оператор обмена данными обмен ( КУДА, КАК ) ЧТО дает ответы на 3 вопроса
КУДА / ОтКУДА |
|
КАК |
|
ЧТО |
Из текстового файла |
=> read => |
по типам объектов |
=> read=> <=write<= |
Список объектов в RAM |
В текстовый файл |
<=write <= |
Ответы на вопросы “КУДА”, “КАК”, “ЧТО” оформляются в виде операторов
read (отКУДА,КАК) ЧТО
write (КУДА , КАК) ЧТО
В целом ответы на эти вопросы должны прояснить следующее
ЧТО за список объектов, подлежащих обмену с внешней памятью
ОТКУДА/КУДА – каков номер устройства – ответы см КУДА
“КАК” – задает способ оформления вводимых-выводимых объектов в виде текста, способы для ввода (данные в файле готовит пользователь) и вывода (результаты в файл пишет компьютер) похожи; см. возможные ответы КАК
Ответы на вопрос "ЧТО" в операторе обмен( КУДА, КАК ) ЧТО
ЧТО - это список объектов, подлежащих обмену с внешней памятью. В него могут входить
в список “ЧТО” для Read - переменные через запятую
в список “ЧТО” для write – переменные, константы и формулы через запятую
переменные могут быть как скалярными, так и векторными (массивами и сечениями массивов)
формулы в Фортране-90 также могут быть векторными
Ответ на вопрос “ КУДА / ОтКУДА?”
Ответ на этот вопрос характеризует носитель информации и направление ввода-вывода текстового файла. Основополагающим является принцип независимости от носителя информации и физической природы устройств. В программе имеют дело с условными устройствами, которым различными способами сопоставляются конкретные физические устройства, например, консоль, экран, принтер, магнитная лента, файл на жестком диске, файл на дискете, файл на магнитной ленте..
Предопределенные номера устройств и имена файлов
Консоль – это рабочее место пользователя ПК, особое устройство, всегда готовое и не требующее открытия файла. Консоль включает в себя клавиатуру для ввода по команде read и экран для вывода по команде write
Для консоли в Фортране исторически сложились следующие обозначения
* - универсальный знак консоли для ввода read(*,.. и вывода write(*,..
0 – то же в виде номера для ввода read(0,.. и вывода write(0,..
5 – только для ввода с клавиатуры read(5..
6 - только для вывода на экран write(6..
Номера 5 и 6 по усмотрению программиста можно переназначить в операторе open.
Имеется ряд имен файлов, фиксированных по назначению в ОС
con – консоль
prn – принтер
line – линия связи
nul – пустышка, вывод в никуда
При открытии файлов у программиста есть ряд возможностей
устройства 0,5,6 и “*” ориентируют без открытия файла на работу с консолью
open(u,file=’имя.txt’) связывает условный номер устройства с конкретным файлом
имена файлов “con”, “prn”, “line”, “nul” организуют обмен с конкретным физическим устройством
можно отнести открытие файла к компетенции пользователя, отложив его до выполнения программы если, скажем для устройства 3, нет оператора open или open есть но file=’ ’, то на первой команде обмена последует сообщение
Unit 3 – file name missing or blank |
имя файла пустое или не задано |
Please enter file name |
пожалуйста введите имя файла |
в ответ пользователь введёт имя файла, с которым далее и пойдет обмен |
|
использовав строковую переменную вместо номера устройства будем иметь дело с так называемым внутренним файлом, не требующим открытия, например, для Real :: R=2.0, pi=3.14; Character*80 stroka; Write(stroka,*) ‘c:’,2*pi*R ! получим stroka = “ c:6.2800000 “ отметим, что строка должна быть достаточно вместительной, многострочный вывод направляют в массив часто так готовят тексты для графического вывода
имеются и описаны в помощи дополнительные параметры, повышающие функциональность оператора open
Ответы на вопрос "куда/откуда" в операторе обмен( КУДА, КАК ) ЧТО сведены в таблицу
Возможные ответы |
Направление обмена данными |
Открытие файла |
или 0 или 5 или 6 |
с консолью |
не требуется |
Номер устройства |
с открытым файлом |
выполняется до обмена в open |
Номер устройства |
когда файл не открыт |
выполняется пользователем при первом обмене |
Строка |
со строкой (внутренним файлом) |
не требуется |
24. Ответы на вопрос “ КАК?” в операторе обмен( КУДА, КАК ) ЧТО
Ответы на этот вопрос должны прояснить способ преобразования данных между внутренним представлением компьютера и текстовым оформлением в файле. Психология пользователя такова, что при оформлении текста у него диаметрально противоположные требования
он предпочитает минимум забот по оформлению, когда он должен готовить данные
он требует, чтобы все было четко, понятно, прокомментировано, когда ему выводят результаты
правила оформления одни и те же, что при вводе, что при выводе, поэтому надо программировать разные способы в read и write
Ответы на вопрос “ КАК?” в операторе обмен( КУДА, КАК ) ЧТО сведены в таблицу
|
Ответ КАК |
Способ преобразования данных |
Где ответ на вопрос КАК? |
1 |
* |
ввод-вывод под управлением списка |
по типам данных из списка "ЧТО" |
2 |
имя |
Вместо ЧТО поименный обмен посписку переменных из Namelist |
по типам данных из списка Namelist |
3 |
метка |
Форматный ввод-вывод cо ссылкой на m format ФС |
в ФС в виде строковой константы в операторе m format ФС |
4 |
строка |
Форматный ввод-вывод по ФС, прописанной внутри write |
в ФС в виде константы, переменной или выражения типа character |
5 |
опущен |
обмен с бинарным файлом без всяких преобразований |
не нужен ответ |
КАК оформляется текст при вводе и выводе разными способами
ввод-вывод под управлением списка read (отКУДА,* ) ЧТО и write (КУДА , * ) ЧТО этот способ оформления текста особенно удобен при вводе - все делается по усмотрению пользователя: перенос, пробелы и пустые строки; он сам выбирает разделитель между числами и строками ( “запятая”, “пробел” или “Enter-конец строки”), строки обрамляются апострофами; в то же время это довольно небрежный, скорее черновой вывод в виде стандартизованного текста с фиксированной шириной листа и полей чисел; вывод идет по списку “ЧТО” с автоматическим переносом
поименный ввод-вывод по списку переменных из Namelist, совмещающему ответ на вопросы “КАК” и “ЧТО”, списка “ЧТО” нет - в примере переменным x,R дано групповое имя в Namelist /listXR/ x,R; Read (*,listXR ); write (*,listXR) - текст стандартизован, но в отличие от п.2, в нем есть имя списка и отдельных переменных - вывод скорее всего черновой - идёт с автоматическим переносом по списку из Namelist с фиксированной шириной полей чисел и листа
ввод в любом порядке |
даже и не все |
||||
& listXR |
|
& listXR |
|
& listXR |
|
x=3.2, R=2.5 |
|
R=2.5,x=3.2 |
|
x=3.2 |
|
/ |
|
/ |
|
/ |
|
3. Форматный ввод-вывод дает наиболее гибкий исчерпывающий ответ на вопрос “КАК” в виде форматной строки (ФС) в отдельном операторе m FORMAT ФС , здесь ФС- строковая константа без апострофов; на ФС можно сослаться из многих операторов вывода по метке m
4. Форматный ввод-вывод с уникальной ФС прямо внутри операторов Read (отКУДА, ФС ) ЧТО и write (КУДА , ФС ) ЧТО здесь ФС- константа, переменная или выражение строкового типа (character)
5. Ввод-вывод, отображающий память - ответ на вопрос “Как?” не нужен и он опущен Read (отКУДА) ЧТО и write (КУДА) ЧТО ведут обмен данными с бинарным файлом
Резюме по способам ввода-вывода - данные при вводе оформляются аналогично тому как они оформляются при выводе, разве что не пишут незначащие цифры - форматный вывод дает наибольшие возможности по оформлению текстов - вывод под управлением списка и поименный вывод удобны при черновом выводе - ввод под управлением списка устроит "ленивого" пользователя, не связывая его ограничениями - поименный ввод может оказаться удобным, когда при повторном вводе из многих данных мало что меняется - форматный ввод имеет ограниченное применение, например, для компьютерных форм; данные размещаются позиционно, без разделителей, строковые данные выделять апострофами не надо.
