
- •Алфавит, лексемы, ключевые слова языка Фортран. Метки. Комментарии.
- •Структура программы. Внешние подпрограммы. Внутренние подпрограммы. Модули.
- •Переменные. Переменная – это величина, которая может в программе принимать различные значения.
- •Условный оператор if... Then...End if.
- •12.Неявное определение типа.
- •13. Синтаксис определения производных типов
- •14. Атрибут parameter. Именованные константы и константные выражения
- •15. Атрибуты dimension и allocatable. Описание массивов.
- •16. Атрибут intent. Описание формальных параметров.
- •17. Определенные и неопределенные переменные. Выражения с массивами и присваивание массивов.
- •24,Внешние подпрограммы.
- •30.Оператор use
- •31.Основные сведения о массивах
- •32.Массивы. Динамические массивы.
- •33.Операторы allocate, deallocate.
- •34.Форматирование ввода-вывода. Оператор format.
- •35.Соединение файла с логическим устройством
- •Алфавит, лексемы, ключевые слова языка Фортран. Метки. Комментарии.
- •15. Атрибуты dimension и allocatable. Описание массивов.
- •18. Скалярные числовые выражения и скалярное числовое присваивание.
- •27. Модули. Области общей памяти.
Условный оператор if... Then...End if.
Program fw
integer::A,B
print*,'A='
read*,a
print*,'B='
read*,b
If (a>b) then
print*,'A>B'
end program
12.Неявное определение типа.
Оператор IMPLICIT
Фортран не относится к языкам со строгим контролем типа. То есть явное
определение типа каждой переменной по правилам Фортрана не требуется.
Обьект, тип которого не определен явно ни в одном из операторов описа-
ния, типизируется по правилам неявного определения типа. Правила неяв-
ного определения типа либо подразумеваются по умолчанию, либо вводятся
оператором implicit. Предшествовать оператору implicit в программном
компоненте могут только операторы use, parameter и format.
Правила неявного определения типов устанавливают тип объекта по его име-
ни. Предполагается, что все объекты программного компонента, чьи имена
начинаются с букв i, j, к, l, ми n, относятся к целому типу стандартной
разновидности. Объекты, имена которых начинаются со всех остальных
букв — а, в, ..., н, о, р, ..., z, — относятся к стандартной разновидности ве-
щественного типа. В программе, приведенной в листинге 3.1, все переменные
типизируются неявным образом — в ней нет ни одного оператора описания.
Пример 1 использования неявного описания
PROGRAM xrndesc
j = 3
k = б
i = j + к
f = 0 5 + 1 3**1
WRITE (*, *) ' I =', i, ' Ц =', D» ' к =’ к,&
&' Разновидность типа I =', KIND(i)
WRITE (*, *) f =', f, ' Разновидность типа f = ', KIND(f)
END PROGRAM lmdesc
Изменить правила неявного определения типа можно с помощью оператора
implicit, который устанавливает соответствие типа буквенному диапазону
Его синтаксис
IMPLICIT название_типа (диапазон_букв)
Например
IMPLICIT REAL(SELECTED_REAL_KIND(10)) (Р - S)
IMPLICIT COMPLEX(KIND(0 0D0)) (С)
IMPLICIT TYPE(POINT) (U - Z)
В результате действия этих операторов все переменные и процедуры-
функции, чьи имена начинаются с букв р, q, r и s, будут отнесены к веще-
ственному типу с параметром разновидности, определяемым функцией
selected_real_kind(10), все объекты, имена которых начинаются с буквы
с, будут причислены к комплексному типу "двойной" точности, все объекты,
имена которых начинаются с букв диапазона u - z, будут отнесены к про-
изводному типу point (если, конечно, этот тип доступен) В примере 2
приведен пример объявления всех имен в диапазонах (а - н, о - z) вещест-
венными двойной точности
Пример 2 изменения правил неявного описания
PROGRAM lmdescl
IMPLICIT REAL(KIND(0 0D0)) (A - H, О - Z)
J = 3
К - б
I = J + К
f = 0 5 + 1 3**1
WRITE (*, *) I='/I,1J=',J, ' К =’ K,&
&' Разновидность типа I =', KIND(I)
WRITE (*, *) f =', f, ' Разновидность типа f =', KIND(f)
END PROGRAM lmdescl
При неявном определении типа переменная, не описанная явным образом,
без "лишнего шума" получает тип, соответствующий первой букве своего
имени Таким образом, опечатка в имени переменной может пройти совер-
Операторы описания 59
шенно незамеченной Небольшие замены в программе из примера 1
или 2 не вызовут ошибок компиляции, но приведут к совершенно другому
результату (пример 3)
Пример 3 ошибки при неявном описании
PROGRAM jmdesc_error
j = 3
k = б
'Опечатка (strelo4ka vniz!!)
1 = 1 + к
f =0 5+1 3**1
WRITE (*, *) ' I =', i, ' j =', и, ' к = ‘, к
WRITE (*, *) ' f =', f
END PROGRAM imdesc__error
Весьма сложная картина может получиться при наложении правил неявного
описания внутренних подпрограмм и компонентов-носителей, а также при
использовании модулей
Поэтому правила неявного определения типа лучше не использовать вовсе
Отключить их можно оператором
IMPLICIT NONE
Тогда все неописанные переменные будут отмечены компилятором, и
трансляция не завершится, пока все переменные не будут описаны явно
(пример 4)
Пример 4 использования оператора IMPLICIT NONE
PROGRAM force_desc
IMPLICIT NONE
Теперь описание обязательно
INTEGER i, j, k
j= 3
k = 6
Ошибочное (strelo4ka vniz) выражение не пройдет незамеченным
1 = 1 + к
f = 0 5 + 1 3**i
WRITE (*,*) • I =', 1, ' j =', з, ' к =' , к
WRITE (*, *) ' f = ' , f
END PROGRAM force desc
Перед оператором implicit none могут помещаться только операторы use и
format. Другие операторы implicit в том блоке видимости, где есть
implicit none, не допускаются.