ЛР 3 Шайда ІПЗ 19

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 9

ЛАБОРАТОРНА РОБОТА № 3

Тема: Програмування з використанням множин.


Мета: використовувати отримані знання, щодо теорії множин, операцій над
множинами, та їх комп’ютерне подання.
Обладнання: IBM – сумісні ПК.
Програмне забезпечення: ОС Windows 7.
Хід роботи:
Завдання 1. Складіть алгоритм та програму, який як вхідні дані одержує
дві множини і визначає, чи рівні ці множини, чи є одна з них підмножиною
другої. Написати відповідну програму на одній з мов програмування.
Завдання 2. Складіть алгоритм та програму, який як вхідні дані одержує
множину і конструює список всіх можливих підмножин даної множини.
Написати відповідну програму на одній з мов програмування.
Завдання 3. Складіть алгоритм та програму, яка моделює операції над
множинами у графічному режимі:
A∪B
A∩B
A−B
A⊕B
Написати відповідну програму на одній з мов програмування.

Код програми:
Клас №1 LR_3_Shaida:
import java.util.*;

public class LR_3_Shaida {


public static void Part_I(){
System.out.println("первая часть: \n");

System.out.println("\nЗаполните множество А: ");


Set<Integer> setA = enterSet();

System.out.println("\nЗаполните множество В: ");


Set<Integer> setB = enterSet();

if(setA.equals(setB)){
System.out.println("Множество А равно множеству В");
System.out.println("Множество А является подмножеством
В");
System.out.println("Множество В является подмножеством
А");
return;
} else {
System.out.println("Множество А не равно множеству
В");
}
Iterator<Integer> valuesA = setA.iterator();

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
Iterator<Integer> valuesB = setB.iterator();
boolean tempAinB = false;
boolean tempBinA = false;

while(valuesA.hasNext()) {
if(setB.contains(valuesA.next()))
tempAinB = true;
else {
tempAinB = false;
break;
}
}
if(tempAinB)
System.out.println("Множество A является
подмножеством B");
else
System.out.println("Множество A не является
подмножеством B");

while(valuesB.hasNext()) {
if(setA.contains(valuesB.next())) {
tempBinA = true;
}
else {
tempBinA = false;
break;
}
}

if(tempBinA)
System.out.println("Множество В
является подмножеством А");
else
System.out.println("Множество В не
является подмножеством А");
}
public static Set<Integer> enterSet() {
Scanner scanner = new
Scanner(System.in);
String value = "";
Set<Integer> set = new HashSet<>();

System.out.println("Заполните
множество не повторяющимися целыми числами \n" +
"для завершения заполнения
множества введите \"end\"\n");

while (true) {
System.out.print("Введите значение
множества: ");
value = scanner.nextLine();

if(value.equals("end"))
break;

try {

int sizeSet = set.size();

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
set.add(Integer.parseInt(value));

if(sizeSet == set.size())
System.out.println("Такое число уже есть в множестве!
попробуйте снова =)");

} catch (NumberFormatException exception){


System.out.println("Это не целое число! попробуйте снова =)");
}
}

System.out.println("\
nЗаполнение множества завершено,
заполненное множество:");
System.out.println(set);

return set;
}

public static void Part_II(){


System.out.println("вторая
часть: ");

System.out.println("\
nЗаполните множество А: ");
Set<Integer> set =
enterSet();

ArrayList<Integer> list = new


ArrayList<>(set);

System.out.println("Подмножества, что
входят в заданное множество:");

int N = list.size();
for (int mask = 0; mask < (1
<< N); mask++) { //перебор масок
for (int j = 0; j < N; j+
+) { //перебор индексов массива
if((mask & (1 << j))
!= 0){ //поиск индекса в маске
System.out.print(list.get(j) + " ");
//вывод элемента
}
}
System.out.println();//перевод строки
для вывод следующего подмножества
}
}

public static void Part_III(){


System.out.println("третья часть:");

System.out.println("\nЗаполните множество А: ");


Set<Integer> setA = enterSet();

System.out.println("\nЗаполните множество В: ");


Set<Integer> setB = enterSet();

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
int answer = 0;
while(answer != 5) {
System.out.print("\nВыберите действие: " +
"\n1. Найти объединение множеств А и В" +
"\n2. Найти пересечение множеств А и В" +
"\n3. Найти разность множеств А и В" +
"\n4. Найти симетрическую разность множеств А и В" +
"\n5. ВЫХОД" +
"\nВеедите число в зависимости от вашего
выбора: ");
answer = Proverka.checkInt();

switch (answer) {
case 1:
AiliB(setA, setB);
break;
case 2:
AiB(setA, setB);
break;
case 3:
AminusB(setA,
setB);
break;
case 4:
simetrichnaiaRaznost(setA, setB);
break;
case 5:
System.out.println("Good bye! =)");
break;
default:
System.out.println("\nне найден
вариант действий, для введенного
вами числа" +
"\
nпопробуйте снова =)\n");
break;
}
}
}

public static void


AiliB(Set<Integer> setA,
Set<Integer> setB){
Set<Integer> setC = new
HashSet<Integer>();
setC.addAll(setA);
setC.addAll(setB);

System.out.println("\
nРезультат объединения множеств:");
System.out.println(setC);
}

public static void


AiB(Set<Integer> setA, Set<Integer>
setB){
Set<Integer> setC = new
HashSet<Integer>();
setC.addAll(setA);

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
setC.retainAll(setB);

System.out.println("\nРезультат пересечения множеств:");


System.out.println(setC);
}

public static void AminusB(Set<Integer>


setA, Set<Integer> setB){
Set<Integer> setC = new
HashSet<Integer>();
setC.addAll(setA);
setC.removeAll(setB);

System.out.println("\nРезультат разности
множеств:");
System.out.println(setC);
}
public static void
simetrichnaiaRaznost(Set<Integer> setA,
Set<Integer> setB){
Set<Integer> setC = new
HashSet<Integer>();
setC.addAll(setA);
setC.addAll(setB);
Set<Integer> tempSet = new
HashSet<>(setA);
tempSet.retainAll(setB);
setC.removeAll(tempSet);
System.out.println("\nРезультат
симетрической разности множеств:");
System.out.println(setC);
}
public static void main(String[] args) {
Part_I();
System.out.println("\
n------------------------------------\n");
Part_II();
System.out.println("\
n------------------------------------\n");
Part_III();
}
}
Клас №2 Proverka:
import java.util.Scanner;
public class Proverka {
private static final Scanner sc = new
Scanner(System.in);
// проверка целого числа
public static int checkInt() {
while (!sc.hasNextInt()) {
System.out.println("Введите
пожалуйста целое число! †(•̪●)†");
sc.nextLine();
}
return sc.nextInt();
}
// проверка целого числа с диапазоном
public static int checkRange(int a, int b) {
boolean temp = false;
String kva;
int answer = 0;

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
while (!temp) {
if (sc.hasNextInt()) {
kva = sc.nextLine();
if (Integer.parseInt(kva) >= a && Integer.parseInt(kva) <= b) {
temp = true;
answer = Integer.parseInt(kva);
}
else
System.out.println("Дядя, ты дурак? сказали ведь от " + a + "
до " + b + "! †(•̪●)†");
} else {
System.out.println("Это вообще не число, введите пожалуйста
число... †(•̪●)†");
sc.nextLine();
}
}
return answer;
}
// возвращает ответ пользователя (true\false)
public static boolean checkBoolean(String option1, String option2) {
boolean value = true;
String answer;
while (true) {
answer = sc.next();
if (answer.equals(option1))
break;
else
if (answer.equals(option2)) {
value = false;
break;
} else
System.out.println("Нужно ввести '" + option1 + "' или '" +
option2 + "'!");
}
return value;
}
}
Результат роботи програми:

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
Козін О.В. Арк.
Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
Козін О.В. Арк.
Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата
Відповіді на контрольні запитання:
1. Множина - це сукупність, зібрання деяких предметів будь-якої природи,
наприклад: множина учнів класу, множина цифр десяткової нумерації,
множина букв українського алфавіту, тощо.
2. Для позначення множин використовуються прописні літери латинського
алфавіту або фігурні дужки.
3. Множини називаються скінченними, якщо число їх елементів скінченне,
тобто існує натуральне число n, яке є числом елементів множини.
Множини називають нескінченними, якщо вони містять нескінченне число
елементів.
4. Порожня множина дає можливість оперувати будь-якою множиною без
попереднього застереження, існує вона чи ні.
5. Перша множина називається підмножиною другої множини, якщо кожний
елемент першої множини є елементом другої множини.
6. Символ ⊆ називається символом операції включення множин.
Символ ⊂ називається символом операції строгого включення множин.
Висновок: використала отримані знання, щодо теорії множин, операцій над
множинами, та їх комп’ютерним поданням.

Козін О.В. Арк.


Шайда В.Р. 03
1
Змн. Арк. № докум. Підпис Дата

You might also like