Варианты индивидуальных заданий
ЛАБОРАТОРНАЯ РАБОТА N 9
Тема: “Сложный тип данных – множества”
Цель работы
1. Получение навыков в задании переменных типа множество и организации ввода и вывода
данных типа множество.
2. Получение практических навыков в выполнении операций над множествами.
Краткие сведения из теории
Объявление переменной типа множества
В математике под множеством понимается некоторый набор элементов. Например,
множество фигур на плоскости (прямоугольник, круг, ромб, квадрат).
К множествам применимы следующие операции:
1. Объединение множеств ( C = A ∪ B ). Каждый элемент множества C является элементом
либо множества A, либо множества B.
2. Пересечение множеств ( C = A ∩ B ). Каждый элемент множества C является элементом
множеств A и B одновременно.
3. Разность двух множеств ( C = A \ B ). Каждый элемент множества C является элементом
множества A, но не является элементом множества B.
Например:
а) { круг, ромб } ∪ { круг, квадрат } = {круг, ромб, квадрат};
б) { круг} ∩ { круг, ромб, квадрат } = { круг };
в) { круг, ромб, квадрат } \ { круг, квадрат } = { ромб }.
Под множеством в языке Турбо - Паскаль понимают ограниченный, неупорядоченный набор
различных элементов одинакового типа.
Множественный тип задается с помощью двух служебных слов SET и OF, после которых
указывается базовый тип. В качестве базового типа можно использовать следующие типы:
|
|
INTEGER, BYTE, CHAR, перечислимый и ограниченный.
При определении множественных типов существует два ограничения:
1) вещественный тип в качестве базового в множествах использовать нельзя;
2) число элементов в множестве определяется каждой конкретной реализацией ЭВМ.
Обычно число элементов колеблется между 64 и 256 ( для Турбо - Паскаля - 256). Такая
зависимость приводит к потере переносимости программ, обладающих этим типом, с
машины на машину.
Множества объявляются либо в разделе описания переменных VAR, либо в разделе
описании типов TYPE. Объявление множества в разделе описания переменных имеет вид:
VAR
< имя множества > : SET OF < базовый тип >;
Например:
Var
god : set of 1900..2000;
symbol : set of char;
Объявление __________множества с использованием раздела описания типов имеет вид:
Type
< имя типа > = set of < базовый тип >;
Var
< имя множества > : имя типа;
Например:
Type
god = set of 1900..2000;
symbol = ( 'A'..'Z');
Var
66
g : god;
s : set of symbol;
Значения переменных и констант множества задаются в разделе операторов с помощью
конструктора. Конструктор представляет собой список элементов базового типа,
заключенный в квадратные скобки, который затем можно присвоить переменной, или
обработать.
|
|
Конструктор множества можно рассматривать как константу типа множества.
Например :
figura := [romb];
или
figura := [krug,romb,kvadrat];
simv := ['A','B','C'];
M1 := [1,3,5,10];
M2 := []; { пустое множество }
Операции над множествами
В языке Турбо-Паскаль имеются следующие группы операций над множествами:
1) объединение, пересечение, вычитание множеств;
2) проверка принадлежности элемента множеству;
3) проверка на равенство и неравенство множеств;
4) проверка на принадлежность одного множества другому.
Операции объединения, пересечения и вычитания являются традиционными действиями над
множествами и обозначаются символами '+', '*', '-' соответственно. Например:
[1,2] + [3,4] = [1,2,3,4];
[1..10] + [5..15] = [1..15];
[1..10] * [5..15] = [5..10];
[1,2] * [3,4] = [];
[1..10] - [5..15] = [1..4];
Проверка принадлежности множеству - это логическая операция, которая обозначается
служебным словом IN. Правый операнд должен быть множеством, левый - значением
базового типа множества. Операция возвращает TRUE, если значение входит в множество, и
FALSE в противном случае. Например:
2 in [1..10,12]; { имеет значение true}
5 in [1,2,7,10]; { имеет значение false}
Операцию проверки принадлежности удобно использовать для исключения более сложных
проверок, например, оператор вида
|
|
if (symb = 'a') or (symb = 'b') or (symb = 'x') or (symb ='y') then s;
может быть переписан в более компактной форме
if symb in ['a','b','x','y'] then s;.
Второй вариант эффективен с точки зрения быстродействия.
Проверка на равенство, неравенство и включение множеств - это бинарные логические
операции, которые обозначаются следующими символами:
= равенство (совпадение) двух множеств;
<> неравенство множеств;
<= проверка на вхождение множества из левого операнда в множество из правого операнда;
>= проверка на вхождение множества из правого операнда в множество из левого операнда.
Все эти операции вырабатывают логическое значение TRUE или FALSE в зависимости от
успеха проверки. Например:
[1,2,3] = [1,2] - false;
[1,2,3] >= [1,2] - true;
[S] <= [1..10] - true,
если S - целое число из диапазона 1..10;
[1,2,3] <> [1,2,2] - true.
67
Синонимом логической операции над множествами является слово "компаратор".
Набор операций над множествами в языке Турбо-Паскаль не содержит одной практически
важной операции - выборки значений из множества (или близко связанного с ней средства
циклического перебора значений множества). Поэтому при необходимости подобных
действий приходится организовывать цикл по всему диапазону значений базового типа,
|
|
проверяя на каждой итерации принадлежность очередного значения данному множеству,
например:
Var
symbols : set of char;
s : char;
Begin
. . .
For s := chr(0) to chr(255) do
if s in symbols then
< действия с переменной s >
. . .
Контрольные вопросы
1. Что понимается под множеством?
2. Какие вы знаете операции над множесвами в математике?
3. Как записываются операции над множествами в языке Турбо-Паскаль?
4. Как задаются множества на языке Турбо-Паскаль?
5. Что такое пустое множество и как оно задается?
6. Как организовать вывод элементов множества?
Задание к работе
1. Выполнить задание А.
2. Выполнить задание Б.
Методические указания
1. При выполнении индивидуального задания А необходимо:
a) ознакомиться с конечным и упорядоченным множеством символов, определенным на
используемой для выполнения задания ЭВМ;
b) составить программу для конкретного варианта, работающую для произвольного
набора символов.
c) входная строка символов может быть длиннее строки экрана терминала, при этом
программа работает не с функцией EOLN, а с признаком конца строки, который
задается программистом.
2. При выполнении индивидуального задания Б необходимо учесть приемы
программирования, использованные в приведенной ниже программе ASMAG.
Известен набор продуктов - хлеб, масло, сыр, молоко, имеющихся в ассортименте
магазинов. В три магазина доставлены отдельные виды этих продуктов. Требуется
построить множества A, B, C, которые содержат соответственно:
- продукты, имеющиеся одновременно во всех магазинах;
- продукты, имеющиеся по крайней мере в одном из магазинов;
- продукты, которых нет ни в одном из магазинов.
Program ASMAG;
Const N=3;
Type
product=(bread,butter,cheese,milk); {задается список объектов (продуктов),
определяющий базовый тип PRODUCT}
assort = set of product; {на базовом типе PRODUCT определя-ется множественный тип
ASSORT}
68
magazin = array [1..N] of assort; {информация о наличии продуктов во всех
магазинах задается как массив множеств}
Var
m1 : magazin; x : product;
a,b,c, xm1 : assort;
i,j,iw,m : integer;
Begin
for i := 1 to N do {ввод исходной информации}
begin
xm1 := [];
writeln (' введите номера продуктов',i : '-го магазина =');
repeat {в цикле REPEAT формируется множество XM1,
характеризующее наличие товаров в одном магазине.}
read(iw);
case iw of
1: x := bread;
2: x := butter;
3: x := cheese;
4: x := milk
end;
xm1 := xm1 + [x];
until eoln;
m1[i] := xm; {информация о наличии товаров записывается в массив M1}
end;
for i := 1 to 3 do {формирование множеств A,B,C и их распечатка}
begin
case i of
1: writeln('продукты, имеющиеся одновременно во
всех магазинах');
2: writeln('ассортимент продуктов');
3: writeln('продукты, которых нет ни в одном магазине')
end;
for x := bread to milk do
if x IN a then
case x of
bread: write('хлеб');
butter: write('масло');
cheese: write('сыр');
milk: write('молоко')
end;
if i = 1 then
a := b
else
a := c;
writeln
end
end.
Содержание отчета
1. Титульный лист.
2. Словесная постановка задачи.
3. Графический или текстуальный алгоритм решения задачи.
69
4. Листинг программы.
5. Контрольный тест и результаты тестирования программы.
6. Инструкция по эксплуатации программы.
7. Ответы на контрольные вопросы.
Варианты индивидуальных заданий
Задание А
Дана непустая последовательность символов. Требуется построить и напечатать
множество, элементами которого являются символы, встречающиеся в
последовательности индивидуального варианта:
Вариант Последовательность символов
1 Буквы от 'A' до 'F' и от 'X' до 'Z';
2 Цифры от '5' до '9' и знаки арифметических операций;
4 Буквы от 'T до 'X' и цифры от '1' до '4';
5 Знаки препинания и операций отношения;
6 Знаки арифметических операций и буквы от 'E' до 'N';
7 Буквы от 'A' до 'Z' и знаки препинания;
8 Знаки операций отношения;
9 Цифры от '0' до '9';
10 Знаки арифметических операций и операций отношения.
Задание Б
1. Даны два конечных множества А и В, элементами которых могут быть любые целые
числа в диапазоне от 1 до 30. Найти прямое произведение этих множеств и вывести его на
экран.
2. Даны два прямоугольника. Множества А и В - это множества точек, принадлежащих
соответствующим прямоугольникам. Координаты точек - это натуральные числа от 1 до 10.
Определить пересекаются ли данные прямоугольники, если пересекаются, то вывести на
экран их общие точки.
3. Даны два конечных множества Х и У, состоящие из целых чисел. Определить выполняется
ли равенство: (A∪B)\B=A.
4. Даны два конечных множества Х и У, состоящие из целых чисел. Определить выполняется
ли равенство: (A\B) ∪ (B\A)=(A∪B) \ (A∩B).
5. Пусть А, В, С - конечные множества, такие что В ⊆ А ⊆ С. Найдите множество Х,
удовлетворяющее условиям А ∩ Х =В и А ∪ Х =С.
6. Пусть А, В, С - конечные множества, такие что В ⊆ А, А ∩ С= ∅. Найдите множество Х,
удовлетворяющее условиям А \ Х=В и Х \ А =С.
7. Даны следующие множества А={1, 2, 3}, B={2, 3, 5, 4}, U={0, 1, 2, 3, .. ,9 }. Найти и
вывести на экран A ∪ B, , A \ B, B \ A, U \ A.
8. Даны два конечных множества A и B, состоящие из целых чисел. Найти и вывести на
экран (A ∪ B) \ (A ∩ B).
9. Даны два множества A={1, 2}, B={3, 4, 5}. Выведите на экран элементы множеств А × B,
B × A.
10. Пусть А={b, o}. Перечислите элементы множеств A3 и А4.
__
Дата добавления: 2021-06-02; просмотров: 83; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!