Вычислить и вывести коэффициенты многочленов частного и остатка от деления - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д