
- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Оператор write
Оператор WRITE()имеет общую форму, подобную форме оператора READ():
WRITE(clist) список_вывода
где clist определен как:
[UNIT=] номер устройства,
[FMT=] спецификация формата
[,REC= номер записи]
[,IOSTAT=статус ввода-вывода]
[,ADVANCE=продвижение]
[,SIZE=целая переменная]
[,EOR=метка]
[,ERR=метка]
Снова заметим, что номер устройства и спецификация формата требуются именно в том порядке (когда ключевое слово не нужно), остальное не обязательно.
Большинство ключевых слов для особых манипуляций с файлом и не будут здесь обсуждаться.
IOSTAT остается одним из наиболее необходимых аргументов и работает так же для оператора WRITE() как и для оператора READ(). Например:
INTEGER :: n=10, ios=0
...
WRITE (*,*) a,b,c ! пишет на экран, format по умолчанию
WRITE (UNIT=6,*) i,j ! пишет на экран, format по умолчанию
WRITE (10,FMT=*) I ! пишет на устройство 10, format по умолчанию
WRITE (UNIT=n,FMT=*,IOSTAT=ios) data
Оператор open
Оператор OPEN() используют для того, чтобы связать номер устройства с файлом и специфицировать свойства того файла, которые отличаются с теми, которые задаются по умолчанию. Оператор можно использовать для создания и связывания с уже существующим файлом. В дополнение к стандартной форме описаны те компиляторы, которые могут обеспечить дополнительные не стандартные ключевые слова.
Общая практика программирования помещает все операторы OPEN в подпрограмме, которая вызывается на фазе инициализации главной программы. Оператор OPEN постоянно содержит имена файлов системной спецификации и нестандартные средства таким образом, что программу требуется запускать в более чем одной компьютерной системе, поэтому оператор OPEN должен быть легко локализуем.
Оператор OPEN() имеет общий вид такой:
OPEN(номер_устройства, [список] )
Где номер_устройства это спецификация номера объявляемого устройства (с или без ключевого слова) и список есть список ключевых слов (рассмотрен ниже). Например, следующие операторы OPEN() открывают файл, ассоциированный с номером устройства 10:
INTEGER :: ifile=10
...
OPEN(10)
OPEN(UNIT=10)
OPEN(UNIT=ifile)
Следующие ключевые слова из специфицированных в стандарте языка Fortran 90 и могут специфицировать природу открываемого файла:
FILE=filename; где filename это правильная строка конкретной системы. Заметим, что .возможно, например, FILE='output.test'
STATUS=st; где st может быть одним из 'OLD', 'NEW', 'REPLACE', 'SCRATCH' или 'UNKNOWN'. Статус 'OLD' специфицирует файл, который уже должет существовать; при статусе 'NEW' создается новый файл; при статусе 'REPLACE' удаляется существующий файл прежде чем будет создан новый (с тем же именем); при статусе 'SCRATCH' создается временный файл, который существует только пока программа выполняется и исчезает по ее завершении. В общем случае используется 'OLD' для ввода и 'NEW' для вывода.
ERR=label; есть метка для оператора GOTO , когда обнаруживается ошибка при открытии файла. Если возможно, используют взамен IOSTAT .
IOSTAT=ios; где ios это целая переменная, устанавливается в нуль, если оператор выполняется успешно или в зависящую от реализации константу в противном случае
ACTION=act; где act может быть 'READ', 'WRITE' или 'READWRITE', специфицирующие разрешение режимов операций над файлом. По умолчанию зависит от процессора..
Некоторые примеры операторов открытия файла:
OPEN (UNIT=10,FILE='fibonacci.out')
OPEN (UNIT=11,FILE='fibonacci.out',STATUS='NEW',IOSTAT=ios)
IF( ios/=0) THEN
WRITE(6,*) 'Error opening file: fibonacci.out.'
STOP
ENDIF
OPEN (UNIT=12, FILE='student.records', STATUS='OLD', &
FORM='FORMATTED', IOSTAT=ios)
Если Вы несколько не доверяете значениям по умолчанию для некоторых полей оператора OPEN() специфицируйте требуемые значения. Комбинация условий возможных ошибок означает, что точный смысл будет дан спецификацией оператора OPEN() и ассоциирован с регулированием ошибки..
Возможна спецификация некоторых значений аргумента после значений по умолчанию для других потому что некоторые комбинации значений аргументов уникальны. Такие "свойства" не рассматриваются в данном курсе.