Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
702.46 Кб
Скачать

3.1.4. Процедуры

Формат спецификации процедуры:

procedure <имя>(<список формальных параметров>);

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

Вызов процедуры - это отдельный оператор, который содержит имя про­цедуры и список фактических параметров. Например:

P(x); {это вызов процедуры P(x)}

В качестве примера использования процедуры рассмотрим описание и ис­пользование той же самой подпрограммы power. В этом случае, наряду с ар­гументами base и exponent, которые передаются по значению, необходимо

добавить в спецификацию процедуры выходной параметр (результат), кото­рый должен быть передан по ссылке (в примере это pow).

procedure power( base, exponent: real; var pow: real);

begin

pow:= exp( exponent * ln(base));

end;

Пример вызова процедуры power:

power(3, 4, j);

writeln(j);

3.1.5. Передача массивов в качестве параметров

В качестве примера будем использовать подпрограмму вычисления сум­мы значений элементов одномерного массива.

Формальные параметры как массивы с фиксированными размерами

В данном примере для описания типов параметров используется заранее определенный тип massiv с фиксированной размерностью.

uses crt; const N=3;

type massiv = array[1..N] of integer;

function sum_1( x: massiv ): integer;

var i : integer; sum: integer;

begin sum:= 0;

for i:= 1 to N do sum:= sum+x[i];

sum_1:= sum;

end;

var {main - главная программа } i:integer; a:massiv;

begin clrscr;

writeln('massiv a');

for i:=1 to N do readln(a[i]); writeln('summa= ', sum_1(a));

end.

3.1.6. Рекурсивные подпрограммы

Слово рекурсия происходит от латинского слова «recursio» - возвращение.

В программирование рекурсия означает, что подпрограмма обращается сама к себе непосредственно или через цепочку вызовов других подпрограмм.

Известными рекурсивными подпрограммами являются вычисление фак­ториала (рисунок 3.5), решение задачи о Ханойских башнях, быстрая сорти­ровка К.Хоара, подпрограммы работы с динамическими структурами дан­ных, подпрограммы построения фракталов и многие другие.

Рисунок 3.5 -Рекурсивная подпрограмма вычисления 3!

Главные требования к организации рекурсивной подпрограммы следующие:

  • рекурсивная подпрограмма имеет хотя бы один параметр

  • рекурсивная подпрограмма всегда содержит условие завершения ре­курсии и, если это условие не выполняется, подпрограмма вызывает сама себя с изменением значения параметра.

3.2 Модули

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

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

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

«Сокрытием информации (information hiding) называют приемы, благода­ря которым одни программы маскируют информацию, получаемую из других программ. Программа может скрывать детали реализации, такие как алго­ритмы и данные, благодаря чему, в случае, если их необходимо изменить, другие программы, от них зависящие, не придется переписывать. Программы, скрывающие информацию, взаимодействуют друг с другом через общедоступные интерфейсы. Главное достоинство сокрытия информации заклю­чается в увеличении независимости программ друг от друга» [David Parnas, «On the Criteria to Be Used in Decomposing Systems into Modules»].

Достоинством информационной закрытости является возможность осуществить:

  1. Независимую разработку программных средств несколькими программистами

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

Главные части модуля - интерфейс и реализация (рисунок .):

Каждый модуль компилируется независимо от других компонент про­граммы. Имя файла с исходным текстом модуля и название модуля должны совпадать.

Для того чтобы включить модуль в программу на языке Pascal, необходи­мо указать имя модуля в предложении uses.

Формат подключения модулей: uses список имен модулей>;

Структура модуля в языке Pascal:

unit <имя модуля >;