6 / 6 / 0
Регистрация: 23.03.2011
Сообщений: 53
1

Ввести структуру "Алгебраический полином" с полями "степень", "коэффициенты"

09.07.2013, 13:26. Показов 2152. Ответов 6
Метки нет (Все метки)

Ребят,вот само задание :
Ввести структуру АЛГЕБРАИЧЕСКИЙ ПОЛИНОМ с полями СТЕПЕНЬ, КОЭФФИЦИЕНТЫ. Составить и протестировать функцию.
a) ввода и вывода полинома;
b) дифференцирования полинома
c) сложения двух полиномов;
d) поиска полиномов с максимальной степенью в массиве полиномов;


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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<locale>
 
#define MAX 5
 
struct polinom 
{
 int stepen[30];//без массива...
 int koifetient[30];
}polinom_list[MAX];
 
void init_list(void)//инициализация структуры
{
register int t;
 
for(t=0; t<MAX; ++t) polinom_list[t].stepen[0] = '\0';
}
 
int find_free(void)//степень пустоты структуры
{
register int t;
 
for(t=0; polinom_list[t].stepen[0] && t<MAX; ++t) ;
if(t==MAX) return -1;
return t;
}
 
int menu_select(void)
{
char s[80];
int c;
 
printf("1. Ввести полином\n");
printf("2. Вывод полинома\n");
printf("3. Дефференцирование полинома\n");
printf("4. Сложение двух полиномов\n");
printf("5. Поиск полинома с максимальной степенью в массиве полиномов\n");
printf("6. Выход\n");
do 
{
printf("\nВведите номер нужного пункта: ");
gets(s);//Переделать....считывать числа а не строку)
c = atoi(s);
} 
while(c<0 || c>6);
return c;
}
 
void enter(void)
{
int slot,k=0;
char s[80];
slot = find_free();
if(slot==-1)
{
printf("\nСписок заполнен\n");
return;
}
printf("Нажмите N для выхода.\n");
while(strcmp(s,"N")!=NULL)
{
printf("Введите степень при %d x: ",k+1);
gets(s);
polinom_list[slot].stepen[k] = strtoul(s, '\0', 10);//
printf("Введите коэффициент при %d x: ",k+1);
gets(s);
polinom_list[slot].koifetient[k] = strtoul(s, '\0', 10);
k++;
}
polinom_list[slot].stepen[k-1]='\0';
polinom_list[slot].koifetient[k-1]='\0';
}
 
void list(void)
{
int t,i;
for(t=0; t<MAX && polinom_list[t].stepen[0]; t++) 
{
printf("%d. ", t+1);
for(i=0;i<MAX && polinom_list[t].stepen[i]; i++)
{
if(i!=0) printf(" + ");
printf("%d*x^%d", polinom_list[t].koifetient[i], polinom_list[t].stepen[i]);
//if(polinom_list[i+1].stepen[0]) printf(" * ");
}
printf("\n");
}
printf("\n\n");
}
 
void def(void)
{
char s[80];
int t,i;
printf("Введите номер строки с полиномом который нужно продефференцировать: ");
gets(s);
t = atoi(s);
t--;
for(i=0;i<MAX && polinom_list[t].stepen[i]; i++)
{
polinom_list[t].koifetient[i]*=polinom_list[t].stepen[i];
polinom_list[t].stepen[i]-=1;
}
}
 
void sum(void)
{
int p[MAX];
char s[80];
int n1,n2;
printf("Введите номер строки с полиномом к которому прибавлять другой полином: ");
gets(s);
n1 = atoi(s)-1;
printf("Введите номер строки с полиномом который прибавлять к этому полиному: ");
gets(s);
n2 = atoi(s)-1;
for(int i=0;i<MAX;i++) p[i]=1;
for(int i=0;i<MAX && (polinom_list[n1].stepen[i]||polinom_list[n2].stepen[i]); i++)
{
for(int j=0;j<MAX && (polinom_list[n1].stepen[i]||polinom_list[n2].stepen[i]); j++)
{
if(polinom_list[n1].stepen[i]==polinom_list[n2].stepen[j])
{
polinom_list[n1].koifetient[i]+=polinom_list[n2].koifetient[j];
p[j]=0;
}
}
}
for(int i=0;;i++)
{
bool flag=true;
if(polinom_list[n1].stepen[i]==NULL)
{
for(int j=0;j<MAX;j++)
{
if(p[j])
{
polinom_list[n1].stepen[i]=polinom_list[n2].stepen[j];
polinom_list[n1].koifetient[i]=polinom_list[n2].koifetient[j];
p[j]=0;
flag=false;
break;
}
}
if(flag) return;
}
}
}
 
void max(void)
{
int max=0,p;
for(int i=0;i<MAX;i++)
{
for(int j=0;polinom_list[i].stepen[j];j++)
{
if(max<polinom_list[i].stepen[j])
{
max=polinom_list[i].stepen[j];
p=i;
}
}
}
printf("Полином с максимальной степенью в массиве полиномов:\n");
for(int i=0;i<MAX && polinom_list[p].stepen[i];i++)
{
if(i!=0) printf(" + ");
printf("%lu*x^%lu", polinom_list[p].koifetient[i], polinom_list[p].stepen[i]);
}
printf("\n");
}
 
int main(void)
{
setlocale(LC_ALL,"Russian");
char choice;
init_list();
for(;;) 
{
choice = menu_select();
switch(choice) 
{
case 1: enter();
break;
case 2: list();
break;
case 3: def();
break;
case 4: sum();
break;
case 5: max();
break;
case 6: exit(0);
}
}
 
return 0;
}
Программа работает,но препод сделал пару замечаний:
1.Поле int stepen[30];//Должно быть без массива выполнено(Реально ли такое?
2.
C
1
2
3
4
5
6
gets(s);//Переделать....считывать числа а не строку)
c = atoi(s);
} 
while(c<0 || c>6);
return c;
}
Ей не нравиться что я работаю со строками(как можно ее переделать?)помогите пожалуйста
3.#define MAX 5 Как объяснить ей для чего я эта использовал(я ее использовал для того что бы я мог ввести только 5 полиномов)Она может еще как то использоваться
4.#define можно ли ее назвать глобальной переменноЙ?)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2013, 13:26
Ответы с готовыми решениями:

Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие"
Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ. Составить и...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись &quot;Двигатель&quot;, которая содержит элементы &quot;Название&quot;, &quot;Мощность&quot;, &quot;Скорость&quot;,...

Подсчитать общее количество вхождений в строку символов "А", "a", "B" и "b"
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; main() { int i; int k; ...

"Перевернуть" в строке все слова (Например: "Жили были" в "илиЖ илыб")
&quot;Перевернуть&quot; в строке все слова. (Например: &quot;Жили были дед и баба&quot; - &quot;илиЖ илиб дед и абаб&quot;)

6
6 / 6 / 7
Регистрация: 26.06.2013
Сообщений: 16
09.07.2013, 15:27 2
Да, реально, для хранения многочлена достаточно одного массива.
коэффициент следует хранить в ячейке массива(a[i]), показателем будет индекс этой ячейки
Например: 2x^3-x+5 будет хранится как

a[0] = 5
a[1] = -1
a[2] = 0
a[3] = 2

#define MAX 5 определяет макрозамену
во время компиляции везде где в коде есть MAX оно будет просто заменено на 5
Это вообще не переменная)

Добавлено через 9 минут
Замени
C
1
2
gets(s);//Переделать....считывать числа а не строку)
c = atoi(s);
на
C
1
scanf("%i", &c);
и убери объявление
C
1
char s[80];
1
6 / 6 / 0
Регистрация: 23.03.2011
Сообщений: 53
09.07.2013, 15:41  [ТС] 3
C
1
2
gets(s);//Переделать....считывать числа а не строку)
c = atoi(s);
на
C
1
scanf("%i", &c);
и убери объявление
C
1
char s[80];
Вот что получиться:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int menu_select(void)
{
int c;
 
printf("1. Ввести полином\n");
printf("2. Вывод полинома\n");
printf("3. Дефференцирование полинома\n");
printf("4. Сложение двух полиномов\n");
printf("5. Поиск полинома с максимальной степенью в массиве полиномов\n");
printf("6. Выход\n");
do 
{
scanf("%i", &c);
printf("\nВведите номер нужного пункта: ");
 
 
} 
while(c<0 || c>6);
return c;
}
Ошибки нету так таковой,компилятор не ругаеться,но когда я хочу вывести сам полином на экран,он мне постоянно менюшку показыват с действийми(
0
6 / 6 / 7
Регистрация: 26.06.2013
Сообщений: 16
09.07.2013, 15:52 4
C
1
2
scanf("%i", &c);
printf("\nВведите номер нужного пункта: ");
Поменяй их местами
C
1
2
printf("\nВведите номер нужного пункта: ");
scanf("%i", &c);
0
6 / 6 / 0
Регистрация: 23.03.2011
Сообщений: 53
09.07.2013, 16:01  [ТС] 5
Все ровно все так же,попрежнему...
0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
09.07.2013, 20:35 6
Цитата Сообщение от matreny Посмотреть сообщение
Все ровно все так же,попрежнему
перекомпилировать не пробовал, Паш?) vusual studio порой приходится перекомпилировать, чтобы заработало) clrl+F7 нажми.
0
6 / 6 / 0
Регистрация: 23.03.2011
Сообщений: 53
09.07.2013, 20:49  [ТС] 7
Цитата Сообщение от DoKWeB Посмотреть сообщение
перекомпилировать не пробовал, Паш?)
Пробывал)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2013, 20:49

Функция замены ":" на "_" в названии файла и ошибка "undefined reference to 'strcat'"
Добрый день,прошу помочь мне с такой проблемой: В общем есть функция,работающая с именем...

Подсчитать количество сдвоенных символов "сс", "нн", "лл" в тексте, расположенном в текстовом файле
Пожалуйста) Подсчитать количество сдвоенных символов сс, нн, лл в тексте, расположенном в текстовом...

Структура "Хоккеист" и файлы с двумя командами: "Динамо" и "Спартак"
Создать 2 файла, содержащего сведения об игроках хоккейных команд &quot;Динамо&quot; и &quot;Спартак&quot;. Структура...

В строке заменить последовательность слов "один", "два", "три"
Помогите,плз) В строке заменить последовательность слов &quot;один&quot;, &quot;два&quot;, &quot;три&quot; на &quot;1-2-3&quot;


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.