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

Множества

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

Операции:

Математическое

обозначение

Обозначение в

Pascal

Действие

Пример

*

Пересечение

C:=A*B

+

Объединение

C:=A+B

\

-

Разность

C:=A-B

in

Принадлежность

if x in A then

<=

>=

Явл.. подмнож

Вкл. подмнож

A<=B

A>=B

Задача:программа «магазин»

Uses

Crt:

Const

n=3;

Type

pr=(hleb, moloko ,maslo,sir);

as=set of pr;

mag=array[1..n]of as;

Var

m1:mag;

x:pr;

a,b,c,mx:as;

i,j,im,m:integer;

BEGIN

ClrScr;

Writeln(‘соответствие продуктов номеров’);

Writeln(‘1-хлеб);

Writeln(‘2-сыр);

Writeln(‘3-масло);

Writeln(‘4-молоко’);

For i:=1 to n do

Begin

Writeln(‘введите номер продукта’,i, ‘магазина’);

Repeat

Readln(im);

Case im of

1:x:=hleb;

2:x:= moloko ;

3:x:=maslo;

4:x:=sir;

End;

mx:=mx+[x];

m1[i]:=mx;

Until EoLn;

End;

a:=m1[1];

b:=[];

c:=[ hleb, moloko ,maslo,sir];

for j:=1 to n do;

Begin

b:=b+m1[j];

a:=a+m1[j];

c:=a-b;

End;

for i:=1 to 3 do;

Begin

Case i of

1: Writeln(‘есть в кажд.магаз’);

2:Writeln(‘есть хоть в одном.магаз’);

3:Writeln(‘нет ни в одном.магаз’);

End;

If i=2 then a:=b;

If i:3 then a:=c;

For i:= hleb to moloko do

If x in a theh

Case a of

hleb:write(‘хлеб’);

maslo: write(‘масло’);

sir: write(’сыр’);

moloko: write(‘молоко’);

End;

Writeln;

End;

END.

{

МНОЖЕСТВА Понятие множества в языке ПАСКАЛЬ основывается на математическом представлении о множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа использует ся перечисляемый или интервальный тип данных. Тип элементов, состав ляющих множество, называется базовым типом. Множественный тип описывается с помощью служебных слов Set of, например: type M= Set of B; Здесь М - множественный тип, В - базовый тип. Пример описания переменной множественного типа: type M= Set of 'A'..'D'; var MS: M; Принадлежность переменных к множественному типу может быть опреде лена прямо в разделе описания переменных: var C: Set of 0..7; Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базово го типа, разделенных запятыми, например: ['A', 'C'] [0, 2, 7] [3, 7, 11..14]. Константа вида [ ] означает пустое подмножество. Множество включает в себя набор элементов базового типа, все подм ножества данного множества, а также пустое подмножество. Если базовый тип, на котором строится множество, имеет К элементов, то число подм ножеств, входящих в это множество, равно 2 в степени К. Пусть имеется переменная Р интервального типа: var P: 1..3; Эта переменная может принимать три различных значения - либо 1, либо 2, либо 3. Переменная Т множественного типа var T: Set of 1..3; может принимать восемь различных значений: [ ] [1,2] [1] [1,3] [2] [2,3] [3] [1,2,3] Порядок перечисления элементов базового типа в константах безразличен. Значение переменной множественного типа может быть задано конструкцией вида [T], где T - переменная базового типа. К переменным и константам множественного типа применимы операции присваивания(:=), объединения(+), пересечения(*) и вычитания(-): ['A','B'] + ['A','D'] даст ['A','B','D'] ['A'] * ['A','B','C'] даст ['A'] ['A','B','C'] - ['A','B'] даст ['C']. Результат выполнения этих операций есть величина множественного типа. К множественным величинам применимы операции: тождественность (=), нетождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип, например: ['A','B'] = ['A','C'] даст FALSE ['A','B'] <> ['A','C'] даст TRUE ['B'] <= ['B','C'] даст TRUE ['C','D'] >= ['A'] даст FALSE. Кроме этих операций для работы с величинами множественного типа в языке ПАСКАЛЬ используется операция in проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Ре зультат выполнения этой операции - булевский. Операция проверки при надлежности элемента множеству часто используется вместо операций от ношения, например: A in ['A', 'B'] даст TRUE, 2 in [1, 3, 6] даст FALSE. При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд. Например, множество ['A','B','C','D'] представлено в памяти ЭВМ битовой строкой 1 1 1 1. Подмножества этого множества представлены строками: ['A','B','D'] 1 1 0 1 ['B','C'] 0 1 1 0 ['D'] 0 0 0 1 Величины множественного типа не могут быть элементами списка ввода - вывода. В каждой конкретной реализации транслятора с языка ПАСКАЛЬ коли чество элементов базового типа, на котором строится множество, ограничено. В TURBO PASCAL количество базовых элементов не должно превы шать 256. Инициализация величин множественного типа производится с помощью типизированных констант: const seLit: Set of 'A'..'D'= []; Проиллюстрируем применение данных множественного типа на примере. Пример. Составить программу, которая вырабатывает и выводит на экран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36". Для заполнения каждой карточки спортлото необходимо получить набор из пяти псевдослучайных чисел. К этим числам предъявляются два требо вания: -числа должны находиться в диапазоне 1..36; -числа не должны повторяться. Program Lotto; var nb, k: Set of 1..36; kol, l, i, n: Integer; begin Randomize; WriteLn('ВВЕДИ kol'); ReadLn(kol); nb:=[1..36]; for i:=1 to kol do begin k:=[]; for l:=1 to 5 do begin repeat n:=Random(36) until (n in nb) and not (n in k); k:=k+[n]; Write(n:4) end; WriteLn end end.

}