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

Множества

Множества - это наборы однотипных логически связанных друг с другом объектов. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей.

Описание типа множества имеет вид:

<имя типа> = SET OF <баз.тип>

Здесь <имя типа> - правильный идентификатор;

SET, OF - зарезервированные слова (множество, из);

<баз.тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER, LONGINT.

Над множествами определены следующие операции:

* пересечение множеств; результат содержит элементы, общие для обоих множеств

+ объединение множеств; результат содержит элементы первого множества, дополненные недостающими элементами из второго множества:

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

= проверка эквивалентности; возвращает TRUE, если оба множества эквивалентны;

<> проверка неэквивалентности; возвращает TRUE, если оба множества неэквивалентны;

<= проверка вхождения; возвращает TRUE, если первое множество включено во второе;

>= проверка вхождения; возвращает TRUE, если второе множество включено в первое;

IN проверка принадлежности; в этой бинарной операции первый элемент - выражение, а второй - множество одного и того же типа; возвращает TRUE , если выражение имеет значение, принадлежащее множеству:

3 in s6 возвращает TRUE;

2*2 in s1 возвращает FALSE.

Дополнительно к этим операциям можно использовать две процедуры. INCLUDE - включает новый элемент во множество. Обращение к процедуре:

INCLUDE (S,I)

Здесь S - множество, состоящее из элементов базового типа TSetBase;

I - элемент типа TSetBase, который необходимо включить во множество.

EXCLUDE - исключает элемент из множества. Обращение:

EXCLUDE(S,I)

Параметры обращения - такие же, как у процедуры INCLUDE.

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

program bukvy;

uses crt;

const

glasn=['а','е','и','о','у','ы','э','ю','я'];

soglas=['б','в','г','д','ж','з','й','л','м',

'н','р','к','п','с','т','ф','х','ц','ч','ш','щ'];

var

st: string;

g,s,i:integer;

begin

write('Введите строку> '); readln(st);

g:=0; s:=0;

for i:= 1 to length(st) do

if st[i] in glasn then inc (g) else if st[i] in soglas then inc(s);

if g> s then writeln('Гласных больше')

else if g< s then writeln('Согласных больше')

else writeln('Согласных и гласных букв поровну');

end.

20. Дайте определение записи. Напишите структуру объявления записи в языке программирования Паскаль (Delphi). Приведите пример объявления записи. Приведите пример обращения к отдельным полям записи.

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

Запись

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

Структура объявления типа записи такова:

<имя типа> = RECORD

<сп.полей>

END

Здесь <имя типа> - правильный идентификатор;

RECORD, END - зарезервированные слова (запись,конец); <сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

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

type

BirthDay = record

day,month : Byte;

year : Word

end;

var

a,b : Birthday;

.......

В этом примере тип BIRTHDAY (день рождения) есть запись с полями DAY, MONTH и YEAR (день, месяц и год); переменные А и В содержат записи типа BIRTHDAY.

Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа, например

а := b;

К каждому из компонентов записи можно получить доступ, если использовать составное имя, т.е. указать имя переменной, затем точку и имя поля:

а.day := 27;

b.year := 1939;

Чтобы упростить доступ к полям записи, используется оператор присоединения WITH:

WITH<переменная>DO<оператор>

Здесь WITH, DO - ключевые слова (с, делать);

<переменная> - имя переменной типа запись, за которым, возможно, следует список вложенных полей; <оператор> - любой оператор Турбо Паскаля.

Например:

with c.bd do month := 9;

Это эквивалентно

c.bd.month := 9;

program my;

type

tStudent = record

Nomer : integer;

FIO : string[100];

Ot : byte;

end;

var

Student : array[1..25] of tStudent;

i : integer;

begin

for i:=1 to 25 do

begin

write('Enter Nomer, FIO, Ot : ');

readln(Student[i].Nomer, Student[i].FIO, Student[i].Ot);

end;

end.