Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
25-доконца.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
43.68 Кб
Скачать

  1. Подпрограммы в Pascal. Процедуры, функции. Описание и использование процедур и функций в программе. Фактические и формальные параметры, параметры-переменные и параметр-значение, локальные и глобальные переменные в программе. Особенности выбора использования процедуры или функции для решения задачи.

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

Вызов подпрограммы, т.е. выполнение действий, заданных в подпрограмме в виде операторов, возможен в любом месте основной программы, путём указания имени подпрограммы.

Существуют два вида подпрограмм:

  1. Процедуры

  2. Функции

Процедура служит для задания последовательности каких-либо действий (randomise, readln). Данные в/из процедуры передаются при помощи передаваемых параметров.

Функции так же служат для задания последовательностей действий, а главное - служат для вычисления некоторого значения (результата функции). Имя функции может служить как операнд в выражениях, где в момент выполнения программы вместо имени функции подставляется ее вычисленное значение.

В структуре подпрограмм необходимо наличие следующих компонентов:

  1. Заголовок

  2. Объявление (описание) локальных объектов (переменных, типов, меток, констант)

  3. Непосредственно операторы между begin ..end.

Структура подпрограмм (процедур и функций) одинакова и повторяет структуру основной программы.

Формальные параметры подпрограммы указывают, с какими аргументами следует обращаться к этой подпрограмме (количество аргументов, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка, разбитого на группы. Разделителем групп является знак точка с запятой (;). В каждую группу включаются параметры одного типа, принадлежащие к одной категории.

Все формальные параметры можно разбить на четыре категории:

  • параметры-значения;

  • параметры-переменные;

  • параметры-константы (используются только в версии 7.0);

  • параметры-процедуры и параметры-функции.

Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - его категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае объект основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. Например, нельзя писать

function Max( A: array[ 1..100 ] of real ): real;

Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

type tArr =array [ 1..100 ] of real;

function Max ( A: tArr ) : real;

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

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

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

Если параметров-значений одного типа несколько, их можно объединить в одну группу, перечислив их имена через запятую, а затем уже указать общий тип. Как отмечалось выше, отдельные группы параметров отделяются друг от друга точкой с запятой.

Пример.

procedure Inp ( Max, Min: real ; N: Word );

function Mult (X, Y: integer): real;

В качестве фактического параметра на месте параметра-значения при вызове подпрограммы может выступать любое выражение совместимого для присваивания типа, не содержащее файловую компоненту, например:

Inp(Abs (Z), - Abs (T), 2 * K);

M:=Mult(X + Y, X - Y);

MA:=MAX( B, 5 );

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

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

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

  1. Понятие рекурсии. Примеры рекурсивных функций.

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

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

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

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

Рекуррентные последовательности.

Элементы последовательности а1, а2, а2 образуют рекуррентную последовательность k-ого порядка, если заданы первые k-элементов: а1,а2,а3..аk и для любого числа n>k, элементы последовательности по формулам

Типо пример программы, которая вычисляет факториал числа (но я бы так решать не стала)

Program Rekurs;

Var

N : integer;

F : Longint;

Function RecFact(N:integer) : LongInt;

Begin

if N <= 1

then

ResFact := 1

else

ResFact := N*ResFact(N-1);

End;

Begin

writeln('Введите число N > ';

read(N);

F := RecFact(N);

writeln('Для числа ',N,' значение факториала равно ',F);

End.

  1. Понятие модуля в Pascal. Структура библиотечного модуля. Стандартный модуль CRT. Пример использования модуля.

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

Модули позволяют создавать личные библиотеки процедур и функций и строить программы практически любого размера.

Модуль в Турбо Паскале представляет собой отдельно хранимую и независимо компилируемую программную единицу.

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

Все программные элементы модуля можно разбить на две части:

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

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

В соответствии с этим модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией.

В общем случае модуль имеет следующую структуру:

unit <имя модуля>; {заголовок модуля}

interface

{ описание видимых программных элементов модуля }

{ описание скрытых программных элементов модуля }

begin

{ операторы инициализации элементов модуля }

end.

В частном случае модуль может не содержать части реализации и части инициализации, тогда структура модуля будет такой:

unit <имя модуля>; {заголовок модуля}

interface

{ описание видимых программных элементов модуля }

implementation

end.

В Турбо Паскале имеется большое количество стандартных подпрограмм и данных, объединённых в несколько стандартных модулей. Они позволяют упростить процесс написания программ, более полно использовать возможности компьютеров и операционной системы MS DOS.

Это следующие модули: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3, GRAPH3, STRINGS, WinDos. Модули GRAPH, TURBO3, GRAPH3 содержатся в одноимённых .TPU файлах, остальные обычно входят в состав библиотечного файла TURBO.TPL.

Все модули, за исключением SYSTEM становятся доступными в программе (подключаются к программе) только после указания их имён в списке, следующем за служебным символом USES. Например, USES CRT, DOS, GRAPH;.

Модуль SYSTEM доступен в любой программе, так как он подключается к любой программе автоматически (по умолчанию).

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