Операторы 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; просмотров: 1299;