Форум программистов, компьютерный форум CyberForum.ru

Произведение многочленов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Faramir02
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 12
31.10.2010, 10:32     Произведение многочленов #1
Здравствуйте. Мне нужно решить задачу, вот текст:
По заданным коэффициентам многочлена n-й степени А(х) и многочлена m-й степени В(х) определить коэффициенты многочлена С(х)=А(х)*В(х).

Программу то написал, но она не складывает подобные члены, из-за чего получается неверный рез-тат. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <conio.h>
void main()
    {
      const ArrLength = 100;
 
      int n, m, k, tmp, i, g, x;
      int N[ArrLength];
      int M[ArrLength];
      int R[ArrLength];
      x = -1;
      tmp = 0;
 
      for (k = 0; k < ArrLength; k++)
        {
          N[k] = 0;
          M[k] = 0;
          R[k] = 0;
        }
 
 
      printf("Введите степень 1 многочлена*: ");
      scanf("%d", &n);
      printf("\nВведите коэффициенты: ");
 
      for (k = 0; k <= n; k++)
        scanf("%d", &N[k]);
 
 
      printf("Введите степень 2 многочлена*: ");
      scanf("%d", &m);
      printf("\nВведите коэффициенты: ");
 
      for (k = 0; k <= m; k++)
        scanf("%d", &M[k]);
 
        for (i = 0; i <= n+m; i++)
     {
       for (g = 0; g <= m+n; g++)
        {
          tmp = N[i] * M[g];
 
          if (tmp>0||tmp<0)
            {
                x = x + 1;
                R[x] = tmp;
                printf ("\n%d', R[x]);           
            }
         }
       }
       getch();
  }
Я нашел на одном форуме такое указание:
Пусть у члена с х степень k. Тогда для него коэф. равен а0*b(k)+a1*b(k-1)+...+a(k-1)b1+ak*b0
Но как реализовать это в программе я не понял.

Добавлено через 16 часов 53 минуты
Ну что. никто не поможет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2010, 10:32     Произведение многочленов
Посмотрите здесь:

C++ сумма 2х многочленов
Перемножение многочленов C++
C++ Умножение многочленов
вычисление многочленов на C++ C++
C++ Последовательность многочленов H0(x),H1(x)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
31.10.2010, 11:30     Произведение многочленов #2
Цитата Сообщение от Faramir02 Посмотреть сообщение
Здравствуйте. Мне нужно решить задачу, вот текст:
По заданным коэффициентам многочлена n-й степени А(х) и многочлена m-й степени В(х) определить коэффициенты многочлена С(х)=А(х)*В(х).

Программу то написал, но она не складывает подобные члены, из-за чего получается неверный рез-тат. Вот код:
Код
#include <stdio.h>
#include <conio.h>
void main()
    {
      const ArrLength = 100;

      int n, m, k, tmp, i, g, x;
      int N[ArrLength];
      int M[ArrLength];
      int R[ArrLength];
      x = -1;
      tmp = 0;

      for (k = 0; k < ArrLength; k++)
        {
          N[k] = 0;
          M[k] = 0;
          R[k] = 0;
        }


      printf("Введите степень 1 многочлена*: ");
      scanf("%d", &n);
      printf("\nВведите коэффициенты: ");

      for (k = 0; k <= n; k++)
        scanf("%d", &N[k]);


      printf("Введите степень 2 многочлена*: ");
      scanf("%d", &m);
      printf("\nВведите коэффициенты: ");

      for (k = 0; k <= m; k++)
        scanf("%d", &M[k]);

        for (i = 0; i <= n+m; i++)
     {
       for (g = 0; g <= m+n; g++)
        {
          tmp = N[i] * M[g];

          if (tmp>0||tmp<0)
            {
                x = x + 1;
                R[x] = tmp;
                printf ("\n%d', R[x]);           
            }
         }
       }
       getch();
  }
Я нашел на одном форуме такое указание:
Пусть у члена с х степень k. Тогда для него коэф. равен а0*b(k)+a1*b(k-1)+...+a(k-1)b1+ak*b0
Но как реализовать это в программе я не понял.

Добавлено через 16 часов 53 минуты
Ну что. никто не поможет?
Разумно записывать коэффициенты при степенях в массив. Но может быть сделать примерно такой алгоритм:
1) Считать коэффициенты 1ого и 2ого многочленов;
2) Сравнить степени многочленов и если 1 степень больше другой, то дописать в массив нули. Т.е. например n=3; m=1 => N[3] = a3; N[2] = a2; N[1] = a1; N[0] = a0, а для M[3] = 0; M[2] = 0; M[1] = b1; M[0] = b0. Ну и потом сложить соответствущие элементы C[i] = N[i] + M[i]
Faramir02
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 12
31.10.2010, 11:41  [ТС]     Произведение многочленов #3
Ну и потом сложить соответствущие элементы C[i] = N[i] + M[i]
Складывать нельзя , ведь у А(х) и В(х) первые свободные элементы будут складываться, а не перемножаться. К примеру у А(х) 1 элемент=1 и у В(х) 1 элемент=1, тогда у С(х) 1элемент=2, а не 1
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
31.10.2010, 11:47     Произведение многочленов #4
Цитата Сообщение от Faramir02 Посмотреть сообщение
Складывать нельзя , ведь у А(х) и В(х) первые свободные элементы будут складываться, а не перемножаться. К примеру у А(х) 1 элемент=1 и у В(х) 1 элемент=1, тогда у С(х) 1элемент=2, а не 1
Извиняюсь, неправильно прочел задание. Ну перемножение с приведением подобных делается несложно. Вот тут http://www.pm298.ru/mnog.php например есть формула.
Faramir02
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 12
31.10.2010, 12:32  [ТС]     Произведение многочленов #5
Млин, а вы бы не могли написать этот цикл, а то ничего не получается...?
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
31.10.2010, 12:38     Произведение многочленов #6
Цитата Сообщение от Faramir02 Посмотреть сообщение
Млин, а вы бы не могли написать этот цикл, а то ничего не получается...?
Вот как то так
C
1
2
3
for(k=0; k<=n+m-1; k++)
    for(i=0; i<=l-1; l++)
        C[k] = C[k] + A[i]*B[k-i];
Тут l есть максимальное из чисел n, m. Ну и как я уже писал нужно немного подредактировать массивы из коэффициентов многочленов.
Faramir02
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 12
31.10.2010, 13:07  [ТС]     Произведение многочленов #7
Мда, невезучий у мея день, ничего не выходит, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <conio.h>
void main()
    {
      const ArrLength = 100;
 
      int n, m, k, i, g, l;
      int A[ArrLength];
      int B[ArrLength];
      int R[ArrLength];
      l=0;
 
      for (k = 0; k < ArrLength; k++)
        {
          A[k] = 0;
          B[k] = 0;
          R[k] = 0;
        }
 
 
      printf("Введите степень 1 многочлена*: ");
      scanf("%d", &n);
      printf("\nВведите коэффициенты: ");
 
      for (i = 0; i <= n; i++)
        scanf("%d", &A[i]);
 
 
      printf("Введите степень 2 многочлена*: ");
      scanf("%d", &m);
      printf("\nВведите коэффициенты: ");
 
      for (i = 0; i <= m; i++)
        scanf("%d", &B[i]);
 
        for (k = 0; k <= n+m-1; k++)
             for  (i=0; i<=l-1;l++)
                R[k]=R[k]+A[i]*B[k-i];
 
 
           printf ("\n%d", R[k]);           
            
        getch();
  }
Уж поправьте остолопа.
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
31.10.2010, 13:54     Произведение многочленов #8
Цитата Сообщение от Faramir02 Посмотреть сообщение
Мда, невезучий у мея день, ничего не выходит, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <conio.h>
void main()
    {
      const ArrLength = 100;
 
      int n, m, k, i, g, l;
      int A[ArrLength];
      int B[ArrLength];
      int R[ArrLength];
      l=0;
 
      for (k = 0; k < ArrLength; k++)
        {
          A[k] = 0;
          B[k] = 0;
          R[k] = 0;
        }
 
 
      printf("Введите степень 1 многочлена*: ");
      scanf("%d", &n);
      printf("\nВведите коэффициенты: ");
 
      for (i = 0; i <= n; i++)
        scanf("%d", &A[i]);
 
 
      printf("Введите степень 2 многочлена*: ");
      scanf("%d", &m);
      printf("\nВведите коэффициенты: ");
 
      for (i = 0; i <= m; i++)
        scanf("%d", &B[i]);
 
        for (k = 0; k <= n+m-1; k++)
             for  (i=0; i<=l-1;l++)
                R[k]=R[k]+A[i]*B[k-i];
 
 
           printf ("\n%d", R[k]);           
            
        getch();
  }
Уж поправьте остолопа.
Цикл надо немного по-другому написать, моя ошибка.
C
1
2
3
for (k = 0; k <= n+m; k++)
    for (i=0; i<=k;i++)
    R[k]=R[k]+A[i]*B[k-i];
И как я уже говорил
2) Сравнить степени многочленов и если 1 степень больше другой, то дописать в массив нули. Т.е. например n=3; m=1 => N[3] = a3; N[2] = a2; N[1] = a1; N[0] = a0, а для M[3] = 0; M[2] = 0; M[1] = b1; M[0] = b0. Ну и потом сложить соответствущие элементы C[i] = N[i] + M[i]
Faramir02
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 12
31.10.2010, 14:52  [ТС]     Произведение многочленов #9
Фууф, все сделал, dasalam, спасибо большое:
Вот правильный код, если кому-либо будет нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <conio.h>
void main()
    {clrscr();
     const ArrLenght=100;
 
     int n, m, k, tmp, i, g, x;
     int N[ArrLenght];
     int M[ArrLenght];
     int R[ArrLenght];
     x=-1;
     tmp=0;
 
     for (k=0;k<ArrLenght; k++)
        {
         N[k]=0;
         M[k]=0;
         R[k]=0;
        }
     printf("\nvvedite stepen A(x): \n");
     scanf("%d", &n);
     printf("\nvvedite koefficienti: \n");
 
     for (k=0;k<=n;k++)
 
     scanf("%d", &N[k]);
 
     printf("\nvvedite stepen B(x): \n");
     scanf("%d", &m);
     printf("\nvvedite koefficienti: \n");
 
     for (k=0;k<=m; k++)
      scanf("%d", &M[k]);
 
     for (i=0;i<=n+m;i++)
    {
     for (g=0; g<=i; g++)
      {
       R[i]=R[i]+N[g]*M[i-g];
      }
        x=x+1;
        printf("\n%d", R[i]);
    }
    getch();
     }
Пришлось даже заново код переписать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2010, 15:12     Произведение многочленов
Еще ссылки по теме:

Перемножение двух многочленов C++
C++ Деление многочленов 4 степени
Сумма многочленов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dasalam
10 / 10 / 0
Регистрация: 14.12.2008
Сообщений: 59
31.10.2010, 15:12     Произведение многочленов #10
Вприцнипе можно еще нмного покрасивей сделать. Например выделять массив не из 100 элементов, а только после того как известна степень многочлена. И еще
C
1
2
3
4
5
         for (k=0;k<ArrLenght; k++)
                {
                 N[k]=0;
                 M[k]=0;
                 R[k]=0;
Можно обойтись без этого. Проверьте
C
1
2
for (k=0;k<ArrLenght; k++)
 printf("N[%d] = %d\n", k, N[k]);
Yandex
Объявления
31.10.2010, 15:12     Произведение многочленов
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru