ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 115

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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


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

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


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


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

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

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

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


void mnogochlen::sozdanie()

{ int i;
cout<<"Введите степень многочлена "<
cin>>stepen;

cout<<"Введите свободный элемент"<
cin>>koof[0];

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

{ cout<<"Введите x в степени "<
cin>>koof[i];
}

}

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

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

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

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

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

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


void mnogochlen::vivod()

{int j,i;
cout<<"y=";

if(stepen==0){cout<
if(koof[stepen]>0)

{

cout<
}

else

{

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

}

j=stepen-1;

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

{ if(koof[i]>0)

{ cout<<"+"<
else

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

}

if(koof[0]>0)

{ cout<<"+"<
else

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

}

}

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

  • Определяем больший из введенных многочленов них по степени;

  • Обнуляем в меньшем многочлене коэффициенты при 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