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

Узнай цену своей работы

Формулировка задачи:

Ребят,вот само задание : Ввести структуру АЛГЕБРАИЧЕСКИЙ ПОЛИНОМ с полями СТЕПЕНЬ, КОЭФФИЦИЕНТЫ. Составить и протестировать функцию. a) ввода и вывода полинома; b) дифференцирования полинома c) сложения двух полиномов; d) поиска полиномов с максимальной степенью в массиве полиномов;
#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.
gets(s);//Переделать....считывать числа а не строку)
c = atoi(s);
} 
while(c<0 || c>6);
return c;
}
Ей не нравиться что я работаю со строками(как можно ее переделать?)помогите пожалуйста 3.#define MAX 5 Как объяснить ей для чего я эта использовал(я ее использовал для того что бы я мог ввести только 5 полиномов)Она может еще как то использоваться 4.#define можно ли ее назвать глобальной переменноЙ?)

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

textual
Листинг программы
printf("\nВведите номер нужного пункта: ");
scanf("%i", &c);

Объяснение кода листинга программы

  1. Программа предлагает пользователю ввести номер нужного пункта.
  2. Используется функция scanf для ввода числа в переменную c.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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