Упорядочить список без разницы в каком порядке - C (СИ)
Формулировка задачи:
здраствуйте
пожалуйста сделать одно задание
мы вводим коэфициенты полинома (первое число коэфициент при х второе степень х) не по порядку вводим (тоесть может идти сначала для 3-го элемента полинома потом для 20-го и т.д.)
надо упорядочить список без разницы в каком порядки возростания степеней или убывания.
а потом найти производную полинома .
и вывести новый полином.
помогите пожалуйста сделать
заранее спасибо
Решение задачи: «Упорядочить список без разницы в каком порядке»
textual
Листинг программы
#include <stdio.h>
#include <malloc.h>
struct cell
{ int c;
int p;
cell *next;
};
int main(int argc, char* argv[])
{
cell *Begin, *Curr, *Prev, *Poly, *Max, *Next;
int cc,pp,pmax,n,i,j;
// Ввод списка (степень - коэффициент)
Begin = NULL;
n=0;
while (1)
{
printf("Enter degre (-1 - end) :"); scanf("%d",&pp);
if (pp < 0) break;
printf("Enter coeff :"); scanf("%d",&cc);
Curr = (cell *) malloc(sizeof(cell));
Curr->c=cc;
Curr->p=pp;
Curr->next=NULL;
if (Begin == NULL)
{
Begin=Curr;
Prev=Begin;
}
else
{
Prev->next=Curr;
Prev=Curr;
}
n++;
}
// Сортировка выбором
Poly=NULL;
for (j=0; j<n; j++)
{
Curr=Begin;
pmax=-1;
for (i=0; i<n; i++)
{
if (Curr->p > pmax)
{
pmax=Curr->p;
Max=Curr;
}
Curr=Curr->next;
}
Curr = (cell *) malloc(sizeof(cell));
Curr->c=Max->c ;
Curr->p=pmax;
Curr->next=NULL;
Max->p =-1;
if (Poly == NULL)
{
Poly=Curr;
Prev=Poly;
}
else
{
Prev->next=Curr;
Prev=Curr;
}
}
// Печать производной:
Curr=Poly;
while (1)
{
cc=Curr->c ;
pp=Curr->p;
if (pp > 0) printf("%dx^%d \n",cc*pp,pp-1);
if (Curr->next == NULL) break;
Curr=Curr->next;
}
// Удаление
Curr=Poly;
while (1)
{
Next=Curr->next;
free(Curr);
Curr=Next;
if (Curr==NULL) break;
}
Curr=Begin;
while (1)
{
Next=Curr->next;
free(Curr);
Curr=Next;
if (Curr==NULL) break;
}
return 0;
}
Объяснение кода листинга программы
Код представлен на языке C и решает задачу упорядочивания списка, где элементы списка - это структуры типа cell с полями c (коэффициент) и p (степень).
Список вводится пользователем с помощью цикла while, где каждое введенное значение степени и коэффициента добавляется в список.
Затем происходит сортировка списка выбором, где находится максимальная степень.
Далее происходит печать производной списка, где выводятся все элементы списка в порядке возрастания степени.
В конце происходит удаление списка, где все элементы освобождаются с помощью функции free.
Ввод списка:
- Вводите степень (-1 - конец) : 2
- Вводите коэффициент : 3
- Вводите степень (-1 - конец) : 3
- Вводите коэффициент : 4
- Вводите степень (-1 - конец) : 1
- Вводите коэффициент : 2 Сортированный список:
- 3x^2
- 4x^3
- 2x^1 Производная списка:
- 3x^2
- 4x^3
- 2x^1 Удаление списка:
- all done.