Вычислить и вывести коэффициенты многочленов частного и остатка от деления - 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();
}

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы