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

Связь с хозяином (Host) - глобальные данные

Тип Character | Логические выражения | Массивы и производные типы | Оператор и конструкция IF | Конструкция SELECT CASE | Упорядочение операторов | Уровни доступа | Спецификация входных-выходных параметров | Использование модуля | Процедуры в качестве параметров |


Читайте также:
  1. A) проанализируйте модели образования слов, прочтите и переведите слова и словосочетания, созданные на их основе.
  2. Ex.10. А. Дополните предложения, выбрав подходящие фразы, данные в скобках. Example: It is late to go to school.
  3. III. ДАННЫЕ О БУДУЩЕМ КУРСЕ ИНОСТРАННОГО ЯЗЫКА
  4. Quot;Правило четырех недель " и его связь с рыночными циклами
  5. Telemetry data телеметрические данные 1 страница
  6. Telemetry data телеметрические данные 2 страница
  7. Telemetry data телеметрические данные 3 страница

 

Рассмотрим,

 

PROGRAM CalculatePay

IMPLICIT NONE

REAL:: Pay, Tax, Delta

INTEGER:: NumberCalcsDone = 0

Pay =...; Tax =...; Delta =...

CALL PrintPay(Pay,Tax)

Tax = NewTax(Tax,Delta)

....

CONTAINS

SUBROUTINE PrintPay(Pay,Tax)

REAL, INTENT(IN):: Pay, Tax

REAL:: TaxPaid

TaxPaid = Pay * Tax

PRINT*, TaxPaid

NumberCalcsDone = NumberCalcsDone + 1

END SUBROUTINE PrintPay

REAL FUNCTION NewTax(Tax,Delta)

REAL, INTENT(IN):: Tax, Delta

NewTax = Tax + Delta*Tax

NumberCalcsDone = NumberCalcsDone + 1

END FUNCTION NewTax

END PROGRAM CalculatePay

 

Здесь NumberCalcsDone глобальная переменная. Она доступна во всех процедурах главной ассоциации.

 

Рассмотрим еще один пример

 

PROGRAM Proggie

IMPLICIT NONE

REAL:: A, B, C

CALL sub(A)

CONTAINS

SUBROUTINE Sub(D)

REAL:: D! D формальный (соответствующий для фактического параметра A)

REAL:: C! локальное C (отлично от С из Proggie)

C = A**3! A не может быть заменено

D = D**3 + C! D может быть заменено
B = C! B из Proggie получает новое значение

END SUBROUTINE Sub

END PROGRAM Proggie

 

В процедуре Sub при выполнении с одной стороны A как параметр будет подставлен вместо D, с другой стороны в операторе

C = A**3

используется значение А из процедуры Proggie, независимо от того, какой фактический параметр использован при вызове Sub.

Есть и другой аспект: А как глобальная величина из процедуры Proggie не может менять значения, но как фактический параметр, соответствующий D, будет перевычислено оператором

D = D**3 + C.

 

C в Sub отдельное от C в Proggie, замена его значения в Sub не приведет к замене значения C в Proggie.

Я

Блок взаимодействия (Interface Blocks)

 

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

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

•неявным - как в вызове внешних процедур. Здесь компилятор допускает, что детали вызова процедуры и параметры увязаны.

 

Как бы ни было интерфейс возможно сделать явным. Это может быть сделано с помощью интерфейсного блока:

 

INTERFACE

Операторы интерфейса

END INTERFACE

 

Интерфейсный блок для процедуры включается в начало вызывающей программной единицы. Операторы интерфейса содержат копию оператора SUBROUTINE (или FUNCTION), все операторы объхявлений для формальных аргумнетов и оператор END SUBROUTINE (или FUNCTION). Например:

 

PROGRAM count

INTERFACE

SUBROUTINE ties(score, nties)

REAL:: score(50)

INTEGER:: nties

END SUBROUTINE ties

END INTERFACE

REAL, DIMENSION(50):: data

...

CALL ties(data, n)

...

END PROGRAM count

SUBROUTINE ties(score, nties)

REAL:: score(50)

INTEGER:: nties

...

END SUBROUTINE ties

 

Интерфейсный блок в программе count обеспечивает явный интерфейс с подпрограммой ties. Если бы программа count могла бы вызвать другую внешнюю процедуру, ее операторы интерфейса могли бы быть заменены в том же интерфейсном блоке.

Я


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


<== предыдущая страница | следующая страница ==>
Внутренние процедуры| Объекты допустимого образа

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