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