Вычислить и вывести коэффициенты многочленов частного и остатка от деления - C (СИ)
Формулировка задачи:
Можете пожалуйста обьеснить как работает программа....
Задание^Ввести степени и коэффициенты двух многочленов p1(x) и p2(x).
Считать , что все коэффициенты могут принимать значения 0 или 1
Вычислить и вывести коэффициенты многочленов частного
и остатка от деления p1(x) на p2(x). Все операции выполнять в
арифметике по mod 2.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main()
{
int dlin1, dlin2;
int mnog1[10], mnog2[10];
int mnogdiv[10];
printf("Enter degree of first multinomial\n");
scanf("%d", &dlin1);
for (int i=dlin1; i>=0; i--)
{
printf("Enter factor x^%d = ", i);
scanf("%d", &mnog1[i]);
if ((i==dlin1) && (mnog1[i]==0))
{
printf("Degrees don't coincide");
getchar();
getchar();
exit(1);
}
}
printf("Enter degree of second multinomial\n");
scanf("%d", &dlin2);
for ( i=dlin2; i>=0; i--)
{
printf("Enter factor x^%d = ", i);
scanf("%d", &mnog2[i]);
if ((i==dlin2) && (mnog2[i]==0))
{
printf("Degrees don't coincide");
getchar();
getchar();
exit(1);
}
}
int f=dlin1-dlin2;
int j=f;
if (dlin2>dlin1)
{
printf("Result of division (factors) = 0, rest (factors) = ");
for (int i=dlin2; i>=0; i--)
printf("%d ",mnog2[i]);
}
else
{
for (;;)
{
int fact=(mnog1[dlin1]/mnog2[dlin2]);
int k2=dlin2;
mnogdiv[j]=fact;
j--;
for (int i=dlin1; i>=(dlin1-dlin2); i--)
{
mnog1[i]=abs((mnog1[i]-fact*mnog2[k2]) % 2);
k2--;
}
dlin1--;
if (dlin1<dlin2)
break;
}
printf("Result of division (factors) = ");
for (int i=f; i>=0; i--)
printf("%d ",mnogdiv[i]);
printf("\nRest (factors) = ");
for ( i=dlin1; i>=0; i--)
printf("%d ",mnog1[i]);
}
getchar();
getchar();
}Решение задачи: «Вычислить и вывести коэффициенты многочленов частного и остатка от деления»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main()
{
int dlin1, dlin2;//Степени первого и второго многочлена
int mnog1[10], mnog2[10];//коэффициенты 1-го и 2го многочлена
int mnogdiv[10];//коэффициенты частного
printf("Enter degree of first multinomial\n");
scanf("%d", &dlin1);//читаем степень и коэффициенты 1го многочлена
for (int i=dlin1; i>=0; i--)
{
printf("Enter factor x^%d = ", i);
scanf("%d", &mnog1[i]);
if ((i==dlin1) && (mnog1[i]==0))
{
printf("Degrees don't coincide");
getchar();
getchar();
exit(1);
}
}
printf("Enter degree of second multinomial\n");
scanf("%d", &dlin2);//читаем степень и коэффициенты 2го многочлена
for ( i=dlin2; i>=0; i--)
{
printf("Enter factor x^%d = ", i);
scanf("%d", &mnog2[i]);
if ((i==dlin2) && (mnog2[i]==0))
{
printf("Degrees don't coincide");
getchar();
getchar();
exit(1);
}
}
int f=dlin1-dlin2;//смотрим разницу степеней, чтобы узнать какой степени будет частное
int j=f;
if (dlin2>dlin1)//если степень 2го больше чем 1го, то 1ый сразу является остатком, а частное 0
{
printf("Result of division (factors) = 0, rest (factors) = ");
for (int i=dlin2; i>=0; i--)
printf("%d ",mnog2[i]);
}
else
{
for (;;)//если же все-таки надо делить:
{
int fact=(mnog1[dlin1]/mnog2[dlin2]);//посчитали в столбик следующую цифру
int k2=dlin2;
mnogdiv[j]=fact;//записали цифру в результаты частного
j--;
for (int i=dlin1; i>=(dlin1-dlin2); i--)//умножаем на цифру и отнимаем - получаем остаток на данном этапе
{
mnog1[i]=abs((mnog1[i]-fact*mnog2[k2]) % 2);
k2--;
}
dlin1--;//степень уменьшилась на 1
if (dlin1<dlin2)//так продолжаем пока степень первого не меньше степени второго
break;
}
printf("Result of division (factors) = ");//выводим результат частного
for (int i=f; i>=0; i--)
printf("%d ",mnogdiv[i]);
printf("\nRest (factors) = ");//в первом многочлене у нас остался остаток - выводим и его
for ( i=dlin1; i>=0; i--)
printf("%d ",mnog1[i]);
}
getchar();
getchar();
}