Лекция 8 МОДУЛИ. Если много параметров ? program prog... call sub1(X,Y,Z,X1,...,PAR)... call sub2(X,Y,Z,X1,...,PAR)... end subroutine sub1(A,B,C,D,...,ZW)

Презентация:



Advertisements
Похожие презентации
Лекция 9 ПРОИЗВОДНЫЕ ТИПЫ. Производные типы, зачем ? ! данные N частиц real x(N) real y(N) real z(N) logical status(N) real temperature(N) real pressure(N)
Advertisements

Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
ПРОЦЕДУРЫ И ФУНКЦИИ CPascal Подпрограмма – группа операторов реализующая законченный алгоритм и оформленная как самостоятельная синтаксическая единица.
Подпрограммы: процедуры и функции Информатика. 1. Подпрограммы При решении различных задач часто возникает необходимость проводить вычисления по одним.
Процедуры и функции. Разработал учитель информатики МБОУ СОШ 50 г. Краснодара Ракута Елизавета Григорьевна « Учиться и, когда придет время, прикладывать.
Общие процедуры Урок в 10 классе. Общая процедура представляет собой подпрограмму, которая начинает выполняться после её вызова из другой процедуры. Оператор.
Подпрограммы в Паскале.
Процедуры и Функции Подпрограмма, задаваемая с помощью ключевого слова Sub (subprogram), называется процедурой, а с помощью ключевого слова Function -
Программа имеет заголовок следующего вида Program имя ; Имя - это имя программы. Идентификатор имени имеет не более семи символов. Имя начинается с буквы.
Понятие подпрограмм. Подпрограммы в языке Паскаль.
Подпрограммы Лекция 7. Ломаско Павел Сергеевич16 декабря 2013 г.
Функции и процедуры Инструмент структурирования программ Два типа подпрограмм Описание Локальные и глобальные переменные Параметры: формальные и фактические.
Модули Информатика. Наличие модулей в Turbo-Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки программ и данных.
Учитель НСШ Кумакшев А.Н, учитель БСШ2 Вахмистров Г.Г. Элективный курс по информатике «Процедуры и функции на языке Pascal».
Общие процедуры. Модульный принцип построения проекта Visual Basic Автор: Сергиенко Е.В. Учитель информатики МОУ СОШ 5.
Что такое структурный подход в программировании? Как он реализуется в ЯП Паскаль? Что такое процедура? Кто дает название процедуре? Где записывается процедура?
Модульный принцип построения проекта и программного кода.
Подпрограммы. Субкомпетенции: 1. Обработка данных с помощью стандартных подпрограмм и подпрограмм, определённых пользователем. 2. Организация передачи.
Функции в Turbo Pascal Шутилина Л.А.
Транксрипт:

Лекция 8 МОДУЛИ

Если много параметров ? program prog... call sub1(X,Y,Z,X1,...,PAR)... call sub2(X,Y,Z,X1,...,PAR)... end subroutine sub1(A,B,C,D,...,ZW) ! код подпрограммы end subroutine sub1 subroutine sub2(A,B,C,D,...,ZW) ! код подпрограммы end subroutine sub2 дублируем параметры

Если много типов ? program prog type T0 integer x,y,z complex cmpl end type T0 type T1 real x character symb type (T0) style end type T1 call sub3(massiv)... end subroutine sub3(massiv) ! дублируем ! типы данных T0, T1 end subroutine sub3 subroutine sub4(massiv) ! дублируем ! типы данных T0, T1 end subroutine sub4

Если много процедур ? program prog interface subroutine sub1(...)... end subroutine sub1 end interface interface subroutine sub2(...)... end subroutine sub2 end interface end subroutine sub3(...) ! дублируем ! интерфейсы call sub1(...) end subroutine sub3 subroutine sub4(...) ! дублируем ! интерфейсы call sub1(...) end subroutine sub4

Данные и процедуры вместе program sub1 sub2 sub5 sub4 sub3 module типы, данные процедуры

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

Состав модуля module имя_модуля use другие модули public private protected описание констант, типов, модульных переменных contains модульные процедуры end module

MOD - файлы После компиляции для каждого модуля создается файл имя_модуля.mod на который можно сослаться из других программ. module FLOW... end module FLOW module GRID... end module GRID flow.mod grid.mod Additional Include Directories

Оператор use Позволяет использовать типы, данные и процедуры модуля program prog use mathlib ! используем модуль mathlib Атрибут only позволяет использовать только "избранные" данные или процедуры. program prog use mathlib, only : dot ! кроме dot, ! все остальные не используются

Оператор use Во избежание конфликта одинаковых имен модуля и программной единицы используем операцию =>. module math integer :: A = 1000,B,C end module program prog use math, AM => A integer A A = 80 write(*,*) AM, A ! end

Public, private и protected Public – данные и процедуры доступны в других программных единицах (по умолчанию). Private – данные и процедуры доступны внутри модуля. Protected – доступны только значения данных в других программных единицах (нельзя изменять данные). Организация доступа к элементам модуля.

Public, private и protected module math integer, public :: A integer, private :: B integer, protected :: C contains subroutine init() A = 1000; B = 2000; C = 3000 end subroutine init end module math program prog use math implicit none call init() A = 50 ! public-переменная, полный доступ B = 100 ! private-переменная, доступна в модуле write(*,*) C ! protected-переменная, доступ к значению С = С+1 ! нельзя изменять значение end

Public, private и protected Public – объявление констант, глобальных переменных, типов и процедур. Все промежуточные и служебные переменные, процедуры и типы следует объявлять как private. Доступ в головной программе к private данным производить при помощи public – процедур. При необходимости использовать значения private -данных применяем protected. Рекомендации по организации доступа.

Перегрузка процедур Процедура вызывается с разным количеством параметров. В вызове процедуры используются параметры разных типов данных. Объединение под одним именем множества разных процедур. Следим за однозначностью выбора одной из объединённых процедур ! interface общее_имя module procedure имя_1, имя_2,..., имя_N end interface

Пример перегрузки module math interface prod module procedure umn, scalar, vector end interface contains real function umn(A,B) ! умножение чисел real A,B umn = A*B end function umn real function scalar(A,B) ! скалярное умножение real A(3), B(3) scalar = A(1)*B(1)+A(2)*B(2)+A(3)*B(3) end function scalar subroutine vector(A,B,C) ! векторное умножение real A(3), B(3), C(3) C(1) = A(2)*B(3)-B(2)*A(3) C(2) = A(3)*B(1)-A(1)*B(3) C(3) = A(1)*B(2)-A(2)*B(1) end subroutine vector end module math

Пример перегрузки program prog use math real A(3), B(3), C(3) A = [2.0, -4.0, 5.0] B = [4.0, -3.0, 0.0] write(*,*) "Number = ", prod(4.0,5.0) write(*,*) "Scalar product = ", prod(A,B) call prod(A,B,C) write(*,*) "Vector product = ", C end Number = Scalar product = Vector product = Результат работы программы.

Требования для перегрузки В каждой паре перегружаемых процедур хотя бы один параметр должен отвечать двум требованиям: по своему положению не имеет аналогов по типу; module MD interface func module procedure F1, F2 end interface contains real function F1(A,B) ! A и B вещественного типа real A, B... end function F1 real function F2(C,D) ! С и D вещественного типа real C, D... end function F2 end module MD

Требования для перегрузки формальный параметр с таким же именем отсутствует в списке параметров другой процедуры. module MD ! --- warning interface func module procedure F1, F2 end interface contains real function F1(A,B) real A integer B... end function F1 real function F2(B,A) real A integer B... end function F2 end module MD module MD interface func module procedure F1, F2 end interface contains real function F1(A,B) real A integer B... end function F1 real function F2(C,D) real D integer C... end function F2 end module MD

О модулях … Легкое составление, отладка и модификация программных единиц независимо друг от друга. Использующая программа не знает как устроен модуль, она умеет с ним общаться при помощи процедур. Хороший модуль снаружи лучше чем внутри и его лучше использовать чем построить. Следует избегать создания модулей, работа которых будет зависеть от предыстории.