Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Модули и процедуры

Материал взят из проекта Lahey: http://www.lahey.com/index.html, http://www.lahey.com/other.htm). | Возможности расширения языка | Вид семейства | Управление программой | Выражения для массивов | Спецификации или объявления | Тип Character | Логические выражения | Массивы и производные типы | Оператор и конструкция IF |


Читайте также:
  1. II. Порядок выплаты ежемесячной компенсации на оплату проезда до места проведения процедуры гемодиализа инвалидам, находящимся на постоянном диализном лечении.
  2. Абонентские модули
  3. Административные процедуры как форма реализации компетенции органов внутренних дел.
  4. Административные регламенты как акты управления, устанавливающие административные процедуры.
  5. Внутренние процедуры
  6. Внутренние процедуры контроля над дискурсом (М.Фуко)
  7. Вопрос 15. Процедуры..

 

Модули это коллекции данных, определений типов определений процедур, которые дают большую защищенность и общее замену понятия COMMON.

Модули занимают важное место в том, чтобы положить вещи для совместного использования. Этот новый вариант программной единицы может содержать данные, процедуры, определения производных типов и блоки интерфейса (и даже блоки common), все, что может быть включено в единицу scoping с посощью оператора USE. Модуль может также быть использован в скрытом коде процедуры от клиентов. Один и тот же модуль может быть использован во многих программах.

з

Интерфейсы

В соответствии с предложениями Metcalf и Reid (1990, 1992) в Фортран 90 введено требование явного интерфейса. Он выглядит так

INTERFACE SUBROUTINE SUB(A) REAL, DIMENSION (:,:,:):: A END SUBROUTINE SUB END INTERFACE

Если Вы забыли INTERFACE или если Вы имеете ошибочный интерфейс, то Вы обычно получаете "ошибку сегментации", это означает, что программная единица может быть отсутствует.

Компилятор может быть использован для проверки результатов если характеристики процедур доступны в явном интерфейсе. Тело интерфейса, определенного пользователем, выглядит очень похоже на оператор определения функции и ассоциируется с определениями. Компилятор знает интерфейс с каждой определенной процедурой внутри программной единицы. С интерфейсом компилятор будет проверять характеристики результата функций, с которым ожидаются при вызове и проверке характеристик каждого аргумента с которыми ожидается процедура.

 

Программисты общих (родовых) процедур могут использовать общие процедуры (процедуры с одним и тем же имененм) с помощью использования интерфейсного блока, чтобы проверить информацию для определения, какую процедуру вызвать. Специальная процедура чтобы быть вызываемой, использующая вид, тип и ранг (категорию) аргументов.

 

! Пример использования общих процедур

module procedure_def

! Опрелить общий интерфейс 'force' для специальных функций

! 'real_force' and 'double_force'.

interface force

! Объявляет функции и подставляемые типы аргумента.

function real_force(mass, accel) result(force)

real force, mass, accel

end function real_force

function double_force(mass, accel) result(force)

double precision force, mass, accel

end function double_force

end interface

end module

program main

use procedure_def! Ассоциирует procedure_def с main.

real rmass, raccel, rforce

double precision dmass, daccel, dforce

data rmass/2401.0/, raccel/9.81245/

data dmass/2401.0d0/, daccel/9.81245d0/

! Вызывает функцию 'force'. Компилятор реализует первый

! в 'real_force', и второй в 'double_force'.

rforce = force(rmass, raccel)

dforce = force(dmass, daccel)

write(*,'(1x,1p,e16.9,t25,d16.9)') rforce, dforce

end program

! Фактические функции выполняемы, когда сделан вызов 'force'.

function real_force(mass, accel) result(force)

real force, mass, accel

force = mass*accel

end function real_force

function double_force(mass, accel) result(force)

double precision force, mass, accel

force = mass*accel

end function double_force

з


Дата добавления: 2015-11-14; просмотров: 54 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Секция (вырезка) массива| Более подробная информация

mybiblioteka.su - 2015-2024 год. (0.007 сек.)