Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
-10 / 0 / 0
Регистрация: 15.01.2016
Сообщений: 15

Реализовать класс Polynom (многочлен)

01.06.2016, 19:12. Показов 9511. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализуйте класс Polynom (многочлен). В классе должны быть предоставлены поля: степень многочлена (старшая), массив коэффициентов. Реализовать операции сложения, вычитание двух многочленов, умножение многочлена на число, вычисление значения многочлена при заданном значении аргумента X, нахождение производной (результат тоже многочлен), конструкторы, сравнения многочленов на равенство ( метод equals() ), строковая запись многочлена (метод toString() ).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2016, 19:12
Ответы с готовыми решениями:

Описать класс "многочлен", реализовать методы "произведение многочленов", "сравнение на равенство"
описать класс "многочлен".реализовать методы "произведение многочленов", "сравнение на равенство", чтение из файла и запись в файл....

Разработать класс «многочлен» для работы с многочленами от одной переменной
Доброго дня! собственно нужна помощь в решении данной задачи: есть код на С++, может чем поможет #include <iostream.h> ...

Класс: Реализовать класс Matrix - матрица, на основе двухмерного массива размерности M на N...
1) Реализовать класс Matrix - матрица, на основе двух-мерного целочисленного массива int размерности M на N (кол-во строк и кол-во...

1
 Аватар для FatNinja
82 / 82 / 32
Регистрация: 17.02.2016
Сообщений: 226
02.06.2016, 00:21
Лучший ответ Сообщение было отмечено orgasm как решение

Решение

За основу можно этот взять, вместо массива - мапа, без вычисления значения, производной и equals
Кликните здесь для просмотра всего текста
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
136
137
138
139
140
141
142
143
144
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
 
public class Polynom {
 
    final static String EMPTY_STRING = "";
    final static String POSITIVE_SIGN = " + ";
    final static String NEGATIVE_SIGN = " - ";
    final static String DEGREE_MARK_1 = "x";
    final static String DEGREE_MARK_NTH = "x^";
 
    private final Map<Integer, Integer> members
            = new TreeMap<Integer, Integer>(Collections.reverseOrder());
 
    public Polynom(Map<Integer, Integer> members) {
        this.members.putAll(members);
        deleteMembersWithZeroCoefficient();
    }
 
    /**
     * Сложение
     */
    public Polynom add(Polynom other) {
        Map<Integer, Integer> result = new TreeMap<Integer, Integer>();
        result.putAll(members);
        
        for (Integer currentKey : other.members.keySet()) {
            Integer resultValue = other.members.get(currentKey);
            Integer currentValue = result.get(currentKey);
            if (currentValue != null) {
                resultValue += currentValue;
            }
            result.put(currentKey, resultValue);
        }
        return new Polynom(result);
    }
 
    /**
     * Вычитание
     */
    public Polynom subtract(Polynom other) {
        Map<Integer, Integer> result = new TreeMap<Integer, Integer>();
        result.putAll(members); 
        
        for (Integer currentKey : other.members.keySet()) {
            Integer currentValue = result.get(currentKey);
            if (currentValue != null) {
                Integer difference = currentValue - other.members.get(currentKey); 
                result.put(currentKey, difference);
            } else {
                result.put(currentKey, other.members.get(currentKey));
            }
        }
        return new Polynom(result);
    }
 
    /**
     * Умножение
     */
    public Polynom multiply(Polynom other) {
        Map<Integer, Integer> result = new TreeMap<Integer, Integer>();
     
        for (Entry<Integer, Integer> first : members.entrySet()) {
            for (Entry<Integer, Integer> second : other.members.entrySet()) {
                Integer amountKey = first.getKey() + second.getKey();
                Integer productValue = first.getValue() * second.getValue();
                if (result.containsKey(amountKey)) {
                    productValue += result.get(amountKey);
                }
                result.put(amountKey, productValue);
            }
        }
        return new Polynom(result);
    }
 
    private void deleteMembersWithZeroCoefficient() {
        Iterator<Entry<Integer, Integer>> iterator = members.entrySet().iterator();
        while (iterator.hasNext()) {
            Entry<Integer, Integer> pair = iterator.next();
            if (pair.getValue() == 0) {
                iterator.remove();
            }
        }
    }
 
    /**
     * Получение строкового представления знака одночлена в зависимости от знака
     * коэффициента и места размещения одночлена в многочлене. Если коэффициент
     * одночлена отрицательный - возвращается " - "; Если коэффициент одночлена
     * положительный и одночлен первый в многочлене - возвращается пустая
     * строка. Иначе - " + ";
     */
    private String viewSignMonomial(boolean isFirst, int coefficient) {
        final int MIN_POSITIVE_COEFFICIENT = 0;
        if (coefficient < MIN_POSITIVE_COEFFICIENT) {
            return NEGATIVE_SIGN;
        } else {
            return (isFirst) ? EMPTY_STRING : POSITIVE_SIGN;
        }
    }
 
    /**
     * Получение строкового представления коэффициента одночлена в зависимости
     * от степени. Если коэффициент равен единице или степень нулевая -
     * возвращается пустая строка. Иначе - возвращается коэффициент.
     */
    private String viewCoefficient(int coeff, int degree) {
        return ((coeff != 1) || (degree == 0))
                ? String.valueOf(coeff)
                : EMPTY_STRING;
    }
 
    /**
     * Получение строкового представления степени одночлена. Если степень
     * нулевая - возвращается пустая строка. Если степень 1 - возвращается "x".
     * Иначе - возвращается "x^" + степень.
     */
    private String viewDegree(int degree) {
        String result = EMPTY_STRING;
        if (degree != 0) {
            result = (degree == 1) ? DEGREE_MARK_1 : DEGREE_MARK_NTH + degree;
        }
        return result;
    }
 
    @Override
    public String toString() {
        boolean isFirstMember = true;
        StringBuilder builder = new StringBuilder();
        for (Map.Entry<Integer, Integer> current : members.entrySet()) {
            int currentCoeff = current.getValue();
            int currentDegree = current.getKey();
            builder.append(viewSignMonomial(isFirstMember, currentCoeff));
            builder.append(viewCoefficient(Math.abs(currentCoeff), 
                    currentDegree));
            builder.append(viewDegree(currentDegree));
            isFirstMember = false;
        }
        return builder.toString();
    }
}

Кликните здесь для просмотра всего текста
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
import java.util.*;
import java.util.regex.*;
 
public class PolynomialParser {
 
    private final static int INDEX_SIGN_COEFF = 1;
    private final static int INDEX_COEFF = 2;
    private final static int INDEX_VARIABLE = 3;
    private final static int INDEX_DEGREE = 4;
 
    private final static String NEGATIVE_SIGN = "-";
    private final static String MONOMIAL_TEMPLATE = 
            "([+-])?(\\d+)?(x)?(?:\\^(\\d+))?";
 
    /**
     * Получение многочлена одной переменной из строки, записанной в 
     * стандартной математической форме.
     * Переменная многочлена должна быть "x".
     */
    public Polynom parse(String rawPolynomial) {
        String source = normalizeSourceString(rawPolynomial);
        Map<Integer, Integer> result = new HashMap<>();
        Pattern monomial = Pattern.compile(MONOMIAL_TEMPLATE);
        Matcher m = monomial.matcher(source);
        while ((!m.hitEnd() && (m.find()))) {
            boolean isNegative = NEGATIVE_SIGN.equals(m.group(INDEX_SIGN_COEFF));
            int currentDegree = calcDegree(m.group(INDEX_DEGREE), 
                    m.group(INDEX_VARIABLE));
            int currentCoeff = calcCoeff(isNegative, m.group(INDEX_COEFF));
            result.put(currentDegree, currentCoeff);
        }
        return new Polynom(result);
    }
 
    /**
     * Вычисление коэффициента одночлена
     */
    private int calcCoeff(boolean isNegative, String coefficient) {
        int result = (coefficient != null) ? Integer.parseInt(coefficient) : 1;
        return (isNegative) ? -result : result;
    }
 
    /**
     * Вычисление степени одночлена
     */
    private int calcDegree(String degree, String symbolVarialble) {
        int result = (symbolVarialble != null) ? 1 : 0;
        return (degree != null) ? Integer.parseInt(degree) : result;
    }
 
    /**
     * Удаление из строки всех пробелов и 
     * преобразование всех символов в нижний регистр
     */
    private String normalizeSourceString(String source) {
        final String EMPTY_STRING = "";
        final String WHITESPACE_TEMPLATE = "\\s+";
        String result = source.replaceAll(WHITESPACE_TEMPLATE, EMPTY_STRING);
        return result.toLowerCase();
    }
}

Кликните здесь для просмотра всего текста
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
import java.util.*;
 
public class Runner {
 
    public static void main(String[] args) {
 
        PolynomialParser parser = new PolynomialParser();
 
        // Создание полинома с помощью парсера.
        Polynom firstPolynom = parser.parse(" 32x^5 - 5x^2 + 4x + 3");
        System.out.println("Первый многочлен: " + firstPolynom);
 
        // - 3x^5 - x + 2
        Map<Integer, Integer> members = new HashMap<>();
        members.put(5, -3);
        members.put(1, -1);
        members.put(0, 2);
 
        // Создание полинома с помощью конструктора и контейнера Map
        Polynom secondPolynom = new Polynom(members);
        System.out.println("Второй многочлен: " + secondPolynom);
 
        // Сложение
        System.out.println("\n Сложение: "
                + firstPolynom.addition(secondPolynom));
 
        // Вычитание
        System.out.println("Вычитание: "
                + firstPolynom.subtraction(secondPolynom));
 
        // Умножение
        System.out.println("Умножение: "
                + firstPolynom.multiplication(secondPolynom));
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2016, 00:21
Помогаю со студенческими работами здесь

Реализовать класс "Многочлен"
Общая постановка задачи: Реализовать класс. Осуществить перегрузку конструкторов для класса. Особым методом реализовать метод...

Класс многочлен, перегрузка операторов
Здравствуйте. Есть класс многочлен степени n от одной переменной x, задаваемый массивом своих коэффициентов. Для класса перегрузить...

Описать класс многочлен, с полями степень, аргумент и коэффициенты
Всем привет! Помогите, пожалуйста, выполнить лабораторку. Составьте описание класса, объявив объекты класса и продемонстрировать работу...

Класс многочлен.Вычисление значения в точке ,используя схемы горнера
Есть класс много член. у него 2 поля.нужно перегрузить оператор () , то есть вычисление значение в точке. с помощью схемы горнера То есть...

Необходимо реализовать шаблонный класс Array, и грамотно реализовать push_back
Необходимо реализовать шаблонный класс Array, параметризируемый типом хранимых элементов. Класс Array представляет собой...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru