Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
168 / 8 / 1
Регистрация: 15.11.2018
Сообщений: 256

Как сделать пересечение и разность множеств?

28.12.2019, 16:12. Показов 4253. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не могу понять (и с отладчиком и без) почему рациональное число 1/1 не содержится в множестве?
И как сделать пересечение и разность множеств? (пересечение я попытался сделать через retainall(), но это не то)
Класс "Рациональное число"
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
public class Rational implements Comparable<Rational> {
    private int n, d;
 
    
    //@param n - целое
    public Rational(int n) { 
        setValue(n); 
        }
    /**
     * @param n - числитель
     * @param d - знаменатель
    */
    public Rational(int n, int d) throws IllegalArgumentException {
        setValue(n, d);
    }
    public Rational(Rational f) {
        setValue(f);
    }
    
    public int getNumerator() {
        return n; 
        }
    public int getDenominator() {
        return d; 
        }
    
    public void setNumerator(int n) {
        setValue(n, this.d); 
        }
    public void setDenominator(int d) {
        setValue(this.n, d);
        }
    
    //Новая дробь из целого числа
    public void setValue(int n) {
        this.n = n; this.d = 1;
        }
    // Новая дробь из числиетля и знаменателя
    public void setValue(int n, int d) throws IllegalArgumentException {
        if (d == 0)
            throw new IllegalArgumentException("Ошибка: Знаменатель не может быть равен 0");
        this.n = n;
        this.d = d;
        reduce();
    }
    public void setValue(Rational f) {
        this.n = f.n; 
        this.d = f.d; 
        }
    
    //Сокращение
    private void reduce() {
        int gcd = Arithmetics.gcd(n, d);
        n /= gcd;
        d /= gcd;
        if (d < 0) {
            d *= -1; 
            n *= -1; 
        }
    }
    
    //Сложение
    private void add(int n, int d) {
        this.n = this.n * d + n * this.d;
        this.d *= d;
        reduce();
    }
    //Вычитание
    private void substract(int n, int d) {
        add(n * -1, d);
    }
    //Умножение
    private void multiply(int n, int d) {
        this.n *= n;
        this.d *= d;
        reduce();
    }
    //Деление
    private void divide(int n, int d) {
        this.n *= d;
        this.d *= n;
        reduce();
    }
    
    //Сложение с целым числом
    public void add(int n) {
        add(n, 1);
    }
    //Прибавить другую дробь
    public void add(Rational f) {
        add(f.n, f.d);
    }
    
    //Вычитание с целым числом
    public void substract(int n) {
        add(n * -1); 
        }
    //Отнять другую дробь
    public void substract(Rational f) {
        substract(f.n, f.d);
    }
    
    //Умножение с целым числом
    public void multiply(int n) {
        multiply(n, 1);
    }
    //Умножение с другой дробью
    public void multiply(Rational f) {
        multiply(f.n, f.d);
    }
    
    //Деление с целым числом
    public void divide(int n) throws ArithmeticException {
                if (n == 0) throw new ArithmeticException("Ошибка: Деление на 0");
        divide(n, 1);
    }
    //Деление с другой дробью
    public void divide(Rational f) throws ArithmeticException {
        if (f.n == 0) throw new ArithmeticException("Ошибка: Деление на 0");
        divide(f.n, f.d);
    }
    
    //Сравнить дробь на равенство с другой дробью 
    public boolean equals(Rational f) {
        return (n == f.n && d == f.d); //true - equals, false - notequals
    }
    //Сравнить дробь на с другой дробью
    public int compareTo(Rational f) {
        return (equals(f)) ? 0 : (n * f.d - f.n * d > 0) ? 1 : -1; //0 - равны, 1 - больше, -1 - меньше
    }
    
    public String toString() {
        return n + "/" + d;
    }
}


Класс "Множество рациональных чисел"
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.util.ArrayList;
import java.util.List;
 
public class SetRational {
    private int cardinality; // Мощность множества
    private List<Rational> numbers; // Значения множества
 
    // Конструктор инициализируется только значением мощности множества, без инициализации значениями
    SetRational(int cardinality) {
        this.cardinality = cardinality;
        this.numbers = new ArrayList<>(cardinality);
    }
 
    // Конструктор инициализируется с заданными начальными значениями
    SetRational(List<Rational> numbers) {
        this.numbers = numbers;
        calculateCardinality();
    }
 
    // Получить все значения множества
    List<Rational> getNumbers() {
        return numbers;
    }
 
    // Задать значения множества
    void setNumbers(List<Rational> numbers) {
        this.numbers = numbers;
        calculateCardinality();
    }
 
    // Пересчитать мощность множества при изменении данных
    private void calculateCardinality() {
        this.cardinality = numbers.size();
    }
 
    // Получить мощность множества
    public int getCardinality() {
        return cardinality;
    }
 
    // Получить множество в виде строки
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Мощность множества: ")
                .append(cardinality)
                .append(". ")
                .append("Значения: {");
        for (int i = 0; i < numbers.size(); i++) {
            sb.append(numbers.get(i).toString());
            if (i != numbers.size() - 1) {
                sb.append(", ");
            } else {
                sb.append("}");
            }
        }
        return sb.toString();
    }
 
    // Проверить, принадлежит ли значение множеству
    boolean isNumberBelongToSet(Rational number) {
        return numbers.contains(number);
    }
    
    //Другая реализация поиска элемента в множестве (результат тот же)
    boolean In(Rational e) {
        for (int i = 0; i < cardinality; i++)
            if (numbers.get(i) == e) return true;
        return false;
    }
 
    // Объединить передаваемое множество с текущим
    void joinSet(SetRational newSet) {
        this.numbers.addAll(newSet.getNumbers());
        calculateCardinality();
    }
    
}


Main:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        try {
            Scanner scanner = new Scanner(System.in);
            
            List<Rational> listOne = new ArrayList<>();
            List<Rational> listTwo = new ArrayList<>();
 
            for(int i = 1; i < 2; i++) {
                for(int j = 8; j > 0; j --) {
                    Rational l1 = new Rational(i, j);
                    listOne.add(l1);
                }
            }
            for(int i = 1; i < 2; i++) {
                for(int j = 4; j > 0; j --) {
                    Rational l2 = new Rational(j, i);
                    listTwo.add(l2);
                }
            }
     
            SetRational setOne = new SetRational(listOne); // Инициализируем множество значениями
            SetRational setTwo = new SetRational(listTwo);
     
            System.out.println("Первое множество: ");
            System.out.println(setOne.toString()); // Выводим множество на печать
     
            System.out.println("Второе множество: ");
            System.out.println(setTwo.toString()); // Выводим множество на печать
     
            setOne.joinSet(setTwo); // Объединяем множества
     
            System.out.println("Первое множество после объединения со вторым: ");
            System.out.println(setOne.toString()); // Выводим множество на печать
     
            Rational numberToCheck = new Rational(1, 1);
            if (setOne.isNumberBelongToSet(numberToCheck)) { // Проверяем, принадлежит ли число множеству
                System.out.println(numberToCheck + " принадлежит множеству.");
            } else {
                System.out.println(numberToCheck + " не принадлежит множеству.");
            }
            scanner.close();
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}


Вывод:
Java
1
2
3
4
5
6
7
Первое множество: 
Мощность множества: 8. Значения: {1/8, 1/7, 1/6, 1/5, 1/4, 1/3, 1/2, 1/1}
Второе множество: 
Мощность множества: 4. Значения: {4/1, 3/1, 2/1, 1/1}
Первое множество после объединения со вторым: 
Мощность множества: 12. Значения: {1/8, 1/7, 1/6, 1/5, 1/4, 1/3, 1/2, 1/1, 4/1, 3/1, 2/1, 1/1}
1/1 не принадлежит множеству.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2019, 16:12
Ответы с готовыми решениями:

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

Объединение, пересечение, разность, симметрическая разность множеств
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти:...

Разность и пересечение множеств
Есть программа (из массива текста выносит множество знаков препинания и арифметических операций). Код program variant8; uses...

4
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
28.12.2019, 17:19
alexfandr, Не вижу ваш хэшКод. Попробуйте реализовать, может проблема в этом?
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
28.12.2019, 17:43
добавьте метод в rational

Java
1
2
3
4
5
6
7
8
9
@Override
public boolean equals(Object o) {
    if (o == this) return true;
    if (!Rational.class.isInstance(o)) return false;
    
    Rational r = (Rational) o;
    
    return this.n == r.n && this.d == r.d;
}
1
168 / 8 / 1
Регистрация: 15.11.2018
Сообщений: 256
28.12.2019, 17:53  [ТС]
sdasdaw, спасибо) Как можно реализовать пересечение и разность?
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
28.12.2019, 18:01
Цитата Сообщение от alexfandr Посмотреть сообщение
Как можно реализовать пересечение и разность?
простейшие формулы в сети находятся

пересечение - просто поиск элементов одинаковых, это и будет резульаттом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2019, 18:01
Помогаю со студенческими работами здесь

Пересечение, разность множеств
не подскажите как реализовать пересечение и разность? например, пересечение : '(a s d (h)) '(h a y)) -&gt; (a h); разность : '(a e r...

Объединение, пересечение, разность множеств
Это вполне стандартный алгоритм,может есть у кого готовый? Объединение, пересечение, разность множеств. Поверка на включение одного...

Построить пересечение и разность множеств
Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств.

Объединение, пересечение, разность множеств
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;math.h&gt; ...

Объединение, пересечение и разность множеств
Доброго дня. Задание: 1) На вход подаются два упорядоченных множества A и B (вводятся с клавиатуры, элементы множеств – буквы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru