Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
327582.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
391.68 Кб
Скачать
  1. Условный оператор 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, не допускаются.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]