Операторы End, Stop, Return

К оператору End применимы следующие правила:

1. послеоператораEnd рекомендуется повторять заголовок ПЕ

Subroutinename(аргументы)

Операторы

End Subroutine name

2. End – это последний оператор ПЕ, не только конец текста, но и нормальное завершение программы, что означает:

- в главной программе – закрытие файлов, освобождение памяти и возврат в ОС,

- в процедуре – освобождение динамической памяти и возврат в вызывающую программу.

Оператор Stopпо действию похож на Endглавнойпрограммы, только может встретиться в любом месте проекта – это, скорее всего, прекращение приложения из-за ошибки, на консоли – stop program terminated.

Оператор Return по действию похож на Endпроцедуры. Смысл оператора Return в следующем: он может появляться в любом месте любой из процедур – это всегда досрочное завершение активной процедуры.

Обмен данными в проекте

Программные единицы (ПЕ) проекта получают данные и формируют результаты. Помимо передачи данных через аргументы в Фортране-90 появились два новых способа доступа к объектам носителя данных по именам:

- вложенные процедуры импортируют объекты внешней ПЕ;

- объекты модуля общедоступны там, где модуль используют (use) и модуль является носителем данных, объекты модуля по умолчанию являются общедоступными (атрибутpublic), а локальные объекты модуля должны быть помечены атрибутом private.

Присоединение данных носителя

Носителем данных может быть:

- внешняя программа для своих внутренних процедур;

- модуль для своих модульных процедур;

- модульная процедура для своих внутренних процедур.

Пример: попадают ли пять точек из Array в круг?

Program Host

integer :: i; real :: R=5 ! радиус

real,public,dimension(1:2)::x0=(/1,1/)! координаты центра

real, dimension(1:2,1:5):: Array

Open(1,File='In.txt'); Open(2,File='Out.txt')

write(2,3) R,x0; read(1,*) Array

do i = 1,5

if(InCircle(Array(:,i))&

write(2,2)Array(:,i),'внутри круга'

Enddo

2 format('Точка с координатами [',f6.2,' , ',f6.2, '] - ', a)

3 format('Окружность радиуса ', f6.2, &
' с координатами центра [', f6.2, ',', f6.2, ']')

Contains

logical function InCircle(X) ! модульная процедура: X в круге?

real,intent(in),dimension(1:2)::X ! X - координаты точки

real:: R=1 ! радиус

InCircle = sum((X-x0)**2) < R*R

end function InCircle

end Program Host

Функция InCircle является внутренней, а главная программаHost манипулирует с объектами так:

- x0 присоединяется к числу видимых объектов внутренней функции InCircle из носителя данных Host;

- секция Array(:,i) поступает через аргументы, как вектор X в функции;

- R=5 главной программы и real:: R=1 внутренней функции не входят в противоречие – это просто две одноименные переменные; чтобы в InCircle не было R надо обязательно удалитьreal:: R=1.








Дата добавления: 2016-02-13; просмотров: 1304;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.