Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2013, 01:25   #1
_Лето_
Пользователь
 
Регистрация: 04.11.2013
Сообщений: 23
По умолчанию Сложение, вычитание, умножение полиномов

Пожалуйста, объясните, как работает эта программа? Особенно вот этот кусочек:

Код:
class polynomial {
public:
int *coeff, degree; /* variable declaration */

int get_data(); /*function declaration */
int display(int *coeff, int degree);
void addition(polynomial P1, polynomial P2);
void substraction(polynomial P1, polynomial P2);
void multiplication(polynomial P1, polynomial P2);
};
Сама программа:

Код:
#include<iostream>
#include<stdlib.h>

#define RESET_COLOR "\e[m"
#define GREEN  "\e[32m"

using namespace std;

class polynomial {
public:
    int *coeff, degree; /* variable declaration */

    int get_data(); /*function declaration */
    int display(int *coeff, int degree);
    void addition(polynomial P1, polynomial P2);
    void substraction(polynomial P1, polynomial P2);
    void multiplication(polynomial P1, polynomial P2);
};

int polynomial::display(int *coeff, int degree) {
    int i, j;
    for (i = degree; i >= 0; i--) {
        cout << coeff[i] << "x^" << i;
        if ((i - 1) != -1)
            cout << "+";
    }
    cout << "\n";
    return 0;
}

int polynomial::get_data() {
    int i;
    cout << "Enter Degree Of Polynomial:";
    cin >> degree;
    coeff = new int[degree + 1];
    for (i = degree; i >= 0; i--) {
        cout << "Enter coefficient of x^" << i << ":";
        cin >> coeff[i];
    }

    return 0;
}

void polynomial::addition(polynomial P1, polynomial P2) {
    int max, i;
    max = (P1.degree > P2.degree) ? P1.degree : P2.degree;
    int *add = new int[max + 1];
    if (P1.degree == P2.degree) {
        for (i = P1.degree; i >= 0; i--)
            add[i] = P1.coeff[i] + P2.coeff[i];
    }

    if (P1.degree > P2.degree) {
        for (i = P1.degree; i > P2.degree; i--)
            add[i] = P1.coeff[i];
        for (i = P2.degree; i >= 0; i--)
            add[i] = P1.coeff[i] + P2.coeff[i];
    }

    if (P1.degree < P2.degree) {
        for (i = P2.degree; i > P1.degree; i--)
            add[i] = P2.coeff[i];
        for (i = P1.degree; i >= 0; i--)
            add[i] = P1.coeff[i] + P2.coeff[i];
    }
    cout << "\nAddition:";
    display(add, max);
    cout << "\n";
}

void polynomial::substraction(polynomial P1, polynomial P2) {
    int max, i;
    max = (P1.degree > P2.degree) ? P1.degree : P2.degree;
    int *sub = new int[max + 1];
    if (P1.degree == P2.degree) {
        for (i = P1.degree; i >= 0; i--)
            sub[i] = P1.coeff[i] - P2.coeff[i];
    }

    if (P1.degree > P2.degree) {
        for (i = P1.degree; i > P2.degree; i--)
            sub[i] = P1.coeff[i];
        for (i = P2.degree; i >= 0; i--)
            sub[i] = P1.coeff[i] - P2.coeff[i];
    }

    if (P1.degree < P2.degree) {
        for (i = P2.degree; i > P1.degree; i--)
            sub[i] = -P2.coeff[i];
        for (i = P1.degree; i >= 0; i--)
            sub[i] = P1.coeff[i] - P2.coeff[i];
    }
    cout << "\nSubstraction:";
    display(sub, max);
    cout << "\n";
}

void polynomial::multiplication(polynomial P1, polynomial P2) {
    int i, j, max;
    max = P1.degree + P2.degree;
    int *mul = new int[max + 1];

    for (i = P1.degree; i >= 0; i--)
        for (j = P2.degree; j >= 0; j--)
            mul[i + j] += P1.coeff[i] * P2.coeff[j];
    cout << "\nMultiplication:";
    display(mul, max);
}

Программа без вывода
_Лето_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение двух полиномов DennyDirk Общие вопросы C/C++ 0 24.11.2013 22:47
Написать программу, выполняющую по выбору сложение, вычитание, умножение или деление нацело двух многоразрядных чисел. dmitriy20104 Паскаль, Turbo Pascal, PascalABC.NET 1 20.08.2012 19:12
Уважаемые программисты, отзовитесь. (С++) Арифметические действия для комплексных чисел (сложение, вычитание, умножение и деление) Meurtre Помощь студентам 4 19.12.2011 01:15
Сложение, вычитание, деление, умножение в Turbo Debugger GaJIbI4 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 08.03.2010 15:23
обновление в блоге - Сложение, вычитание и умножение на Flat Assembler Pblog Обсуждение статей 0 24.04.2009 20:50