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

Перегрузка имен подпрограмм

Перегрузка имен подпрограмм имеется в Delphi, FreePascal и отсутствует в Turbo Pascal.

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

procedure swap(var a,b: integer); overload; ... procedure swap(var a,b: real); overload; ...

Это явление называется полиморфизмом.

Полиморфизм – использование одного имени (одного знака операции) для выполнения родственных действий.

Примеры.

writeln(a,b) – полиморфная процедура: параметры различных типов.

a+b – операция «+» используется для различных типов.

Тонкости перегрузки

Пример 1.

procedure A(i: integer); overload; procedure A(i: real); overload;

var b: byte; ... A(b); // ошибка - неоднозначность при вызове процедуры

Пример 2.

function f: integer; overload; function f: real; overload; ... r:=f; // ошибка - неоднозначность при вызове функции

Правило: тип возвращаемого значения не участвует в разрешении перегрузки.

Параметры по умолчанию

Параметры по умолчанию имеются в Delphi, FreePascal и отсутствуют в Turbo Pascal.

procedure DoOperation(a,b: real; var res: real; op: char=’+’); begin   case op of   ’+’: res:=a+b;   ’-’: res:=a-b;   ...   end; end. ... DoOperation(2,3,res); DoOperation(2,3,res,'*');

Правило. Параметры по умолчанию всегда должны идти последними.

Предварительное объявление подпрограмм

procedure p(i: integer); forward; // Предварительное объявление. p будет определена далее

procedure q; begin   p(3); // можно вызывать end;

procedure p(i: integer); begin   ... end;

Методы разработки программ

Метод программирования сверху вниз

Вначале разрабатывается основная программа.

Пример. Выдать все простые числа от 1 до 1000

1 шаг.

x:=2; while x<1000 do begin   if IsPrime(x) then         write(x,’ ’);   x:=x+2 end;

2 шаг. Детализируем IsPrime.

Возможно, потребуется несколько этапов детализации.

Метод эффективен, когда задача четко поставлена и имеется четкий алгоритм ее решения.

Метод программирования снизу вверх

Вначале разрабатываются подпрограммы – «строительные блоки» программы ( в нашем случае – IsPrime):

function IsPrime(x: integer): boolean; …

Метод эффективен:

1. Когда задача нечетко поставлена. В процессе создания подпрограмм – строительных блоков можно добиться более четкой постановки задачи.

2. Когда решается группа задач из одной области (Выдать все простые числа от 1 до 1000. Сколько простых чисел во 2-ой сотне? Меняется ли процент простых чисел?)

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

Для больших проектов сочетают оба метода: сверху вниз и снизу вверх.

Модули

Модуль - это файл, в котором находится специальным образом оформленная группа взаимосвязанных процедур (функций), констант, типов. Модули позволяют:

1. Объединить группу взаимосвязанных подпрограмм в единое целое, отделив от остального кода. 2. Разбить большой код на относительно независимые части. 3. Поставлять пользователям библиотеки подпрограмм без исходного текста

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]