You are on page 1of 6

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

Тема: Розробка алгоритму побудови матриці заданого відношення


Мета: навчитися розробляти алгоритм та програму побудови матриці заданого
відношення
Обладнання: IBM – сумісні ПК.
Програмне забезпечення: ОС Windows 11.
Хід роботи:

Завдання 1. Розробити алгоритм побудови матриці заданого


відношення R на множині M={1, 2, 3, 4}

1. R = {(1,4), (2, 2), (2, 3), (2, 4), (3,2), (3, 3), (4, 1), (4, 2)}.
2. R = {(1,2), (2, 2), (2, 3), (2,4), (3, 2), (3, 3), (4, 2), (4,4)}.
3. R = {(1,1), (1,3), (2, 2), (2,4), (3,1); (3, 3), (4,2), (4,4)}.
4. R = {(1,1), (2, 2), (2, 3), (2,4), (3,1), (3, 3), (4, 1), (4,4)}.
5. R = {(1, 3), (1,4), (2,1), (1, 2), (3,1), (3,4), (4, 1)}.
Завдання 2. Нехай А – множина студентів університету, B - множина
книг у бібліотеці. Нехай задано відношення R1,R2 ⊆ A × B, такі, що (a, b) ∈
R1, якщо студент а згідно з навчальною програмою повинен під час навчання
прочитати книгу b, і (a, b) ∈ R2, якщо студент а під час навчання прочитав
книгу b. Необхідно розробити алгоритм знаходження відношень, що
одержуються в результаті виконання операцій
1. R1 ∪ R2 - (книги за програмою, які було прочитано під час навчання)
2. R1 ∩ R2 - (книги, що було задано, та ті, що було прочитано)
3. R1 ∖ R2- (книги, що були в навчальній программі, але не було
прочитано)
4. R2 ∪ R1 - (книги за програмою, які було прочитано під час навчання)
Код програми:
import java.util.ArrayList;
import java.util.Arrays;

public class LR_5 {


static int row; // count of row in matrix
static int col; // count of column in matrix

public static int[][] newMatrix(int[][] R1){


row = 0;
col = 0;

for(int[] ints: R1) {


if (row < ints[0])
row = ints[0];

if (col < ints[1])

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


Шайда В.Р. 05
1
Змн. Арк. № докум. Підпис Дата
col = ints[1];
}
return new int[row][col];
}

public static void Part_I(){


System.out.println("Часть 1:\n");

ArrayList<int[][]> listOfMatrix = new ArrayList<>();


listOfMatrix.add(new int[][] {{1,4}, {2,2}, {2,3}, {2,4}, {3,2}, {3,3},
{4,1}, {4,2}});
listOfMatrix.add(new int[][] {{1,2}, {2,2}, {2,3}, {2,4}, {3,2}, {3,3},
{4,2}, {4,4}});
listOfMatrix.add(new int[][] {{1,1}, {1,3}, {2,2}, {2,4}, {3,1}, {3,3},
{4,2}, {4,4}});
listOfMatrix.add(new int[][] {{1,1}, {2,2}, {2,3}, {2,4}, {3,1}, {3,3},
{4,1}, {4,4}});
listOfMatrix.add(new int[][] {{1,3}, {1,4}, {2,1}, {1,2}, {3,1}, {3,4},
{4,1}});

for(int[][] matrixR: listOfMatrix){


int[][] matrix = newMatrix(matrixR);
for(int[] ints: matrixR){
matrix[ints[0]-1][ints[1]-1] = 1;
}
System.out.println(Arrays.deepToString(matrixR) + " ->");
System.out.println(Arrays.deepToString(matrix) + "\n");
}
}
public static void Part_II(){
System.out.print("Введите количество студентов университета: ");
int countOfStudents = Proverka.checkNatural();
System.out.print("Введите количество книг в библиотеке: ");
int countOfBook = Proverka.checkNatural();
boolean[][] R1 = new boolean[countOfBook][countOfStudents];
System.out.println("\nТеперь введите, какие из этих книг были заданы
студентам для прочтения по учебной программе." +
"\n( 1 - книга была задана по ученой программе; 0 - книга не была
задана ");

for(int i = 1; i <= countOfStudents; i++) {


System.out.println("\nСтудент №" + i + ": ");

boolean[] kva = fillSet(countOfBook);


for(int j = 0; j < countOfBook; j++)
R1[j][i-1] = kva[j];
}

boolean[][] R2 = new boolean[countOfBook][countOfStudents];


System.out.println("\nBведите, какие из этих книг были прочитаны
студентами." +
"\n( 1 - книга была прочитана; 0 - книга не была прочитана ");

for(int i = 1; i <= countOfStudents; i++) {


System.out.println("Студент №" + i + ": ");

boolean[] kva = fillSet(countOfBook);


for(int j = 0; j < countOfBook; j++)
R2[j][i-1] = kva[j];
}

boolean[][] result = new boolean[countOfBook][countOfStudents];

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


Шайда В.Р. 05
1
Змн. Арк. № докум. Підпис Дата
for(int i = 0; i < countOfStudents; i++){
for(int j = 0; j < countOfBook; j++)
if(R1[j][i]|| R2[j][i])
result[j][i] = true;
}
System.out.println("\nМатрица книг, что были заданы или что были прочитаны
(R1 ∪ R2):");
System.out.println(Arrays.deepToString(result));

result = new boolean[countOfBook][countOfStudents];


for(int i = 0; i < countOfStudents; i++){
for(int j = 0; j < countOfBook; j++)
if(R1[j][i] && R2[j][i])
result[j][i] = true;
}
System.out.println("\nМатрица книг, что были заданы и что были прочитаны
(R1 ∩ R2):");
System.out.println(Arrays.deepToString(result));

result = new boolean[countOfBook][countOfStudents];


for(int i = 0; i < countOfStudents; i++){
for(int j = 0; j < countOfBook; j++)
if(R1[j][i] && !R2[j][i])
result[j][i] = true;
}
System.out.println("\nМатрица книг, что были заданы, но не были прочитаны
(R1 ∖ R2):");
System.out.println(Arrays.deepToString(result));}
// метод для заполнения множества
public static boolean[] fillSet(int sizeArray){
boolean[] set = new boolean[sizeArray];

for(int i = 1; i <= sizeArray; i++){


System.out.print("Книга №" + i + ": ");
set[i-1] = Proverka.checkBoolean("1", "0");}
return set;}
public static void main(String[] args) {
Part_I();
Part_II();}}
Результат роботи програми:

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


Шайда В.Р. 05
1
Змн. Арк. № докум. Підпис Дата
Козін О.В. Арк.
Шайда В.Р. 05
1
Змн. Арк. № докум. Підпис Дата
Відповіді на контрольні запитання:
1. Бінарне відношення - відношення між двома множинами A і B, тобто всяка
підмножина.
2. Відношення R (R ⊂ A × B) називають функціональним, якщо для кожного
x ∉ A переріз R по х містить не більше одного елемента y ∈ B (або один або
жодного!).
3. Бінарне відношення в множині X називається відношенням
еквівалентності, якщо виконуються такі властивості:
1) рефлективність (x~x)∀x ∈ X ;
2) симетричність (x~y → y~x)∀x, y ∈ X;
3) транзитивність (x~y ⋀y~z → x~z) ∀ x, y, z ∈ X .
4. Бінарне відношення в множині називається відношенням нестрогого
порядку, якщо воно:
1) рефлексивне ;
2) антисиметричне ;
3) транзитивне .

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


Шайда В.Р. 05
1
Змн. Арк. № докум. Підпис Дата
5. Бінарне відношення в множині називається відношенням строгого
порядку, якщо воно:
1) асиметричне ;
2) транзитивне .
6. Способи задання відношень:
1) Множинний спосіб. Оскільки відношення є множиною, елементами якої є
впорядковані пари, то його можна задати за допомогою способів задання
множин.
2) Стрілочний спосіб. Елементи області визначення і множини значень
відношення зображують точками площини напроти одна від одної, а
впорядковані пари зображують стрілками, спрямованими від відповідних
точок області визначення до точок множини значень.
3) Табличний спосіб. Таблиця відношення складається з двох рядків і
стількох стовпців, скільки елементів в області визначення. Під кожним
елементом області визначення записують переріз відношення за цим
елементом.
4) Матричний спосіб. Матриця відношення має стільки рядків, скільки
елементів у області визначення, і стільки стовпців, скільки елементів у
множині значень.
5) Графічний спосіб. Цей спосіб передбачає побудову графіка та графа
відношення. Для побудови графіка у першому координатному куті на
горизонтальній осі відкладають точками елементи області визначення, а на
вертикальній – точки множини значень. Кожну впорядковану пару
зображують точкою або зірочкою у цьому координатному куті.

Висновок: навчилася розробляти алгоритм та програму побудови матриці


заданого відношення

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


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

You might also like