Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uchebnoe_posobie_Programirovanie.docx
Скачиваний:
5
Добавлен:
08.12.2018
Размер:
217.65 Кб
Скачать

8.4. Примеры программ, использующих множества.

Пример 1. Подсчет количества гласных букв в предложении.

Const

Glash =[‘a’,’e’,’и’,’о’,’у’,’ы’,’э’,’ю’,’я’,’А’,’Е’,’И’,’О’,’У’,’Ы’,’Э’,’Ю’,’Я’];

Var

s : string;

p,i : integer;

begin

write (‘Введите строку текста’); Readln (s);

p:=0;

for i:=1 to length(s) do

if s[i] in glash then inc(p);

writeln (‘В строке ‘,p,’ ‘гласных букв’);

end;

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

Program Lat;

Var

C, I, j : char;

Lb : set of ‘A’…’Z’;

Pt : set of ‘!’…’?’;

Begin

Lb:=[ ]; pt:=[ ]; {инициализация множеств}

Repeat

Read (c) ;

If c in [‘A’,…’Z’] then lb:=lb+[c] {формирование множества заглавных букв}

Else

If c in [‘:’,’,’,’;’,’-‘,’!’,’?,’.’] then pt:=pt+[c] ; {формирование множества препинания}

Until eoln; {логическая функция, если прочитана последняя литера текущей строки}

Writeln (‘латинские буквы:’ );

For i=’A’ to ‘Z’ do

If I in lb then write (i:2);

Writeln (‘знаки препинания:’ );

For i=’!’ to ‘?’ do

If I in pt then write (i:2);

End;

Пример 3. Программа подсчитывает число различных элементов в массиве.

Program Count1;

var

m:array [1…20] of integer; { массив целых чисел}

I,n : byte;

K :set of 1..50;

Begin

Randomize;

Writeln (‘Массив:’);

For i:=1 to 20 do

Begin

M[i]:=random(50);

writeln (m[i]:3)

End;

N:=0; k:=[ ];

For i:=1 to 20 do

Begin {не входит ли элемент массива в множество К}

If not (m[i] in k) then

Begin

Inc(n); k:=k+[m[i]] {включение элемента массива в множество}

End;

End;

Writeln (‘Число различных элементов массива =’,n);

End.

Достоинства множеств

  1. Можно проводить анализ однотипных выборок, значений или накапливать произвольные значения.

  2. Значения типа множество компактно кодируют множество из 256 элементов, занимая 32 байта.

Недостатки множеств

  1. Представляют ограниченный набор значений (256 элементов).

  2. Невозможность вывода на экран.

  3. Операции на множествах медленно выполняются.

Пример 4. Известен набор продуктов: хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В 3 магазина доставлены отдельные виды продуктов. Требуется построить множества А,В,С, которые содержат соответственно:

- продукты, имеющиеся одновременно во всех магазинах;

- продукты, имеющиеся по крайней мере в одном из магазинов;

- продукты, которых нет ни в одном магазине.

Program PROD;

Const

n=3; (количество магазинов)

Type

Product = (bread, butter, cheese, milk); ( Продукты)

Assort = set of product ; (Ассортимент продуктов, множество)

Shop = array [1…n] od assort; (Информация о продуктах в магазинах)

Var

M1: shop;

x : product;

a,b,c,xm1 : assort;

I,j,iw,m : integer;

Begin

For i:=1 to n do

begin

Xm1:=[ ];

writeln (‘Введи номера продуктов’ ,i:2,’-го магазина =’);

Repeat

Read (iw);

Case iw of

1: x:= bread;

2: x:= butter;

3: x:= cheese;

4: x:= milk

Else writeln (‘Номер продуктов 1…4);

end; (case)

xm1:=xm1+[x]; (наличие товаров в одном магазине)

until eoln; (repeat)

m1[i]:=xm1

end; (конец цикла по i-ому магазину)

a:=m1[1]; (Ассортимент 1-го магазина)

b:=[ ];

c:=[ bread.. milk];

for i:=1 to n do

begin

b:=b+m1[i]; (Хотя бы в одном)

a:=a*m1[i]; (Одновременно во всех)

C:=c-b; (Нет ни в одном)

End; (for)

For i:=1 to 3 do

Begin

Case I of

1: writeln(‘ Продукты имеются во всех магазинах’);

2 : writeln(‘Ассортимент продуктов’);

3: writeln(‘Продукты, которых нет ни в одном магазине’);

End; (case)

For x:= bread to milk do

If x in a then

Case x of

bread : writel‘ Хлеб’);

butter : write(‘Масло’);

cheese : write(‘Сыр’);

milk : write(‘Молоко’);

End; (case)

If i=1 then a:=b

else

a:=c;

Writeln

End;

End.

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

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

Затем строятся множества с использованием операций над множествами (пересечение, вычитание, объединение).

В конце программы вложенные циклы по i и x обеспечивают распечатку полученных множеств. Исполняется оператор CASE.

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