Смекни!
smekni.com

Пасьянс "Три пика" (стр. 3 из 4)

1.2.1 Что такое подпрограмма.

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

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

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

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

В языке программирования TurboPascal приняты два вида подпрограмм: процедурыи функции, которые мы рассмотрим.

1.2.2 Описание процедуры.

Структура процедуры повторяет структуру программы – в ней также есть заголовок, раздел описаний и тело. Начинается процедура с зарезервированного слова PROCEDURE, за которым через пробел следует имя процедуры. Строка заголовка должна обязательно завершаться точкой с запятой. Затем идет раздел описаний процедуры. После раздела описаний процедуры следует ее тело. Тело процедуры содержит последовательность операторов, заключенных в операторные скобки (представляющие собой пару зарезервированных слов BEGIN … END).

1.2.3 Описание функции.

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

Кстати, в отличие от процедур, активизируемых с помощью оператора вызова (включающего имя процедуры и, может быть, фактические параметры), имя функции должно упоминаться в выражении. У функции (в отличие от процедуры) имеются и другие особенности. Например, в результате использования функции возвращается некоторое значение. Тип возвращаемого значения указывается в описании функции (в заголовке). Если имя используется только для ее вызова, то с именем функции ассоциируется некоторое возвращаемое значение. Чем еще функции отличаются от процедур? Поскольку функция должна возвращать некоторое значение, в ее теле обязательно должен присутствовать оператор присваивания, в правой части которого указано имя функции.

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

1.3 Модули.

1.3.1 Описание модулей.

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

Модуль состоит из заголовка, интерфейсной части, исполнительной части и секции инициализации.

Заголовок модуля похож на заголовок программы, однако вместо слова program ставится зарезервированное слово unit.

Модуль должен находится в файле, имя которого совпадает с именем в заголовке, файл должен иметь расширение .pas.

Интерфейсная часть служит для взаимодействия основной программы с модулем. Она начинается с зарезервированного слова interface. В ней должны быть указаны константы, типы данных, переменные, процедуры и функции, которые может использовать основная программа, вызывающая этот модуль. Если модуль использует еще какие-то модули, то они должны быть указаны в интерфейсной части следующим образом: пишется зарезервированное слово uses, затем перечисляются необходимые модули (заметим, что так же обозначаются и модули в разделе описания основной программы). Цепочка используемых модулей может быть сколь угодно длинной, однако она не может содержать циклы. Например, допустимацепочка:

unit A;

uses B,C;

...

end.

unit B;

uses C,D;

...

end.

Ацепочка

unit A;

uses B;

...

end.

unit B;

uses A;

...

end.

недопустима, поскольку она содержит цикл AusesBusesA.

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

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

Иногда при вызове модуля следует произвести некоторые действия, например инициализировать какие-либо переменные, установить какие-либо связи и т.д. Все эти действия указываются в секции инициализации, которая выглядит, как обычное тело программы: между словами begin и end с точкой находятся операторы. Если при вызове модуля никаких подобных действий производить не нужно, то секция инициализации состоит лишь из слова end с точкой.

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

Рассмотрим теперь модули, которые поставляются в стандартном комплексе TurboPascal, но функции и процедуры которых не являются стандартными.

1.3.2 Модуль CRT.

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

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

В текстовом режиме весь экран разбивается на строки (их, как правило, 25), а каждая строка – на отдельные позиции (их обычно по 80 в каждой строке) находится в левом верхнем углу экрана.

1.3.2 Модуль DOS.

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

1.3.3 Модуль GRAPH.

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

Запустить программу, использующую модуль GRAPH, без графического драйвера (одного или нескольких – это файла с расширением .BGI) не удастся. Указанные драйверы не входят в состав модуля, но поставляются с TurboPascal (они содержаться в каталоге BGI). А если в программе используются векторные шрифты, в дополнение е драйверам потребуются также файлы шрифтов (файлы с расширением .CHR).


2. Решение задачи.

2.1 Структурная схема программы.

Итак, представим схему программ.

Programxxx;{заголовок необязателен}

Const

раздел описания констант

Label

Раздел описания меток

Type

Раздел описания типов

Var

Раздел описания переменных

Описания подпрограмм

Begin

Тело программы

End.

В первой строке схемы находится заголовок программы. Заголовок начинается зарезервированным словом PROGRAM, за которым следует имя программы, которое ей было присвоено при создании. Завершается заголовок точкой с запятой. В TurboPascal заголовок не является обязательным элементом программы.

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

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

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