Монголо-татарское нашествие

  • Вид работы:
    Реферат
  • Предмет:
    История
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    435,96 kb
  • Опубликовано:
    2009-01-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Монголо-татарское нашествие





Факультет: высшего образования

Направление:

КУРСОВАЯ РАБОТА

по дисциплине: «Программирование»

на тему: «Многочлены»






студент группы   шифр

ФИО

«____»  ______________ 201  г.

_________________________

подпись студента)

Проверил

ФИО

Оценка _____________________

____________________________

(подпись преподавателя)

«___» ____________ 201 г.



Лысьва, 2013г.


Содержание

1. Введение. 3

1.2 Постановка задачи. 4

1.3 Основная теория. 4

2. Основная часть. 8

2.1 Возможные исходные данные. 8

2.2 Неформальное изложение алгоритма. 8

}3. Набор тестов для класса. 14

3. Набор тестов для класса. 15

3.1 Тесты для сложения двух многочленов. 15

3.2 Тесты для вычитания двух многочленов. 17

3.3 Тесты для умножения двух многочленов. 19

3.4 Тесты для деления двух многочленов. 21

3.5 Тесты для нахождения остатка от деления. 22

3.6 Тесты для операции отношения равно. 23

3.7 Тесты для операции отношения не равно. 25

3.8 Тесты для  операции возведения многочлена в натуральную степень k. 26

3.9 Тесты для  вычисления производной от многочлена. 28

3.10 Тесты для вычисления значения в точке x0 28

3.11 Тесты на вывод многочлена. 29

3.12 Тесты на нахождение наибольшего общего делителя двух многочленов. 31

4. Руководство пользователя. 33

5. Заключение. 34

Список использованных источников. 35

Приложения. 36

1. Введение

Изучение полиномиальных уравнений и их решений составляло едва ли не главный объект «классической алгебры». С изучением многочленов связан целый ряд преобразований в математике: введение в рассмотрение нуля, отрицательных, а затем и комплексных чисел, а также появление теории групп как раздела математики и выделение классов специальных функций в анализе.

Многочлены также играют ключевую роль в алгебраической геометрии, объектом которой являются множества, определённые как решения систем многочленов.

Поэтому создание легкой и доступной программы способной быстро выполнять нужные действия с многочленами любой степени является практичной и упрощает работу, избавляя нас от рутинных вычислений.

 

1.1 Цель работы

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

1.2 Постановка задачи

Реализовать в виде класса набор подпрограмм для выполнения операций с многочленами от одной переменной (первый многочлен степени m, второй — степени n):

1) сложение;
2) вычитание;
3) умножение;
4) деление с остатком;
5) операции отношения (равно, не равно);
6) возведение в натуральную степень k;
7) вычисление производной от многочлена;
8) вычисление значения в точке x0.
Многочлен представить массивом коэффициентов.

Используя этот класс, решить задачи:
1. Найти наибольший общий делитель многочленов P(x) и Q(x).
 2. Вычислить: Ps(x) – Qr(x).

1.3 Основная теория

Многочлен от n переменных — это сумма одночленов или, строго, — конечная формальная сумма вида.1

\sum_I c_I x_1^{i_1}x_2^{i_2}\cdots x_n^{i_n}, где

· I=(i_1,i_2,\dots,i_n) — набор из целых неотрицательных чисел, именуемый мультииндексом,

· c_I — число, именуемое коэффициент многочлена, зависящее только от мультииндекса I.

В частности, многочлен от одной переменной есть конечная формальная сумма вида

c_0 + c_1x^1 + \dots + c_mx^m, где

· c_i — фиксированные коэффициенты,

· x — переменная.

Привести многочлен к стандартному виду — означает привести к стандартному виду все его члены, а затем привести подобные члены. 1

Сложить два многочлена — это значит представить их сумму
в стандартном виде. 1

Чтобы решить многочлен, надо свести подобные члены. Например:
p1(x)=6x4-x5+5x4+x3; p2(x)=-8x4-4x3+5x+6;
p1+ p1=(6x4-x5+5x4+x3)+( -8x4-4x3+5x+6)= 6x4-x5+5x4+x3 -8x4-4x3+5x+6=6x4-x5-3x4-3x3+5x+6.

Вычесть из одного многочлена другой — это значит представить их разность в стандартном виде.1

При вычитании многочленов важно помнить, что после раскрытия скобок знаки во втором многочлене меняются на противоположные.

Например:
p1(x) = 6x4 - x5 + 5x4 + x3;  p2 (x)=- 8x4 - 4x3 + 5x + 6;
p1- p1 =(6x4 x 5+ 5x4 + x3) - (-8x4 - 4x 3 + 5x + 6) = 6x4 - x5 + 5x4 + x3 + 8x4 + 4x3 - 5x - 6=6x4-x5+13x4+5x3-5x-6.

Умножить многочлен на многочлен - это значит, каждый член одного многочлена умножить на каждый член другого многочлена и полученные одночлены сложить.  1

Например:
p1(x) = x2+6x-1; p2(x) = 3x+1;
p1*p1 =(x2+6x-1)*(3x+1)= 3x3+x2 +6x2+6x-3x-1=3x3+7x2+3x3-1.

Деление многочленов — алгоритм деления многочлена f(x) на многочлен g(x)степень которого меньше или равна степени многочлена f(x). Алгоритм представляет собой обобщенную форму деления чисел столбиком, легко реализуемую вручную.2

Пример:

1. Делим первый элемент делимого на старший элемент делителя, помещаем результат под чертой \left( x^3 / x = x^2 \right).

\begin{matrix}
x^3 - 12x^2 + 0x - 42 \underline{\vert x-3}\\
\qquad\qquad\qquad\quad\; \vert x^2\\
\end{matrix}

2. Умножаем делитель на полученный выше результат деления (на первый элемент частного). Записываем результат под первыми двумя элементами делимого \left( x^2 \cdot \left( x-3 \right) = x^3 - 3x^2 \right).

\begin{matrix}
x^3 - 12x^2 + 0x - 42 \underline{\vert x-3}\\
x^3 \;\; - 3x^2 \qquad\qquad\;\; \vert x^2 \quad\; \\
\end{matrix}

3. Вычитаем полученный после умножения многочлен из делимого, записываем результат под чертой \left( x^3 - 12x^2 + 0x - 42 - \left( x^3 - 3x^2 \right) = - 9x^2 + 0x - 42 \right).

\begin{matrix}
x^3 - 12x^2 + 0x - 42 \underline{\vert x-3}\\
\underline{x^3 \;\; - 3x^2 \qquad\qquad\;\;} \vert x^2 \quad\; \\
- 9x^2 + 0x - 42 \;\;
\end{matrix}

4. Повторяем предыдущие 3 шага, используя в качестве делимого многочлен, записанный под чертой.

\begin{matrix}
x^3 - 12x^2 + \;\; 0x - 42 \vert x-3 \quad \\
\underline{x^3 \;\; - 3x^2 \qquad\qquad\;\;\;\;} \overline{\vert x^2 - 9x} \\
- 9x^2 \;\; + 0x - 42 \quad\;\; \\
\underline{- 9x^2 + 27x \qquad\;} \quad\;\; \\
\quad\; - 27x - 42
\end{matrix}

5. Повторяем шаг 4.

\begin{matrix}
x^3 - 12x^2 + \;\; 0x - 42 \vert x-3 \qquad\quad\; \\
\underline{x^3 \;\; - 3x^2 \qquad\qquad\;\;\;\;} \overline{\vert x^2 - 9x - 27} \\
- 9x^2 \;\; + 0x - 42 \qquad\quad\;\;\; \\
\underline{- 9x^2 + 27x \qquad\;} \qquad\quad\;\;\; \\
- 27x - 42 \quad \\
\underline{- 27x + 81} \quad \\
\quad\; - 123
\end{matrix}

6. Конец алгоритма.

Таким образом, многочлен q(x) = x^2 - 9x - 27 — частное деления, а r(x) = - 123 — остаток.

Возведение многочлена в степень

Чтобы возвести двучлен в четвертую, пятую и т.д. степень, надо последовательно умножить разложенный многочлен на самого себя несколько раз.

Например:

p1(x)= (3x2 – 2)3=(3x2 – 2) (3x2 – 2) (3x2 – 2)= (3x2 – 2)(9x2 – 12x+4)= 27x3+54x2+36x+8.

Два многочлена p1(x) и p2(x) считаются равными, если равны их коэффициенты при одинаковых степенях переменной х и свободные члены (равны их соответствующие коэффициенты). В этом случае пишут: p1 (x) = p2 (x).3

Производная (функции в точке) — основное понятие дифференциального исчисления, характеризующее скорость изменения функции (в данной точке).2

Для вычисления производной от многочлена нам потребуются знания таблицы производных:
(xn)’=nxn-1; c’=0.

Например:
p1(x)= 3x2 – 2=6x.

Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании, характеризуемый способом своего построения. Наряду с понятием «объекта» класс является ключевым понятием в ООП. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. 3

На практике объектно-ориентированное программирование сводится к созданию некоторого количества классов, включая интерфейс и реализацию, и последующему их использованию. Графическое представление некоторого количества классов и связей между ними называется диаграммой классов.

Идея классов пришла из работ по базам знаний, имеющих отношение к исследованиям по искусственному интеллекту. Используемые человеком классификации в зоологии, ботанике, химии, деталях машин, несут в себе основную идею, что любую вещь всегда можно представить частным случаем некоторого более общего понятия. Конкретное яблоко — это в целом некоторое яблоко, вообще яблоко, а любое вообще яблоко — фрукт. Именно поэтому примеры классов в учебных пособиях по объектно-ориентированному программированию так часто упоминают яблоки и груши.

2. Основная часть

2.1 Возможные исходные данные

·   Многочлены(коэффициенты при переменных, степени переменных), алгоритмы решения задач.

·   Операции над многочленами: сложение, умножение, вычитание, деление с остатком, возведение степень, операции отношения (равно, не равно), возведение в натуральную степень, вычисление производной от многочлена, вычисление значения в точке x0.

2.2 Неформальное изложение алгоритма

Алгоритм создания многочлена

·   Вводим слепень, которая будет у создаваемого многочлена;

·   Вводим свободный элемент многочлена;

·   При помощи цикла вводим коэффициенты при х в данном многочлене.

void  mnogochlen::sozdanie()

{ int i;

 cout<<"Введите степень многочлена "<<endl;

 cin>>stepen;

 

 cout<<"Введите свободный элемент"<<endl;

 cin>>koof[0];

 

     for(i=1;i<=stepen;i++)

    

     { cout<<"Введите x в степени "<<i<<" ";

      cin>>koof[i];

      }

}

Алгоритм вывода многочлена

·   Выводим на экран “y=”;

·   Выводим на экран элемент многочлена с наибольшей степенью;

·   Выводим поочередно все элементы многочлена, начиная с большей степени до единицы включительно;

·   Если коэффициент при x равен нулю не выводим этот элемент;

·   Выводим свободный элемент.

void mnogochlen::vivod()

{int j,i;

cout<<"y=";

if(stepen==0){cout<<koof[0];} else{

    if(koof[stepen]>0)

          {

                      cout<<koof[stepen]<<"x^"<<stepen;

          }

   

    else

      {  

                      if(koof[stepen]<0) {cout<<koof[stepen]<<"x^"<<stepen;}

      else{cout<<"";}

      }

     

    j=stepen-1;

   

    for(i=j;i>=1;i--)

   

    { if(koof[i]>0)

          { cout<<"+"<<koof[i]<<"x^"<<i;}

         

      else

      {   if(koof[i]<0) {cout<<koof[i]<<"x^"<<i;}

     

      else{cout<<"";}}

    }

    if(koof[0]>0)

          { cout<<"+"<<koof[0]<<endl;}

         

      else

      {   if(koof[0]<0) {cout<<koof[i]<<endl;}

     

      else{cout<<endl;}

      }

}

}

Алгоритм сложения двух многочленов

  • Определяем больший из введенных многочленов них по степени;
  • Обнуляем в меньшем многочлене коэффициенты при x;
  • В новом массиве, который предназначен для сохранения результата, коэффициенты делаем равными нулю;

·   При помощи цикла складываем коэффициенты, при одинаковых степенях x;

·   Присваиваем полученному многочлену степень, большего из вычитаемых;

·   Возвращаем полученный многочлен.

Алгоритм вычитания двух многочленов

  • Определяем больший из введенных многочленов них по степени;
  • Обнуляем в меньшем многочлене коэффициенты при x;
  • В новом массиве, который предназначен для сохранения результата, коэффициенты делаем равными нулю;

·   При помощи цикла вычитаем коэффициенты, при одинаковых степенях x;

·   Присваиваем полученному многочлену степень, большего из вычитаемых;

·   Возвращаем полученный многочлен.

Алгоритм умножения двух многочленов

·   Присваиваем многочлену, предназначенному для сохранения результата степень равную сумме степеней умножаемых многочленов;

  • В новом массиве, который предназначен для сохранения результата, коэффициенты делаем равными нулю;

·   В двойном цикле поочередно умножаем все коэффициенты по правилам приведенным выше;

·   Приводим подобные;

·   Возвращаем полученный результат.

mnogochlen mnogochlen :: operator *(mnogochlen m)

{mnogochlen d;

    int i,j,k;

    k=stepen+m.stepen;

for (i=0;i<=k;i++)

    {                    d.koof[i]=0;    }

   

for (i=0;i<=stepen;i++)

    {                        for(j=0;j<=m.stepen;j++)    { 

                              d.koof[i+j]+=koof[i]*m.koof[j];                              }    }

   

    d.stepen=m.stepen+stepen;       

return d ;    }

Алгоритм проверки на равенство двух многочленов

·   Сравниваем степени двух многочленов, если они не равны, то, следовательно, не равны и многочлены. Это означает, что дальнейшие действия можно не выполнять. Иначе продолжаем выполнение;

·   В цикле сравниваем коэффициенты при x;

·   Если коэффициенты, при каком либо x не совпадают, прерываем сравнение. Многочлены не равны. Иначе продолжаем его выполнение.

·   Выводим значение булевой переменной, которая и будет указывать: равны ли многочлены или нет.

bool mnogochlen :: operator ==(mnogochlen m)

{  bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=0;break;}

        else {priznak=1;}   

     }             }

return priznak;

      }

Алгоритм проверки на неравенство двух многочленов

·   Сравниваем степени двух многочленов, если они не равны, то, следовательно, не равны и многочлены. Это означает, что дальнейшие действия можно не выполнять. Иначе продолжаем выполнение;

·   В цикле сравниваем коэффициенты при x;

·   Если коэффициенты, при каком либо x не совпадают, прерываем сравнение. Многочлены не равны. Иначе продолжаем его выполнение.

·   Возвращаем значение булевой переменной, которая и будет указывать: равны ли многочлены или нет.

bool mnogochlen :: operator !=(mnogochlen m)

{  bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=1;break;}

        else {priznak=0;}   

     }             }

return priznak;

      }

Алгоритм возведения в натуральную степень многочлена

·   Вводим натуральную степень, в которую следует возвести данный многочлен;

·   Создаем многочлен, равный многочлену, который следует возвести в степень;

·   Создаем вспомогательный многочлен, степень которого равна 0, а свободный член равен 1;

·    При помощи цикла и операции умножения многочленов выполняем поочередное умножение многочленов, сколько того требует степень;

mnogochlen mnogochlen ::stepeny(int k)

{int i;

 mnogochlen d,c;

  c.stepen=stepen;

  for(i=0;i<=stepen;i++)

  {c.koof[i]=koof[i];}

   d.stepen=0;

   d.koof[0]=1;

   for(i=1;i<=k;i++)

  {d=d*c;

     }

return d;

}

Алгоритм вычисления производной от многочлена

·   Создаем цикл;

·   Умножаем степень при x на коэффициент при нем;

·   Уменьшаем степень при x на единицу;

·   По завершении цикла уменьшаем степень многочлена на 1.

mnogochlen mnogochlen::proizvodnaa()

{mnogochlen c; int i, j;

          c.stepen=stepen;

      for(i=1;i<=stepen;i++)

        {c.koof[i-1]=koof[i]*i;}c.stepen--;

              return c;      }


Алгоритм вычисления значения в точке x0

·   Вводим значение x, которое необходимо для подсчета;

·   Присваиваем переменной, в которой сохраняется результат, значение свободной переменной многочлена;

·   Создаем цикл, в котором к этой переменной будет прибавляться значение коэффициента при x умноженного на x в соответствующей степени;

·   Выводим полученное значение.

double mnogochlen::znachenie(double x)

{double y;

int i;

     

      // ввод х в основную программу

       y=koof[0];

     

      for(i=1;i<=stepen;i++)

        {y+=pow(x,i)*koof[i];}

       

      return y;}

Алгоритм деления многочленов

·   Вычисляем степень многочлена, который будет результатом деления многочленов, вычитая из степени делимого степень делителя;

·   Обнуляем коэффициенты будущего многочлена, который будет результатом деления;

·   Определяем степень очередного элемента многочлена, вычитая из степени делимого степень делителя;

·   Вычисляем его коэффициент, разделив коэффициент делимого на коэффициент делителя;

·   Умножаем делитель на этот элемент многочлена, чтобы получить многочлен, который будет промежуточным;

·   Вычитаем из делимого этот многочлен и заносим новый результат в делимое;

·    Выполняем последние четыре действия до тех пор, пока степень делимого не будет меньше и ли равной степени делителя;

·   Присваиваем полученному многочлену степень, которую запоминали вначале;

·   Возвращаем результат.

mnogochlen mnogochlen :: operator /(mnogochlen m)

{  mnogochlen c,d,g;

  int i,l,k;

 l=stepen-m.stepen;

 for(i=0;i<100;i++)

 {c.koof[i]=0; d.koof[i]=0;}

 

while (stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

 d=m*c;

  *this=*this-d; }                      

c.stepen=l;return c;}

Алгоритм нахождения остатка от деления

·   Обнуляем коэффициенты будущего многочлена, который будет результатом деления;

·   Определяем степень очередного элемента многочлена, вычитая из степени делимого степень делителя;

·   Вычисляем его коэффициент, разделив коэффициент делимого на коэффициент делителя;

·   Умножаем делитель на этот элемент многочлена, чтобы получить многочлен, который будет промежуточным;

·   Вычитаем из делимого этот многочлен и заносим новый результат в делимое;

·    Выполняем последние четыре действия до тех пор, пока степень делимого не будет меньше и ли равной степени делителя;

·   Возвращаем остаток от деления многочленов;

mnogochlen mnogochlen :: operator %(mnogochlen m)

{  mnogochlen c,d,g; bool a;

  int i,l,k;

 l=stepen-m.stepen;

 for(i=0;i<100;i++)

 {c.koof[i]=0; d.koof[i]=0;}

 while(stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

 d=m*c;

  *this=*this-d; }

                   

c.stepen=l;

return *this;

}
3. Набор тестов для класса

            В спроектированном мною классе содержится несколько подпрограмм, которые взаимосвязаны с друг-другом, следовательно, было бы целесообразно отладить каждую в отдельности.

3.1 Тесты для сложения двух многочленов

  • Случай, когда многочлены равны

Введите степень многочлена 3
Введите свободный элемент 8
Введите x в степени 1 7
Введите x в степени 2 4
Введите x в степени 3 2
y=2x3+4x2+7x+8

Введите степень многочлена 3
Введите свободный элемент 8
Введите x в степени 1 7
Введите x в степени 2 4
Введите x в степени 3 2
y=2x3+4x2+7x+8

y=4x3+8x2+14x+16

  • Случай, когда первый многочлен больше другого

Введите степень многочлена 2
Введите свободный элемент 6
Введите x в степени 1 4
Введите x в степени 2 3

y=3x2+4x+6

Введите степень многочлена 4
Введите свободный элемент 54
Введите x в степени 1 5
Введите x в степени 2 87
Введите x в степени 3 3
Введите x в степени 4 10

y=10x4+3x3+87x2+5x+54

y=10x4+3x3+90x2+9x+60

Для продолжения нажмите любую клавишу . . .

  • Случай, когда второй многочлен больше другого

Введите степень многочлена 3
Введите свободный элемент 6
Введите x в степени 1 7
Введите x в степени 2 3
Введите x в степени 3 8
y=8x3+3x2+7x+6

Введите степень многочлена 1
Введите свободный элемент 2
Введите x в степени 1 1
y=1x1+2

y=8x3+3x2+8x+8

  • Случай, когда один из многочленов пустой

Введите степень многочлена 3
Введите свободный элемент 6
Введите x в степени 1 7
Введите x в степени 2 8
Введите x в степени 3 2
y=2x3+8x2+7x+6

Введите степень многочлена 0
Введите свободный элемент 0
y=0

y=2x3+8x2+7x+6

  • Случай, когда один из многочленов содержит только свободный элемент

Введите степень многочлена 4
Введите свободный элемент 7

Введите x в степени 1 8
Введите x в степени 2 3
Введите x в степени 3 5
Введите x в степени 4 2

y=2x4+5x3+3x2+8x+7

Введите степень многочлена 0
Введите свободный элемент 9
y=9

y=2x4+5x3+3x2+8x+16

  • Случай, когда многочлены противоположны

Введите степень многочлена 2
Введите свободный элемент 2
Введите x в степени 1 3
Введите x в степени 2 4
y=4x2+3x+2

Введите степень многочлена 2
Введите свободный элемент -2
Введите x в степени 1 -3
Введите x в степени 2 -4
y=-4x2-3x-2

y=0

  • Случай, когда в многочлене отсутствуют элементы

Введите степень многочлена 3
Введите свободный элемент 2
Введите x в степени 1 0
Введите x в степени 2 -4
Введите x в степени 3 -7
y=-7x3-4x2+2

Введите степень многочлена 2
Введите свободный элемент 0
Введите x в степени 1 4
Введите x в степени 2 -7
y=-7x2+4x

y=-7x3-11x2+4x+2

3.2 Тесты для вычитания двух многочленов

  • Случай, когда многочлены равны

Введите степень многочлена 2
Введите свободный элемент 5
Введите x в степени 1 -4
Введите x в степени 2 3
y=3x2-4x+5

Введите степень многочлена 2
Введите свободный элемент -1
Введите x в степени 1 7
Введите x в степени 2 3
y=3x2+7x-1

y=-11x+6

  • Случай, когда первый многочлен больше другого

Введите степень многочлена 3
Введите свободный элемент 2
Введите x в степени 1 -6
Введите x в степени 2 -9
Введите x в степени 3 1
y=1x3-9x2-6x+2

Введите степень многочлена 1

Введите свободный элемент 9
Введите x в степени 1 -5
y=-5x1+9

y=1x3-9x2-1x-7

  • Случай, когда второй многочлен больше другого

Введите степень многочлена 1
Введите свободный элемент 3
Введите x в степени 1 -4
y=-4x+3

Введите степень многочлена 2
Введите свободный элемент 10
Введите x в степени 1 15
Введите x в степени 2 -8
y=-8x2+15x+10

y=8x2-19x-7

  • Случай, когда один из многочленов пустой

Введите степень многочлена 2
Введите свободный элемент 7
Введите x в степени 1 -3
Введите x в степени 2 10
y=10x2-3x+7

Введите степень многочлена 0
Введите свободный элемент 0
y=0

y=10x2-3x+7

  • Случай, когда один из многочленов содержит только свободный элемент

Введите степень многочлена 2
Введите свободный элемент 5
Введите x в степени 1 -9
Введите x в степени 2 2
y=2x^2-9x^1+5

Введите степень многочлена 0
Введите свободный элемент -7
y= -7

y=2x2-9x+12.

  • Случай, когда многочлены равны

Введите степень многочлена 2
Введите свободный элемент -6
Введите x в степени 1 2
Введите x в степени 2 7
y=7x2+2x-6

Введите степень многочлена 2
Введите свободный элемент -6
Введите x в степени 1 2
Введите x в степени 2 7
y=7x2+2x-6

y=0.

3.3 Тесты для умножения двух многочленов

  • Случай, когда многочлены равны

Введите степень многочлена 1
Введите свободный элемент 4
Введите x в степени 1 -7
y=-7x+4

Введите степень многочлена 1
Введите свободный элемент 9
Введите x в степени 1 3
y=3x+9

  • Случай, когда первый многочлен больше другого

Введите степень многочлена 3
Введите свободный элемент -14
Введите x в степени 1 5
Введите x в степени 2 6
Введите x в степени 3 1
y=1x3+6x2+5x-14

Введите степень многочлена 2
Введите свободный элемент 8
Введите x в степени 1 -4
Введите x в степени 2 3
y=3x2-4x+8

y=3x5+14x4-1x3-14x2+96x-112.

  • Случай, когда второй многочлен больше другого

Введите степень многочлена 2
Введите свободный элемент 8
Введите x в степени 1 -4
Введите x в степени 2 3
y=3x2-4x+8

Введите степень многочлена 3
Введите свободный элемент -14
Введите x в степени 1 5
Введите x в степени 2 6
Введите x в степени 3 1
y=1x3+6x2+5x-14

y=3x5+14x4-1x3-14x2+96x-112.

  • Случай, когда один из многочленов пустой

Введите степень многочлена 3
Введите свободный элемент 5
Введите x в степени 1 -4
Введите x в степени 2 2
Введите x в степени 3 10
y=10x3+2x2-4x+5

Введите степень многочлена 0
Введите свободный элемент 0
y=0

y=0.

  • Случай, когда один из многочленов содержит только свободный элемент

Введите степень многочлена 4
Введите свободный элемент 9
Введите x в степени 1 5
Введите x в степени 2 -10
Введите x в степени 3 1
Введите x в степени 4 5

y=5x4+1x3-10x2+5x+9

Введите степень многочлена 0
Введите свободный элемент 5
y=5

y=25x4+5x3-50x2+25x+45.

  • Случай, когда свободный элемент равен единице

Введите степень многочлена 3
Введите свободный элемент -4
Введите x в степени 1 2
Введите x в степени 2 10
Введите x в степени 3 1
y=1x3+10x2+2x-4

Введите степень многочлена 0
Введите свободный элемент 1
y=1

y=1x3+10x2+2x-4

  • Проверка основных формул сокращенного умножения

Введите степень многочлена 1
Введите свободный элемент 8
Введите x в степени 1 -5
y=5x+8

Введите степень многочлена 1
Введите свободный элемент -8
Введите x в степени 1 5
y=5x-8

y=25x2-64

3.4 Тесты для деления двух многочленов

  • Случай, когда многочлены равны

Введите степень многочлена 2
Введите свободный элемент 1
Введите x в степени 1 2
Введите x в степени 2 3
y=3x2+2x+1

Введите степень многочлена 2
Введите свободный элемент 1
Введите x в степени 1 2
Введите x в степени 2 3
y=3x2+2x+1y=1

3.5 Тесты для нахождения остатка от деления

  • Случай, когда многочлены равны

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 1

Введите x в степени 1 2

Введите x в степени 2 3

y=3x2+2x+1

Введите степень многочлена (натуральное число) 2

Введите свободный элемент

1

Введите x в степени 1 2

Введите x в степени 2 3

y=3x2+2x+1

y=0

  • Случай, когда первый многочлен больше другого

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 4

Введите x в степени 1 4

Введите x в степени 2 1

y=1x2+4x+4

Введите степень многочлена (натуральное число) 1

Введите свободный элемент 2

Введите x в степени 1 1

y=x+2

y=0

  • Случай, когда второй многочлен больше другого

Введите степень многочлена (натуральное число) 1

Введите свободный элемент 6

Введите x в степени 1 8

y=8x+6

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 8

Введите x в степени 2 1

y=x2+8x+7

y=8x+6

  • Случай, когда многочлены делятся без остатка

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 4

Введите x в степени 1 4

Введите x в степени 2 1

y=1x2+4x+4

Введите степень многочлена (натуральное число) 1

Введите свободный элемент 2

Введите x в степени 1 1

y=x+2

y=0

3.6 Тесты для операции отношения равно

  • Случай, когда степени многочленов разные

Введите степень многочлена (натуральное число) 4

Введите свободный элемент -6

Введите x в степени 1 9

Введите x в степени 2 2

Введите x в степени 3 -10

Введите x в степени 4 13

y=13x4-10x3+2x2+9x-6

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 1

Введите x в степени 1 -6

Введите x в степени 2 3

y=3x2-6x+1

0

  • Случай, когда степени одинаковые, но коэффициенты при x разные

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

4

Введите x в степени 1 8

Введите x в степени 2 -3

y=-3x2+8x+4

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

7

Введите x в степени 1 -5

Введите x в степени 2 10

y=10x2-5x+7

0

  • Случай, когда многочлены различаются только свободными элементами

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

6

Введите x в степени 1 4

Введите x в степени 2 -5

y=-5x2+4x+6

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 4

Введите x в степени 2 -5

y=-5x^2+4x^1+7

0

  • Случай, когда многочлены различаются только коэффициентами при x  с набольшей степенью

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 -5

Введите x в степени 2 3

y=3x2-5x+7

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

7

Введите x в степени 1 -5

Введите x в степени 2 -3

y=-3x2-5x+7

0

3.7 Тесты для операции отношения не равно

  • Случай, когда степени многочленов разные

Введите степень многочлена (натуральное число) 4

Введите свободный элемент -6

Введите x в степени 1 9

Введите x в степени 2 2

Введите x в степени 3 -10

Введите x в степени 4 13

y=13x4-10x3+2x2+9x-6

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 1

Введите x в степени 1 -6

Введите x в степени 2 3

y=3x2-6x+1

1

  • Случай, когда степени одинаковые, но коэффициенты при x разные

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 4

Введите x в степени 1 8

Введите x в степени 2 -3

y=-3x2+8x+4

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 -5

Введите x в степени 2 10

y=10x2-5x+7

1

  • Случай, когда многочлены различаются только свободными элементами

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

6

Введите x в степени 1 4

Введите x в степени 2 -5

y=-5x2+4x+6

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 4

Введите x в степени 2 -5

y=-5x^2+4x^1+7

1

  • Случай, когда многочлены различаются только коэффициентами при x  с набольшей степенью

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 7

Введите x в степени 1 -5

Введите x в степени 2 3

y=3x2-5x+7

Введите степень многочлена (натуральное число)

2

Введите свободный элемент

7

Введите x в степени 1 -5

Введите x в степени 2 -3

y=-3x2-5x+7

1

3.8 Тесты для  операции возведения многочлена в натуральную степень k

  • Случай, когда многочлен содержит только положительные коэффициенты и возводиться в четную степень

Введите степень многочлена (натуральное число) 1

Введите свободный элемент 2

Введите x в степени 1 1

y=x+2

Введите степень, в которую следует возвести многочлен: 2

y=x2+4x+4

  • Случай, когда многочлен содержит только отрицательные элементы и возводиться в четную степень

Введите степень многочлена (натуральное число)        2

Введите свободный элемент -1

Введите x в степени 1 -5

Введите x в степени 2 -3

y=-3x2-5x-1

Введите степень, в которую следует возвести многочлен: 2

y=9x4+30x3+31x2+10x+1

  • Случай, когда многочлен содержит только положительные коэффициенты и возводиться в нечетную степень

Введите степень многочлена (натуральное число) 2

Введите свободный элемент 5

Введите x в степени 1 2

Введите x в степени 2 3

y=3x2+2x+5

Введите степень, в которую следует возвести многочлен: 3

y=27x6+54x5+171x4+188x3+285x2+150x+125 .

  • Случай, когда многочлен содержит только отрицательные элементы и возводиться в нечетную степень

Введите степень многочлена (натуральное число) 1

Введите свободный элемент -4

Введите x в степени 1 -7

y=-7x-4

Введите степень, в которую следует возвести многочлен: 3

y=-343x3-588x2-336x-64

  • Случай, когда многочлен содержит и положительные и отрицательные коэффициенты и возводиться в нечетную степень

Введите степень многочлена (натуральное число) 1

Введите свободный элемент -5

Введите x в степени 1 3

y=3x-5

Введите степень, в которую следует возвести многочлен: 2

y=9x2-30x+25

  • Случай, когда многочлен содержит, и положительные отрицательные элементы и возводиться в нечетную степень

Введите степень многочлена (натуральное число) 1

Введите свободный элемент -4

Введите x в степени 1 7

y=7x-4

Введите степень, в которую следует возвести многочлен: 3

y=343x3-588x2+336x-64

3.9 Тесты для  вычисления производной от многочлена

  • Случай, когда многочлен содержит только положительные коэффициенты

Введите степень многочлена (натуральное число) 3

Введите свободный элемент 7

Введите x в степени 1 9

Введите x в степени 2 2

Введите x в степени 3 1

y=1x3+2x2+9x+7

y=3x2+4x+9

  • Случай, когда многочлен содержит только отрицательные коэффициенты

Введите степень многочлена (натуральное число) 3

Введите свободный элемент -4

Введите x в степени 1 -10

Введите x в степени 2 -1

Введите x в степени 3 -5

y=-5x3-1x2-10x-4

y=-15x2-2x-10

  • Случай, когда многочлен содержит и положительные и отрицательные коэффициенты

Введите степень многочлена (натуральное число) 3

Введите свободный элемент -6

Введите x в степени 1 5

Введите x в степени 2 -2

Введите x в степени 3 3

y=3x3-2x2+5x-6

y=9x2-4x+5

3.10 Тесты для вычисления значения в точке x0

  • Случай, когда x0 имеет положительное значение

Введите степень многочлена (натуральное число) 3

Введите свободный элемент -7

Введите x в степени 1 5

Введите x в степени 2 1

Введите x в степени 3 4

y=4x3+1x2+5x-7

Введите значение x: 3

y=125

  • Случай, когда x0 имеет отрицательное значение

Введите степень многочлена (натуральное число) 4

Введите свободный элемент 0

Введите x в степени 1 2

Введите x в степени 2 -4

Введите x в степени 3 0

Введите x в степени 4 3

y=3x4-4x2+2x

Введите значение x: -2

y=28

  • Случай, когда x0 равно нулю

Введите степень многочлена (натуральное число) 3

Введите свободный элемент -5

Введите x в степени 1 0

Введите x в степени 2 0

Введите x в степени 3 7

y=7x3-5

Введите значение x: 0

y=-5

  • Случай, когда в многочлене присутствует только свободный элемент

Введите степень многочлена (натуральное число) 0

Введите свободный элемент 3

y=3

Введите значение x: 5

y=3

  • Случай, когда в многочлене только один элемент в степени n

Введите степень многочлена (натуральное число) 3

Введите свободный элемент 0

Введите x в степени 1 0

Введите x в степени 2 0

Введите x в степени 3 4

y=4x3

Введите значение x: 10

y=4000

3.11 Тесты на вывод многочлена

  • Случай, когда многочлен содержит только положительные элементы

Введите степень многочлена (натуральное число) 3

Введите свободный элемент 2

Введите x в степени 1 9

Введите x в степени 2 7

Введите x в степени 3 3

y=3x3+7x2+9x+2

  • Случай, когда многочлен содержит только отрицательные элементы

Введите степень многочлена (натуральное число) 3

Введите свободный элемент -3

Введите x в степени 1 -5

Введите x в степени 2 -7

Введите x в степени 3 -2

y=-2x3-7x2-5x-3

  • Случай, когда многочлен содержит коэффициенты и положительные и отрицательные

Текущая кодовая страница: 1251

Введите степень многочлена (натуральное число) 4

Введите свободный элемент 2

Введите x в степени 1 -5

Введите x в степени 2 -10

Введите x в степени 3 5

Введите x в степени 4 3

y=3x4+5x3-10x2-5x+2

  • Случай, когда многочлен содержит нулевые коэффициенты

Введите степень многочлена (натуральное число) 4

Введите свободный элемент3

Введите x в степени 1 0

Введите x в степени 2 0

Введите x в степени 3 0

Введите x в степени 4 6

y=6x4+3

  • Случай, когда в многочлене нет свободного элемента

Введите степень многочлена (натуральное число)3

Введите свободный элемент0

Введите x в степени 1 4

Введите x в степени 2 -7

Введите x в степени 3 2

y=2x3-7x2+4x

  • Случай, когда в многочлене только свободный элемент

Введите степень многочлена (натуральное число) 0

Введите свободный элемент5

y=5

3.12 Тесты на нахождение наибольшего общего делителя двух многочленов

                Возьмем два многочлена, и найдем НОД сами, а затем сверим результат с работой программы.

  1. Даны два многочлена А=x3 +3x2 +3x+2 и В=x3+2x2 +2x+1. Применив алгоритм Евклида, получили НОД(А,В)= x2 +x+1;

Результаты работы программы:

Первый многочлен:

Введите степень многочлена (натуральное число) 3

Введите свободный элемент 2

Введите x в степени 1 3

Введите x в степени 2 3

Введите x в степени 3 1

y=x3+3x2+3x+2

Второй многочлен:

Введите степень многочлена (натуральное число) 3

Введите свободный элемент1

Введите x в степени 1 2

Введите x в степени 2 2

Введите x в степени 3 1

y=x3+2x2+2x+1

Наибольший общий делитель двух многочленов:

y=1x2+1x+1

Результаты расчетов «вручную» и при помощи программы совпадают.

  1. Даны два многочлена А=x2 –x-3 и В=x+1. Применив алгоритм Евклида, получили НОД(А,В)= -1;

Результаты работы программы:

Первый многочлен:

            Введите степень многочлена (натуральное число) 2

            Введите свободный элемент-3

            Введите x в степени 1 -1

            Введите x в степени 2 1

            y=1x2-x-3

Второй многочлен:

            Введите степень многочлена (натуральное число) 1

            Введите свободный элемент 1

             Введите x в степени 1 1

              y=x+1

Наибольший общий делитель двух многочленов:

            y=1

Результаты расчетов «вручную» и при помощи программы совпадают.

 

  1. Даны два многочлена А=x2 –x-3 и В=x+1. Применив алгоритм Евклида, получили НОД(А,В)= -1;

Результаты работы программы:

Первый многочлен:

            Введите степень многочлена (натуральное число) 3

            Введите свободный элемент -1

            Введите x в степени 1 2

            Введите x в степени 2 -2

            Введите x в степени 3 1

            y=1x3-2x2+2x-1

Второй многочлен:

            Введите степень многочлена (натуральное число) 3

            Введите свободный элемент 1

            Введите x в степени 1 0

           Введите x в степени 2 -1

           Введите x в степени 3 1

          y=1x3-1x2+1

           y=-1x2+2x-2

Результаты расчетов «вручную» и при помощи программы совпадают.


4. Руководство пользователя

         Открываем программу «Многочлены» двойным щелчком мыши. Затем следуем инструкциям программы.

Программа позволяет выполнять основные операции над многочленами.

Многочлены представлены в стандартном виде, начиная от большей степени.

« ^ » обозначает, какая степень у данного x.

5. Заключение

          В данной курсовой работе мы, используя полученные ранее математические знания, написали работоспособную программу, которая может: складывать, вычитать, умножать, делить многочлены натуральной степени, находить значение в указанной точке, производную от многочлена, а так же настроены вывод результатов и ввод данных, который делает «общение» с пользователем более простым и понятным.

         Данную программу можно использовать для решения и проверки задач средней, а так же старшей школ.

Список использованных источников

  1. Ю. А.  Макарычев  Алгебра. 7 класс. Учебник для общеобразовательных учреждений – СПб.: Просвещение, 2007
  2. Н. Я. Виленкин Математика. 5 класс. Учебник для общеобразовательных учреждений  – СПб.: Мнемозина, 2005
  3. И. Г. Семакин, А.П. Шестаков Основы программирования. Среднее профессиональное образование  – СПб.: Высшая школа, НМЦ СПО, Мастерство, 2001

Приложения

1. Найти наибольший общий делитель многочленов P(x) и Q(x).

#include <iostream>

#include <cmath>

#include <string>

using namespace std;

 

class mnogochlen {

int stepen;

int koof[100];

public

          

          void sozdanie();/* создание многочлена */

          void vivod();/* вывод многочлена */

          mnogochlen operator +(mnogochlen m); /* сложение многочленов */

          mnogochlen operator -(mnogochlen m); /* вычитание многочленов */

          mnogochlen operator *(mnogochlen m); /* умножение многочленов*/

          bool operator ==(mnogochlen m); /* равны ли многочлены? */

          bool operator !=(mnogochlen m); /* не равны ли многочлены? */

          mnogochlen proizvodnaa(); /* нахождение производной от многочлена */

          double znachenie(double x);/* нахождение значения при заданном x */

          mnogochlen stepeny(int k); /*возведение многочлена в степень*/

          mnogochlen operator /(mnogochlen m);/*деление многочленов*/

          mnogochlen operator %(mnogochlen m);/*нахождение остатка от деления*/

         

};

 

// находжение остатака от деления

mnogochlen mnogochlen :: operator %(mnogochlen m)

{  mnogochlen c,d,g; bool a;

  int i,l,k;

l=stepen-m.stepen;

for(i=0;i<100;i++)

{c.koof[i]=0; d.koof[i]=0;}

 

 

 

while(stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

d=m*c;

  *this=*this-d;

}

                    

c.stepen=l;

 

return *this;

}

 

//Деление многочленов

mnogochlen mnogochlen :: operator /(mnogochlen m)

{  mnogochlen c,d,g;

  int i,l,k;

l=stepen-m.stepen;

for(i=0;i<100;i++)

{c.koof[i]=0; d.koof[i]=0;}

while(stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

d=m*c;

  *this=*this-d;

}                      

c.stepen=l;

return c;

}

 

 

/* Нахождение производной от многочлена */

 

mnogochlen mnogochlen::proizvodnaa()

{mnogochlen c; int i, j;

   

      c.stepen=stepen;

      for(i=1;i<=stepen;i++)

        {c.koof[i-1]=koof[i]*i;}c.stepen--;

       

      return c;

     

}

 

/* Равны ли многочлены?*/

 

bool mnogochlen :: operator ==(mnogochlen m)

bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=0;break;}

        else {priznak=1;}   

     }             }

return priznak;

 

      }

     

/* не равны ли многочлены?*/

 

bool mnogochlen :: operator !=(mnogochlen m)

bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=1;break;}

        else {priznak=0;}   

     }             }

return priznak;

 

      }

     

 /* умножение многочленов */

     

mnogochlen mnogochlen :: operator *(mnogochlen m)

 

{mnogochlen d;

    int i,j,k;

    k=stepen+m.stepen;

 

for (i=0;i<=k;i++)

    {

                    d.koof[i]=0;

    }

   

for (i=0;i<=stepen;i++)

    {

                       for(j=0;j<=m.stepen;j++)

    { 

                              d.koof[i+j]+=koof[i]*m.koof[j];

                              }

    }

   

    d.stepen=m.stepen+stepen;

   

    

return d ;

    }

 

/* разность многочленов */

 

mnogochlen mnogochlen :: operator -(mnogochlen m)

{mnogochlen d;

int i,max;

   

if(stepen>m.stepen) max=stepen; else max=m.stepen;

    

if(stepen>m.stepen)

    {

     for(i=m.stepen+1;i<=max;i++)

                   m.koof[i]=0;}

     else

     {

          for(i=stepen+1;i<=max;i++)

     koof[i]=0;

    

     }

    

    for (i=0;i<=max;i++)

    {

        d.koof[i]=koof[i]-m.koof[i];

    }

       d.stepen=max;

      

       for(i=max;i>0;i--)

       {if(d.koof[i]==0){d.stepen--;} else{break;}}

      

     return d ;

}

 

/* нахождение значения многочлена*/

 

double mnogochlen::znachenie(double x)

{double y;

int i;

     

       y=koof[0];

     

      for(i=1;i<=stepen;i++)

        {y+=pow(x,i)*koof[i];}

       

      return y;}

     

 

/* сложение многочленов*/

 

mnogochlen mnogochlen :: operator +(mnogochlen m)

{mnogochlen d;

int i,max;

 

if(stepen>m.stepen) max=stepen; else max=m.stepen;

 

if(stepen>m.stepen)

{

                   for(i=m.stepen+1;i<=max;i++)

                    m.koof[i]=0;}

else

      {             for(i=stepen+1;i<=max;i++)

                    koof[i]=0;

      }

 

     for (i=0;i<=max;i++)

    {

        d.koof[i]=koof[i]+m.koof[i];

    }

       d.stepen=max;

      

       for(i=max;i>0;i--)

       {if(d.koof[i]==0){d.stepen--;} else{break;}}

      

     return d ;

   return d ;

}

 

/* Создание многочлена */

 

void  mnogochlen::sozdanie()

{ int i;

 

 

 

cout<<”Введите степень многочлена (натуралное число)"<<endl;

cin>>stepen;

 cout<<"Введите свободный элемент"<<endl;

cin>>koof[0];

     for(i=1;i<=stepen;i++)

    

     { cout<<"Введите x в степени "<<i<<" ";

      cin>>koof[i];

 

      }

}

 

/* вывод многочлена */

 

void mnogochlen::vivod()

{int j,i;

 

cout<<"y=";

if(stepen==0){cout<<koof[0];} else{

    if(koof[stepen]>0)

          {

                      cout<<koof[stepen]<<"x^"<<stepen;

          }

   

    else

      {  

                      if(koof[stepen]<0) {cout<<koof[stepen]<<"x^"<<stepen;}

      else{cout<<"";}

      }

     

    j=stepen-1;

   

    for(i=j;i>=1;i--)

   

    { if(koof[i]>0)

          { cout<<"+"<<koof[i]<<"x^"<<i;}

         

      else

      {   if(koof[i]<0) {cout<<koof[i]<<"x^"<<i;}

     

      else{cout<<"";}}

    }

    if(koof[0]>0)

          { cout<<"+"<<koof[0]<<endl;}

         

      else

      {   if(koof[0]<0) {cout<<koof[i]<<endl;}

     

      else{cout<<endl;}

      }

}

}

 

 /* возведение многочлена в степень */

 mnogochlen mnogochlen ::stepeny(int k)

{int i;

mnogochlen d,c;

      c.stepen=stepen;

  for(i=0;i<=stepen;i++)

  {c.koof[i]=koof[i];}

   d.stepen=0;

   d.koof[0]=1;

   for(i=1;i<=k;i++)

  {d=d*c;

     }

return d;

}

 

 

int main()

{ mnogochlen P,Q,c; double s,r;

  system("chcp 1251");

         cout<<"Введите первый многочлен”<<endl;

          P.sozdanie();

          P.vivod();

          cout<<"Введите второй многочлен"<<endl;

          Q.sozdanie();

          Q.vivod();

          cout<<"Введите степень, в которую следует возвести первый многочлен"<<endl;

          cin>>s;

          P=P.stepeny(s);

          cout<<" Введите степень, в которую следует возвести второй многочлен "<<endl;

          cin>>r;

          Q=Q.stepeny(r);

          cout<<"Результат операций P^s-Q^r"<<endl;

          c=P-Q;

           c.vivod();

          system ("PAUSE");

     return 0;

          }

2. На

#include <iostream>

#include <cmath>

#include <string>

using namespace std;

 

class mnogochlen {

public

          int stepen;

int koof[100];

          void sozdanie();

          void vivod();

          mnogochlen operator +(mnogochlen m); /* ñëîæåíèå */

          mnogochlen operator -(mnogochlen m); /* âû÷èòàíèå */

          mnogochlen operator *(mnogochlen m); /* óìíîæåíèå */

          bool operator ==(mnogochlen m); /* ñðàâíåíèå ìíîãî÷ëåíîâ */

          bool operator !=(mnogochlen m); /* ñðàâíåíèå ìíîãî÷ëåíîâ */

          mnogochlen proizvodnaa(); /* ïðîèçâîäíàÿ */

          double znachenie(double x);/* íàõîæäåíèå çíà÷åíèÿ ôóíêöèè*/

          mnogochlen stepeny(int k); /*âîçâåäåíèå ìíîãî÷ëåíà â ñòåïåíü*/

          mnogochlen operator /(mnogochlen m);/*äåëåíèå ìíîãî÷ëåíà*/

          mnogochlen operator %(mnogochlen m);/*îñòàòîê îò äåëåíèÿ ìíîãî÷ëåíîâ*/

          mnogochlen NOD(mnogochlen a, mnogochlen b);

};

 

// Остаток от деления

{  mnogochlen c,d,g; bool a;

  int i,l,k;

l=stepen-m.stepen;

for(i=0;i<100;i++)

{c.koof[i]=0; d.koof[i]=0;}

 

 

 

while(stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

d=m*c;

  *this=*this-d;

}

                   

c.stepen=l;

 

return *this;

}

 

//Деление многочленов

mnogochlen mnogochlen :: operator /(mnogochlen m)

{  mnogochlen c,d,g;

  int i,l,k;

l=stepen-m.stepen;

for(i=0;i<100;i++)

{c.koof[i]=0; d.koof[i]=0;}

while(stepen>=m.stepen)

{ c.stepen=stepen-m.stepen;

 c.koof[c.stepen]=koof[stepen]/m.koof[m.stepen];

d=m*c;

  *this=*this-d;

}                      

c.stepen=l;

return c;

}

 

 

/* Производная от многочлена*/

 

mnogochlen mnogochlen::proizvodnaa()

{mnogochlen c; int i, j;

   

      c.stepen=stepen;

      for(i=1;i<=stepen;i++)

        {c.koof[i-1]=koof[i]*i;}c.stepen--;

       

      return c;

     

}

 

/* Равны ли многочлены?*/

 

bool mnogochlen :: operator ==(mnogochlen m)

bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=0;break;}

        else {priznak=1;}   

     }             }

return priznak;

 

      }

     

/* Не равны ли многочлены?*/

 

bool mnogochlen :: operator !=(mnogochlen m)

bool priznak;

  int i;

  if(stepen!=m.stepen){priznak=0;}

  else  {for(i=0;i<=stepen;i++)

    {  

        if(koof[i]!=m.koof[i]) {priznak=1;break;}

        else {priznak=0;}   

     }             }

return priznak;

 

      }

     

 /* Произведение многочленов*/

     

mnogochlen mnogochlen :: operator *(mnogochlen m)

 

{mnogochlen d;

    int i,j,k;

    k=stepen+m.stepen;

 

for (i=0;i<=k;i++)

    {

                    d.koof[i]=0;

    }

   

for (i=0;i<=stepen;i++)

    {

                       for(j=0;j<=m.stepen;j++)

    { 

                              d.koof[i+j]+=koof[i]*m.koof[j];

                              }

    }

   

    d.stepen=m.stepen+stepen;

   

    

return d ;

    }

 

/* Разность многочленов */

 

mnogochlen mnogochlen :: operator -(mnogochlen m)

{mnogochlen d;

int i,max;

   

if(stepen>m.stepen) max=stepen; else max=m.stepen;

    

if(stepen>m.stepen)

    {

     for(i=m.stepen+1;i<=max;i++)

                   m.koof[i]=0;}

     else

     {

          for(i=stepen+1;i<=max;i++)

     koof[i]=0;

    

     }

    

    for (i=0;i<=max;i++)

    {

        d.koof[i]=koof[i]-m.koof[i];

    }

       d.stepen=max;

      

       for(i=max;i>0;i--)

       {if(d.koof[i]==0){d.stepen--;} else{break;}}

      

     return d ;

}

 

/* нахождение значения значения в точке x0*/

 

double mnogochlen::znachenie(double x)

{double y;

int i;

       y=koof[0];

     

      for(i=1;i<=stepen;i++)

        {y+=pow(x,i)*koof[i];}

       

      return y;}

     

 

/* сложение многочленов */

 

mnogochlen mnogochlen :: operator +(mnogochlen m)

{mnogochlen d;

int i,max;

 

if(stepen>m.stepen) max=stepen; else max=m.stepen;

 

if(stepen>m.stepen)

{

                   for(i=m.stepen+1;i<=max;i++)

                    m.koof[i]=0;}

else

      {             for(i=stepen+1;i<=max;i++)

                    koof[i]=0;

      }

 

     for (i=0;i<=max;i++)

    {

        d.koof[i]=koof[i]+m.koof[i];

    }

       d.stepen=max;

      

       for(i=max;i>0;i--)

       {if(d.koof[i]==0){d.stepen--;} else{break;}}

      

     return d ;

   return d ;

}

 

/* Создание многочлена */

 

void  mnogochlen::sozdanie()

{ int i;

 

 

 

cout<<"Введите степень многочлена (натуральное число):"<<endl;

cin>>stepen;

 cout<<"введите свободный элемент"<<endl;

cin>>koof[0];

     for(i=1;i<=stepen;i++)

    

     { cout<<"Введите x в степени "<<i<<" ";

      cin>>koof[i];      }}

 

/* вывод многочлена */

 

void mnogochlen::vivod()

{int j,i;

 

cout<<"y=";

if(stepen==0){cout<<koof[0];} else{

    if(koof[stepen]>0)

          {

                      cout<<koof[stepen]<<"x^"<<stepen;

          }

   

    else

      {  

                      if(koof[stepen]<0) {cout<<koof[stepen]<<"x^"<<stepen;}

      else{cout<<"";}

      }

     

    j=stepen-1;

   

    for(i=j;i>=1;i--)

   

    { if(koof[i]>0)

          { cout<<"+"<<koof[i]<<"x^"<<i;}

         

      else

      {   if(koof[i]<0) {cout<<koof[i]<<"x^"<<i;}

     

      else{cout<<"";}}

    }

    if(koof[0]>0)

          { cout<<"+"<<koof[0]<<endl;}

         

      else

      {   if(koof[0]<0) {cout<<koof[i]<<endl;}

     

      else{cout<<endl;}      }}}

 

 /* возведение многочлена в степень */

 mnogochlen mnogochlen ::stepeny(int k)

{int i;

mnogochlen d,c;

   

  c.stepen=stepen;

  for(i=0;i<=stepen;i++)

  {c.koof[i]=koof[i];}

   d.stepen=0;

   d.koof[0]=1;

   for(i=1;i<=k;i++)

  {d=d*c;     }

return d;}

 

 

/*Нахождение НОД двух многочленов*/

 

mnogochlen NOD(mnogochlen a, mnogochlen b)

{mnogochlen r1, r2, r3;

if(a.stepen>=b.stepen){r1=a;r2=b;}

     else{r1=b;r2=a;}

     while(r2.stepen>0)

     { r3=(r1%r2);

     if(r3.stepen==0)

     {return r2;}

     r1=r2;     r2=r3;                    }   return r3;  }

 

int main()

{ mnogochlen a,b,c; double y,x,k;bool m; int l;

  system("chcp 1251");

 

           cout<<"Первый многочлен:  "<<endl;

           cout<<endl;

 

          a.sozdanie();

          a.vivod();

          

          cout<<endl;

          cout<<"Второй многочлен: "<<endl;

         

          b.sozdanie();

          b.vivod();

          cout<<endl;

 

          cout<<"Наибольший общий делитель двух многочленов: "<<endl;

          c=NOD(a,b);

         

          c.vivod();

                            

         system ("PAUSE");

         return 0;

          }

         

Похожие работы на - Монголо-татарское нашествие

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!