Добавлен: 03.02.2024
Просмотров: 196
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
2.2 Неформальное изложение алгоритма
3.1 Тесты для сложения двух многочленов
3.2 Тесты для вычитания двух многочленов
3.3 Тесты для умножения двух многочленов
3.4 Тесты для деления двух многочленов
3.5 Тесты для нахождения остатка от деления
3.6 Тесты для операции отношения равно
3.7 Тесты для операции отношения не равно
3.8 Тесты для операции возведения многочлена в натуральную степень k
3.9 Тесты для вычисления производной от многочлена
3.10 Тесты для вычисления значения в точке x0
3.11 Тесты на вывод многочлена
3.12 Тесты на нахождение наибольшего общего делителя двух многочленов
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