Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obschy_kurs / Fortran / Metod_Lr6_Fortran.doc
Скачиваний:
44
Добавлен:
21.02.2016
Размер:
74.75 Кб
Скачать
    1. Параметры процедур

Подпрограммы и функции, должны иметь возможность обмениваться данными с теми программными компонентами, из которых они были вызваны. Один из способов обмена информацией – передача данных через параметры процедур. Для этого вводится такое понятие, как формальный параметр.

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

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

Для того, что упростить работу компилятора и помочь ему находить ошибки и оптимизировать работу программы, рекомендуется указывать вид связи формальных параметров, который задается как атрибут intent (значение, смысл) в операторах описания типа формальных операторов.

Этот атрибут имеет три значения:

1) inдля входных параметров. Такой параметр не должен изменяться во время работы подпрограммы, то есть он не может появиться в левой части оператора присваивания внутри подпрограммы. Компилятор сразу же выдаст сообщение об ошибке, и до исполнения подпрограммы дело не дойдет.

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

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

Переменная из списка формальных параметров получает определенное значение при вызове подпрограммы.

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

Ограничения, накладываемые на параметры процедур

1) Между списками формальных и фактических параметров устанавливается соответствие по количеству, типу и порядку следования, т.е. первый фактический параметр соответствует первому формальному параметру и т.д.

2) Фактический параметр, замещающий входной формальный параметр может быть переменной или выражением. Фактический параметр, замещающий выходной и переопределяемый формальный параметр, может быть только переменной.

3) Совпадение имен фактических и формальных параметров не обязательно, но допустимо.

    1. Внутренние и внешние процедуры

Внутренние процедуры являются разновидностью программных компонентов Фортрана, однако их нельзя считать самостоятельными программными единицами. Внутренние процедуры могут использоваться только тем программным компонентом, в котором они описаны. Извне компонента-носителя они недоступны.

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

Структура главной программы с внутренними процедурами такова:

PROGRAM имя_программы

операторы описания

исполняемые_операторы

CONTAINS ! содержать в себе, включать

внутренние_процедуры

END [PROGRAM [имя_программы]]

Оператор CONTAINS отделяет исполняемые операторы главной программы от описания внутренних процедур.

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

!Использование внутренней функции

!для вычисления гипотенузы треугольника

Program Glavn

implicit none

real::x=4.5,y=5.5,z

open(1,file='out.txt')

z=Gptn(x,y)

write(1,10)x,y,z

10 format(5x,'x=',F3.1,3x,'y=',F3.1, 3x,'z=',F5.3)

!------------------------------------------------

contains

real function Gptn(a,b)

implicit none

real,intent(in)::a,b

Gptn=sqrt(a*a+b*b)

end function

!------------------------------------------------

end Program

Внешние процедуры могут находиться в одной файле с главной программой или в отдельном файле. Внешними они называются потому, что всю необходимую информацию они получают при обращении через своеобразный канал связи “фактические параметры – формальные параметры”.

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

Использование внешней функции

!для вычисления гипотенузы

Program Glavn

implicit none

real::x=4,y=5.5,z,Gptn

open(1,file='out.txt')

z=Gptn(x,y)

write(1,10)x,y,z

10 format(5x,'x=',F3.1,3x,'y=',F3.1, 3x,'z=',F5.3)

end

!------------------------------------------------

real function Gptn(a,b)

implicit none

real,intent(in)::a,b

Gptn=sqrt(a*a+b*b)

end Program

!

Содержание отчета по лабораторной работе

  1. Тема и цель лабораторной работы;

  2. Условие задачи, выданное преподавателем;

  3. Математическое описание задачи.

  4. Схемы алгоритмов.

  5. Тексты программ.

  6. Листинги с текстом программ (с комментариями) и результатами выполнения.

  7. Анализ результатов.

Контрольные вопросы.

  1. Назовите типы процедур в Фортране

  2. В каких случаях используется функция?

  3. В каких случаях используется подпрограмма?

  4. Правила вызова процедур.

  5. Назначение атрибутов in, out, inout.

  6. Объясните понятия: формальный и фактический параметр.

  7. Правила взаимосвязи формальных и фактических параметров

  8. Что такое внутренняя процедура?

  9. Что такое внешняя процедура?

6

ст. преп. каф. ЭВМ Скабалланович Т.И.

Соседние файлы в папке Fortran