
- •Лекция 3
- •3. Алгоритмический язык фортран /3,5,11/
- •3.1. Историческая справка
- •1978 Г., Фортран 77.
- •3.2. Элементы языка Фортран
- •3.2.1. Алфавит, форматы записи программы
- •3.2.2. Имена, объекты данных, атрибуты
- •3.2.4. Программные единицы
- •3.3. Порядок следования операторов и метакоманд в программной единице
- •3.4. Организация данных
- •3.4.1. Типы данных
- •3.4.2. Описание несимвольных типов данных
- •3.4.3. Буквальные (неименованные) константы
- •3.4.4. Задание именованных констант
- •3.4.5. Задание начальных значений переменных
- •3.4.6. Символьные данные
- •3.5. Выражения, операции и присваивания
- •3.5.1. Арифметическое выражение
- •Integer(2)
- •Integer(4)
- •3.5.2. Выражения отношения и логические выражения
- •3.5.3. Правила вычисления выражений
- •3.5.4. Константные и описательные выражения
- •3.6. Управляющие операторы и конструкции
- •3.6.2. Конструкция select case
- •1 Continue
- •3.6.5. Операторы pause, stop, end
- •3.7. Форматный ввод-вывод
- •3.7.1. Вводный комментарий
- •3.7.2. Оператор format
- •3.7.3. Дескрипторы данных
- •3.7.4. Дескрипторы управления
- •3.7.5. Задание формата в операторах ввода-вывода
- •20 Format (f5.0, 2p, 2f5.0, 3p, f5.0)
- •21 Format (1x, 2p, e10.3, 3x, 3p, f10.3)
- •3.7.6. Списки ввода-вывода
- •3.7.7. Управляемый списком ввод-вывод
- •Namelist / имя списка b/b / список переменных &
- •24.000000 Qwertyuiop sub
- •3.8. Массивы
- •3.8.1. Описание размерности статических массивов
- •3.8.2. Сечение массива
- •3.8.3. Присваивание значений элементам массива
- •Where (логическое выражение - массив) присваивание массива
- •3.8.4. Динамические массивы
- •Integer n, m, kp
- •Integer I
- •Interface
- •3.8.5. Массивы – формальные параметры процедур
- •Integer n, m, j
- •Integer n, I, j
- •Interface
- •3.9. Файлы Фортрана
- •3.9.1. Основные понятия
- •3.9.2. Операции над внешними файлами
- •3.9.3.Операторы передачи данных
- •Endfile u
- •3.9.4. Порядок выполнения передачи данных
- •3.9.5. Операторы подсоединения устройств к файлам
- •24.000000 Qwertyuiop sub
- •3.9.6. Операторы позиционирования файла
- •3.10. Встроенные функции и процедуры
Interface
subroutine suba(a) ! при использовании перенимающего форму
real a(:,:) ! массива необходимо явное описание интерфейса
end subroutine suba
end interface
.......
call suba(x) ! вызов процедуры
.....
end
subroutine suba(a) ! описание процедуры, использующей массив
! в качестве формального параметра
real a(:,:) ! нижняя граница в описании массива отсутствует,
.... ! при вызове процедуры массив определяется как а(4,7)
end subroutine suba
Массивы, перенимающие размер
Пример синтаксиса перенимающих размер массивов.
program main
real x(3,6,5), y(4,10,5)
call asub(x,y) ! вызов процедуры
.....
end
subroutine asub(a,b) ! описание процедуры, содержащей массивы,
! перенимающие размер
real a(3,6,*), b(0:*) ! массивы y и b неодинаковы по рангу
.......
end subroutine asub
3.9. Файлы Фортрана
3.9.1. Основные понятия
Запись
Запись конца файла – это специальная запись, выполненная с помощью оператора END FILE.
Файл
Внешний файл
Внутренний файл
Устройство
Методы доступа
3.9.2. Операции над внешними файлами
3.9.3.Операторы передачи данных
Оператор READ:
READ(<UNIT=>u<,<<FMT=>f>|<NML=>nml> &
<,ADVANCE=adv><,IOSTAT=s><,REC=rec><,EOR=eor> &
<,SIZE=size><,END=eof><,ERR=err>) <список>
Оператор WRITE:
WRITE(<UNIT=>u <,<<FMT=>f> | <NML=>nml> &
<, ADVANCE=adv><, IOSTAT=s><, REC=rec><, ERR=err>) <список>
Оператор ENDFILE:
Endfile u
или
ENDFILE (<UNIT=> u <, ERR=err><,IOSTAT=s>)
3.9.4. Порядок выполнения передачи данных
Выполнение операторов READ, WRITE и PRINT состоит из 7 шагов:
Определение направления передачи данных.
Идентификация устройства осуществляется по его спецификации в операторе ввода-вывода.
Определение формата.
Установка позиции файла перед началом выполнения оператора.
Передача данных между файлом и отдельными объектами.
Установка позиции файла после выполнения оператора.
Определение переменной состояния.
3.9.5. Операторы подсоединения устройств к файлам
Оператор OPEN:
OPEN (<UNIT=>u <, FILE=file> <,STATUS=status><, ACCESS=access> &
<, ACTION=act><, BLANK=blank><, CARRIAGECONTROL=carr> &
<, DELIM=delim><, FORM=form><, IOFОCUS=iof><, IOSTAT=s> &
<, PAD=pad> <, POSITION=pos><, RECL=recl><, SHARE=share> &
<, MODE=mode><, BLOCSIZE=bls><,ERR=err>)
Пример: записи оператора открытия файла.
OPEN (10, FILE='TED', STATUS=NEW, ACCESS='SEQUENTIAL', &
FORM='FORMATTED', IOSTAT=VAR, MODE='WRITE', &
RECL=80, BLOCSIZE=1536)
WRITE (10,4) EIF
Оператор СLOSE:
CLOSE (<UNIT=> u <, STATUS=status> <, IOSTAT=s> <, ERR=err>)
Пример ввода именованного списка из файла.
program ff1
integer k, arr(5) ! описание
logical fl ! переменных
real r4
character c10*10, c4*4
namelist /mes/ k,fl,r4,c10,c4,arr ! объявление именованного списка mes
open (10, file=‘c:\users\tiv\a.txt’) ! открытие файла, находящегося на
! устройстве с номером 10, и содержащего информацию:
! &Mes K = 100, FL = T, C10 = ‘qwertyuiop’,
! r4 =24.0, arr = 1,2,3,4,5, c4 = ‘sub’
! /
read (10,mes) ! ввод информации в элементы списка mes из файла
write (*,*) k, arr, fl ! вывод
write (*,*) r4,’ ‘, c10,’ ‘, c4 ! результатов
end program ff1
Результат:
100 1 2 3 4 5 T