Упорядочить список без разницы в каком порядке - 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. Вводите степень (-1 - конец) : 2
  2. Вводите коэффициент : 3
  3. Вводите степень (-1 - конец) : 3
  4. Вводите коэффициент : 4
  5. Вводите степень (-1 - конец) : 1
  6. Вводите коэффициент : 2 Сортированный список:
  7. 3x^2
  8. 4x^3
  9. 2x^1 Производная списка:
  10. 3x^2
  11. 4x^3
  12. 2x^1 Удаление списка:
  13. all done.

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


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

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

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