Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fortran 90. ANSI Standard.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
861.18 Кб
Скачать

Вложения

Размещение конструкции одного блока внутри другого (операторы IF-THEN внутри цикла DO, и т.д.) возможно, но внутренний блок (блоки) должен быть окаймлен наружным (и) блоком (ами) с помощью соответствующих операторов. Запрещено перекрывать вложенные операторы. Например:

 

main: IF( sum>100 ) THEN

inner: DO i=1,n

...

ENDIF main

ENDDO inner ! запрещено, inner должен быть внутри main

 

Это в общем верно для всех конструкций, то есть для цикла DO , конструкций IF-THEN-ELSEIF и CASE . Максимальный уровень вложения (конструкции внутри конструкций внутри конструкций ...) зависит от компилятора.

Структура программы

 

Отдельная программа на Fortran 90 может быть сделана из нескольких отдельных программных модулей, называемых процедурами (внутренняя - internal, внешняя - external или модуль module)или модулями. Выполняемая программа содержит одну главную программу и некоторое число (может быть 0) других программных модулей. Важно реализовать так, чтобы внутренние детали каждого программного модуля отделены от других модулей. Только связь между модулями образует интерфейс, в котором один модуль вызывает другой по имени. Главное в написании программ с помощью программных модулей обеспечить, чтобы существовал процедурный интерфейс.

Деление программы на модули имеет некоторые преимущества:

  • программные модули могут быть написаны и отлажены независимо.

  • программный модуль, который имеет хорошо определенную задачу, легче понять и построить.

  • Разработанные и отлаженные модули и внешние процедуры могут быть повторно использованы в других программах (программист может построить личные библиотеки)

  • Хороший компилятор может лучше оптимизировать код благодаря модульной форме.

 

Порядок операторов

Fortran предписывает некоторый порядок операторов в программе. Любая программа или процедура должна быть написана по следующим правилам:

  1. Заголовок программы должен быть первым оператором (PROGRAM, FUNCTION or SUBROUTINE). Оператор PROGRAM не обязятелен, но рекомендуется к использованию.

  2. Все операторы спецификации должны предшествовать первому выполняемому оператору. Даже с помощью операторов DATA могут быть размещены с выполняемым текстом, то они должны лежать в области определения. Также хорошая идея группировать операторы FORMAT statements вместе для ясности.

  3. Выполняемые операторы должны следовать в порядке, определяемом логикой программы.

  4. Программа или процедура должна заканчиваться операторм END.

Внутри множества операторов спецификации требуется относительно малое упорядочение, тем не менее, в общем если один объект использован в спецификации другого, то естественно требуется, чтобы он был определен раньше. Другими словами, именованные константы (PARAMETER s) должны быть объявлены прежде, чем они могут быть использованы в качестве части объявления другого объекта.

Следующая таблица детализует порядок следования:

Упорядочение операторов

 

Операторы PROGRAM, FUNCTION, SUBROUTINE, MODULE или BLOC DATA

Оператор USE

 

 

Операторы FORMAT и ENTRY

IMPLICIT NONE

Оператор PARAMMETER

Операторы IMPLICIT

Операторы PARAMMETER и DATA

Определение производных типов, блоки интерфейса, операторы определения типа, операторы функций-операторов и операторы спецификаций

 

Операторы DATA

Вычисляемые конструкции

Оператор CONTAINS

Внутренние процедуры или процедуры модуля

Оператор END

 

Выполнение программы начинается с первого выполняемого оператора главной программы (MAIN PROGRAM, где процедура, вызванная при выполнении, начинается с первого выполняемого оператора после вызванной точки входа. Невыполняемые операторы концептуально `выполнены' (!) моделированием инициализации программы, иными словами, они вызываются тогда и только тогда, когда выполняется начало главной программы.

Теперь объясним таблицу,

  • Может быть только 1 главная программа PROGRAM,

  • Может быть много программных единиц FUNCTION s и SUBROUTINE s (процедур) с уникальными именами.

  • Может быть некоторое число модулей MODULE s с уникальными именами, которые связаны с программой с помощью оператора USE. Модули - очень легко приспособляемые программные единицы и используют в пакете несколько средств (например, процедуры, определения типов, объявления объектов или семантические расширения). Используется очень много поддержки и замены для средств языка FORTRAN 77.

  • Может быть только одна подпрограмма BLOCK DATA -- они не описаны как часть курса -- это возможность определить глобальные инициализации и глобальные константы и лучше использовать операторы MODULE и USE.

  • Оператор USE:

Он подключает модуль, связывет объекты модуля с программным модулем, делая их доступными. Когда использует его содержимое public, оно становится лоступным как будто бы оно было объявлено непосредственно и явно в самой программной единице. Модули могут быть предварительно скомпилярованы (подобно библиотекам) или быть написаны программистом.

Любые глобальные объекты могут быть поставлены в модуль и использованы, когда это потребуется.

  • Оператор IMPLICIT NONE должен стоять после оператора USE. Его использование настоятельно предлагается.

  • Операторы FORMAT и ENTRY. Операторы Format должны быть сгуппированы вместе в одном месте кода. Операторы ENTRY реализуют механизм `вход в' середину процедуры. Его использование противоречит хорошему стилю и сильно не рекомендуется в связи с его естественной опасностью.

  • Операторы PARAMETER и IMPLICIT:

Оператор IMPLICIT не могут быть использованы, IMPLICIT NONE можно использовать только в форме рассмотриваемых неявных типов. (операторы IMPLICIT разрешают пользователю переопределять явно типы объектов по первой букве. Нельзя иметь оператор, если есть строка IMPLICIT NONE.)

Операторы PARAMETER, предполагает, что использован атрибутный стиль (Fortran 90) объявления PARAMETER.

  • Оператор DATA может быть размещен в объявлении (но не в выполнеии), общая практика состоит в их расположении после объявлений перед выполняемыми операторами.

  • Блоки интерфейса обычно размещены в заголовке объявлений и сгруппированы вместе.

Операторы-функции являются формой однострочного объявления оператора, взамен могут быть использованы внутренние процедуры

  • Выполняемые операторы это вещи, подобные операторам DO, конструкциям IF и операторам присваивания.

  • CONTAINS отделяет главную программную единицу ``main'' от всех локальных видимых внутренних процедур.

  • внутренние процедуры следуют тому же порядку как и нормальные процедуры, исключая возможность содержать внутри себя внутренние процедуры второго уровня.

  • оператор END ограничитель, завершающий текущую программную единицу.

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