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

Сравнение одночленов X со степенями - C++

Восстановить пароль Регистрация
 
Reas0n
Сообщений: n/a
21.06.2012, 18:38     Сравнение одночленов X со степенями #1
Здравствуйте. Есть задача:

Дана запись многочлена (от переменной X) произвольной степени с целыми коэффициентами, причем его одночлены могут быть и не упорядочены по степеням X, а одночлены одной и той же степени могут повторяться, например:
-8x^4-74x+8x^4+5-x^3
Требуется привести подобные члены в этом многочлене, после чего распечатать его по убыванию степеней X.
Как я понимаю сначала бы надо записать одночлены в линейный массив, а потом уже выполнять операции над ними. Но массив отказывается работать с числами типа pow(x,2.0). Где я делаю ошибку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2012, 18:38     Сравнение одночленов X со степенями
Посмотрите здесь:

C++ Нужно написать формулу нахождения функции у экспонент со степенями
Найти количество чисел a1(i=1,2,....,n), являющихся степенями пятерки C++
Одномерные массивы. Определить те его элементы, индексы которых являются степенями двойки C++
Напечатать элементы массива, индексы которых являются степенями двойки (1,2,4,8,16.) C++
C++ Вычислить сумму элементов массива, которые являются степенями пятерки и индексы которых есть нечетные числа.
C++ Дан целочисленный массив с количеством элементов n. напечатать те его элементы, индексы которые являются степенями двойки
C++ Найти элементы массива, индексы которых являются степенями двойки
Заполнить массив из N элементов степенями двойки в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
21.06.2012, 19:12     Сравнение одночленов X со степенями #2
Решение любых задач должно начинаться с правильного выбора структуры данных. Многочлен от одной переменной имеет смысл хранить либо в виде массива коэффициентов, либо в виде списка коэффициентов (второй подход более универсальный).

Для простоты рассмотрим первый подход. Многочлен 3*x^3+7*x^2-8*x+11 будет храниться в виде массива {11,-8,7,3}.

Теперь нужна программа чтения многочлена, выделения степеней и коэффициентов. Даже если степени неупорядочены (и повторяются) это не будет играть роли (т.к. при чтении многочлена он автоматически
преобразуется во внутреннюю однозначную форму. Дальше его останется только распечатать.
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
21.06.2012, 20:39     Сравнение одночленов X со степенями #3
Вот набросал... Как это примерно может выглядеть.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
 
// Обработать моном
 
int GetMonom(char *Monom, int *Coeff)
{
    int c,p,i,l;
 
    l=strlen(Monom);
 
    if (strcmp("-x",Monom)==0) 
    {
        Coeff[1]=Coeff[1]-1;
        return 0;
    }
 
    if (strcmp("x",Monom)==0) 
    {
        Coeff[1]=Coeff[1]+1;
        return 0;
    }
 
    if (Monom[l-1]=='x')
    {
        Coeff[1]=Coeff[1]+atoi(Monom);
        return 0;
    }
 
    if ((Monom[0]=='x') && (Monom[1]=='^'))
    {
        c=1;
        Monom[0]=' ';
        Monom[1]=' ';
        p=atoi(Monom);
        Coeff[p]=Coeff[p]+1;
        return 0;
    }
    else
    {
        c=atoi(Monom);
 
        for (i=0; i<10; i++)
        {
            if (Monom[i] == '^')
            {
                Monom[i] = ' ';
                break;
            }
            Monom[i]=' ';
        }
 
        p=atoi(Monom);
 
        Coeff[p]=Coeff[p]+c;
        return 0;
    }
 
}
 
// Загрузить многочлен
 
void LoadPoly(char *Stri, int *Coeff, int nmax)
{
     int i,j,k,l;
     char sym;
     char monom[10];
 
     for (i=0; i<nmax; i++) Coeff[i]=0; // чистка
 
     // разбивка на одночлены (мономы)
 
     for (i=0; i < 10; i++) monom[i]=0;
     k=0;
 
     l=strlen(Stri);
 
     for (i=0; i < l; i++)
     {
         sym=Stri[i];
         switch (sym)
         {
         case '+':
            GetMonom(monom,Coeff);
            for (j=0; j < 10; j++) monom[j]=0;
                k=0;
            break;
         case '-':
            GetMonom(monom,Coeff);
            for (j=0; j < 10; j++) monom[j]=0;
            k=1;
            monom[0]='-';
            break;
         default:
            monom[k++]=sym; 
         }
     }
 
     GetMonom(monom,Coeff);
        for (j=0; j < 10; j++) monom[j]=0;
 
}
 
// Распечатать многочлен
 
void PrintPoly(int *Coeff, int nmax)
{
    int i,j,k,b=0;
 
    // Определяем макс. степень многочлена
 
    k=0;
 
    for (i=nmax-1; i >= 0; i--)
        if (Coeff[i] != 0) 
        {
            k=i;
            break;
        }
 
    // Печать
 
    for (i=k; i >= 0; i--)
        if (Coeff[i] != 0)
        {
            if (Coeff[i] != 1)
            {
                if ((Coeff[i] > 0) && (b != 0)) cout << '+';
                cout << Coeff[i];
            }
            
            if (i >= 1) cout << "x";
            if (i >= 2) cout << "^" << i;
            b=-1;
        }
 
    cout << endl;
 
}
 
int main(int argc, char* argv[])
{
 
    char Buf[200];
    int  C1[100];
 
    int i;
 
    for (i=0; i<200; i++) Buf[i]=0;
 
    cin >> Buf;
 
    LoadPoly(Buf,C1,100);
 
    cout << endl << endl;
 
    PrintPoly(C1,100);
 
    return 0;
}
Как работает - см. картинку. Конечно, есть недоработки. В частности, нужен хоть какой-то анализ ошибок...
Миниатюры
Сравнение одночленов X со степенями  
Yandex
Объявления
21.06.2012, 20:39     Сравнение одночленов X со степенями
Ответ Создать тему
Опции темы

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