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

10

Лекция 9

9.0. Подпрограммы

9.1. Основные понятия

Подпрограмма – логически законченная часть программы, которую по имени можно вызывать в разные места программы неограниченное число раз.

Она решает часть общей задачи. У нее есть имя, которое используется при вызове подпрограммы в основную программу.

Подпрограммы бывают 2 видов:

  • процедуры и

  • функции.

Процедура не возвращает значений (например, рисует) или возвращает несколько значений (корни квадратного уравнения).

Функция возвращает одно значение.

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

Структурированная программа называется модульной. Она содержит более крупные компоненты - подпрограммы. Модульная программа проще создается, более понятна.

Модульная программа может иметь иерархическую структуру.

Работа с подпрограммой включает 2 этапа:

  • описание подпрограммы;

  • вызов подпрограммы.

Преимущества подпрограммы:

  • в программе нет дублирования кода;

  • повышается надежность программы;

  • улучшается «читаемость» программы;

  • облегчается процесс отладки.

Различают подпрограммы:

  • без параметров,

  • с параметрами.

9.2. Процедурный тип

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

Процедурный тип это внешние данные, используемые подпрограммой.

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

type

<имя1> = procedure;

<имя2> = procedure(<список параметр.>);

<имя3> = function (<список параметров>) : <тип результата>;

Этот тип определяет процедуру без параметров, процедуру с параметрами или функцию.

Например:

type

Proc1 = Procedure; // Тип – процедура без параметров

Proc2 = Procedure(x,y : real); //Тип – процедура с параметрами

Func1 = Function(x,y : real): real; //Тип – функция

9.3. Сравнение вариантов

Рассмотрим 2 варианта решения одной и той же задачи: вывод текстовых блоков с вставкой стандартного разделителя из трех строк из набора символов “ * ” в конце.

1 –й вариант (Монолитная программа)

program Example1;

…..

uses

SysUtils;

var

i, j : integer;

begin

Writeln('Text 1'); // Вывод 1 текста

for j :=1 To 3 Do

begin // Вывод строки из 20 символов “ * ”

for i :=1 To 20 Do write( ' * ' );

writeln;

end;

Writeln('Text 2'); //Вывод 2 текста

for j :=1 To 3 Do

begin // Вывод строки из 20 символов “ * ”

for i :=1 To 20 Do write( ' * ' );

writeln;

end;

readln

end.

2 – й вариант (Модульная программа)

program Example2; DrawStr

….

uses

SysUtils;

Procedure DrawStr; // Процедура “Рисовать строки”

var

i, j : integer;

begin

for j :=1 To 3 Do

begin // Вывод строки из 20 символов “*”

for i :=1 To 20 Do write( ' * ' );

writeln; // Перейти к следующей строке

end;

end;

begin //основная программа

Writeln( ' Text 1 ' ); // Вывод 1 текста

DrawStr; // Вывод строк разделителя

Writeln( ' Text 2 ' ); // Вывод 2 текста

DrawStr; // Вывод строк разделителя

readln

end.