Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_Конспект лекций.doc
Скачиваний:
41
Добавлен:
27.05.2015
Размер:
1.39 Mб
Скачать

10.2 Множества

Множество относится к структурным типам данных. Тип «множество» задаёт интервал значений, который является множеством всех подмножеств базового типа. Базовый тип – это перечислимый тип, кроме word, integer, longint. Синтаксис определения типа множества:

<имя типа> = set of <базовый тип>;

Примеры:

Type

Tdigit = set of 0 .. 9;

Tsimv = set of 'A' .. 'Z' ;

Var

digit : Tdigit ;

simv : Tsimv;

Если переменная типа «множество» описана как set of 1 .. 3, то она может принимать следующие значения: (1, 2, 3), (1, 2), (1, 3), (2, 3), (1), (2), (3), ().

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

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

Примеры:

Const

alpha = ['A' .. 'Z' , 'a' .. 'z' ];

empty = [] ;

digits = [ 0 .. 9] ;

Зарезервированное слово in для определения принадлежности элемента множеству:

if ch in alpha then …

В этом операторе выполняется проверка принадлежности элемента ch множеству alpha. Часто это гораздо проще, чем многократно сравнивать ch с некоторыми элементами.

Множества языка Object Pascal обладают свойствами математических множеств. Над ними можно выполнять те же операции. Если S1 и S2 – константы или переменные множественного типа, то S1+ S2 будет их объединением, S1*S2 - пересечением, S1-S2 – разностью. Операции отношений = (равенство), <> (неравенство), <= (первое является подмножеством второго), >= (второе является подмножеством первого) к множествам применяются, а отношения строго включения типа «<» или «>» - не применяются.

Чтобы добавить в множество какой-либо элемент, можно добавить множество, состоящее из единственного элемента. Либо использовать процедуру include(S,a) , где S – множество, в которое добавляем, a – добавляемый элемент. Имеется и обратная процедура – exclude(S , a) - для исключения элемента из множества. Здесь параметры S и a имеют тот же смысл.

Пример:

program p10_2;

var

S: set of 'A' .. 'Z' ;

ch: char;

Begin

S := [ ];

ch := 'A';

repeat

S := S+[ch] ;

Inc(ch);

Until ch >= 'Z' ;

……………………..

В этом примере в цикле заполняется множество S (изначально пустое) символами английского алфавита.

11 Пользовательские процедуры и функции

В лекции 5 мы уже говорили об использовании стандартных процедур и функций. Но язык Object Pascal позволяет программисту создавать собственные подпрограммы (функции и процедуры). Их описание располагается в описательной части программы и начинается с заголовка.

11.1 Описание функции и процедуры

Заголовок функции записывается следующим образом:

Function <идентификатор функции> (<списки

параметров>) : <тип значения функции>;

Заголовок же процедуры записывается несколько иначе:

procedure <идентификатор процедуры>(<списки

параметров>);

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

Примеры заголовков функций и процедур:

function Chr(X: Byte) : Char;

procedure Delay (MS: Word) ;

function Copy(S: String; Index: Integer; Count: Integer) : String;

procedure GetDate(var Year, Month, Day,

DayOfWeek: Word);

Отметим, что списки параметров в заголовках процедур могут отсутствовать. Пример:

procedure NoSound;

Структура процедур и функций почти повторяет структуру программы. Например, описание процедуры имеет вид:

procedure <идентификатор процедуры> ( <списки параметров>) ;

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

type <раздел описания типов>

var <раздел описания переменных>

label <раздел описания меток>

<раздел описания процедур и функций>

begin

<тело процедуры - операторный_блок>

end;

и описание функции:

function <идентификатор процедуры> ( <списки параметров>) :

<тип значения функции> ;

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

type <раздел описания типов>

var <раздел описания переменных>

label <раздел описания меток>

<раздел описания процедур и функций>

begin

<тело процедуры - операторный блок>

end;

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

Function Sum(A, B : real) : real;{ Описание функции суммирования }

Var S : real;

Begin

S:= A+B;

Sum:= S; { Присвоение идентификатору функции значения }

End;

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

p:=gradf(x); { gradf - идентификатор функции}

t:=2*grod(w)-7; { grod - идентификатор функции}

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

Proced1(А,В,С); { оператор вызова процедуры Proced1 }

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