Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации и программирования. Часть 1. Конспект лекций.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
465 Кб
Скачать

for j:=i+1 to N do

if a[i]>a[j] then Swap(a[i],a[j]);

end; begin

{----------- Здесь точка входа в программу!!! ----------} InitArray;

DisplayArray;

SortArray; end.DisplayArray;

Локальность имен в ТР

Описать процедуру/функцию в ТР – это значит:

задать имя подпрограммы в разделе описания;

указать ее параметры и их типы;

описать тело подпрограммы.

ВТР действует принцип локализации имен, т.е. все идентификаторы, описанные в теле подпрограммы, действительны только в ней и недоступны извне. Переменные, доступные всей программе, называются глобальными. На рис. 5 иллюстрируются области действия переменных.

Рис. 5

Вопрос: Еще раз посмотрите программу сортировки данных. Какие переменные являются локальными? Для какой подпрограммы?

24

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

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

фактическими параметрами.

Пример. var z:integer;

function Summa(a,b:byte):integer; begin

Summa:=a+b

end; begin

z:=Summa(2,3); writeln(Summa(z,z))

end.

Вопрос. Какой результат будет выведен на экран?

В стек при передаче параметров в подпрограмму данные могут передаваться такими двумя способами, как:

передача по значению;

передача по ссылке на переменную.

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

Вопрос: Еще раз посмотрите программу сортировки данных, в частности, на функцию Swap. Каким способом передаются данные? Что будет, если передавать другим способом?

Рекурсия. Рекурсивные функции

Рекурсия – это такой способ организации кода программы, в ходе

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

25

Пример: Procedure DisplayMessage; begin

Writeln(’У попа была собака,’); Writeln(’Он ее любил.’); Writeln(’Она съела кусок мяса,’); Writeln(’Он ее убил.’);

Writeln(’Похоронил. И надпись надписал:’); DisplayMessage

end; begin

DisplayMessage end.

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

Задача-пример: Вычислить N! = 1·2·3·...·N.

var N:longint;

function factorial(N:longint):longint; begin

if N>1 then factorial:=N*factorial(N-1) else factorial:=1

end; begin

Readln(N);

Writeln(factorial(N))

end.

Модули в ТР

Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описания (типы, константы, переменные, процедуры, функции) и, возможно, некоторые исполняемые операторы иницирующей части. Появление объектов в интерфейсной части делает их видимыми для основной программы и других модулей. Тела подпрограмм располагаются в исполняемой части и могут быть скрыты от пользователя.

26

Модуль имеет следующую структуру.

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

INTERFACE

<интерфейсная часть>;

IMPLEMENTATION

<исполняемая часть>; begin

<начальные действия при подключении модуля>; end.

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

 

Стандартные модули в ТР

В ТР используются 8 стандартных модулей:

SYSTEM

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

слово USES

 

DOS

– для работы с файлами и системных вызовов ОС

PRINTER – для работы с печатью

GRAPH

– для работы с графическим режимом экрана

CRT

– для работы с текстовым режимом экрана и клавиатурой

 

27

OVERLAY – для работы с большим объемом кода и данных про-

граммы

 

TURBO3

– для совместимости с ТР версии 3.0

GRAPH3

– для совместимости с ТР версии 3.0

Более подробную информацию о каждом стандартном модуле можно получить во встроенной справочной информации интегрированной среды программирования. К примеру, в SYSTEM входит набор таких функций, как sin, cos, abs, read, write и т.д.

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

Пример. UNIT Digits; Interface

function Digit(N:longint; Pos:byte):byte; {Получить цифру с позиции

Pos в числе N}

function NumberOfDigits(N:longint):byte; {Получить число цифр в чис-

ле N}

implementation

function NumberOfDigits; var S:longint;

begin

S:=0; While N>0 do begin S:=S+1; N:=N div 10 end;

NumberOfDigits:=S

end;

function Digit; var i:byte; begin

for i:=1 to Pos do N:=N div 10; Digit:=N mod 10

end;

begin

{нет начальных действий} end.

28

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