Advertisement
Wow_Rasl

Untitled

May 27th, 2022
562
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _CRT_SECURE_NO_WARNINGS //подключаем необходимые библиотеки
  2. #include <stdio.h> //ввоод/вывод
  3. #include <locale.h> //русский язык
  4. #include <string.h> //функции для работы со строками
  5. #include <stdlib.h> //выделение памяти
  6. #include <math.h>
  7.  
  8. typedef struct Node {
  9.     int degree;
  10.     int val;
  11.     struct Node* next;
  12. } Node;
  13.  
  14.  
  15. void PrintPolinomyal(Node* head) {
  16.     Node* p = head;
  17.     if (!p) {
  18.         printf("Пустой многочлен\n");
  19.         return;
  20.     }
  21.     printf("%dx^%d ", p->val, p->degree);
  22.     p = p->next;
  23.     for (; p != NULL; p = p->next) {
  24.         if (p->val > 0) {
  25.             printf("+%dx^%d ", p->val, p->degree);
  26.         }
  27.         else if (p->val < 0) {
  28.             printf("%dx^%d ", p->val, p->degree);
  29.         }
  30.     }
  31.     printf("\n");
  32. }
  33.  
  34. Node* addElement(Node* head, int value, int degree, unsigned int position)
  35. {
  36.     Node* new_node, * tmp;
  37.     int i = 0;
  38.     new_node = (Node*)malloc(sizeof(Node));
  39.     new_node->degree = degree;
  40.     new_node->val = value;
  41.     new_node->next = NULL;
  42.     if (!head)
  43.         return new_node;
  44.  
  45.     if (!position)
  46.     {
  47.         new_node->next = head;
  48.         return new_node;
  49.     }
  50.  
  51.     tmp = head;
  52.     while (tmp->next && i < position - 1)
  53.     {
  54.         tmp = tmp->next;
  55.         i++;
  56.     }
  57.  
  58.     if (!tmp->next)
  59.     {
  60.         tmp->next = new_node;
  61.         return head;
  62.     }
  63.     new_node->next = tmp->next;
  64.     tmp->next = new_node;
  65.     return head;
  66. }
  67.  
  68. Node* ClearList(Node* L) {
  69.     Node* next, * tmp = L;
  70.  
  71.     while (tmp)
  72.     {
  73.         next = tmp->next;
  74.         free(tmp);
  75.         tmp = next;
  76.     }
  77.  
  78.     L = NULL;
  79.  
  80.     printf("Лист очищен\n");
  81. }
  82.  
  83. Node* deleteElement(Node* head, int position) {
  84.     Node* elm = head, * tmp;
  85.     int i = 0;
  86.  
  87.     if (!elm){
  88.         printf("List is empty\n\n");
  89.         return head;
  90.     }
  91.     //удаляем голову
  92.     if (!position){
  93.         elm = head->next;
  94.         head->next = NULL;
  95.         free(head);
  96.         return elm;
  97.     }
  98.  
  99.     while (elm != NULL && i < position - 1){
  100.         elm = elm->next;
  101.         i++;
  102.     }
  103.  
  104.     //если индекс больше длины списка, ничего не делаем
  105.     if (!elm) {
  106.         return head;
  107.     }
  108.     if (!elm->next) {
  109.         return head;
  110.     }
  111.  
  112.     tmp = elm->next;
  113.  
  114.     if ((elm->next)->next){
  115.         elm->next = (elm->next)->next;
  116.         tmp->next = NULL;
  117.     }
  118.     else {
  119.         elm->next = NULL;
  120.     }
  121.     free(tmp);
  122.     return head;
  123. }
  124.  
  125. Node* ChangePolinomyal(Node* L) {
  126.     int ind = 0;
  127.     Node* p = L;
  128.     for (; p != NULL;) {
  129.         if (p->degree % 2 == 0) {
  130.             //printf("%d\n", p->degree);
  131.             L =deleteElement(L, ind);
  132.             //PrintPolinomyal(L);
  133.             p = L;
  134.             ind = 0;
  135.         }
  136.         else{
  137.             ind++;
  138.             p = p->next;
  139.         }
  140.     }
  141.     return L;
  142. }
  143.  
  144.  
  145. Node* CreatePolinomyal() {
  146.     printf("Введите количество членов в многочлене L:\n");
  147.     int n;
  148.     scanf("%d", &n);
  149.     printf("Почленно введите данные многочлена:\n");
  150.     Node* L = NULL;
  151.     for (int i = 0; i < n; ++i) {
  152.         int tmp_degree, tmp_val;
  153.         scanf("%d%d", &tmp_degree, &tmp_val);
  154.         L = addElement(L, tmp_degree, tmp_val, i);
  155.     }
  156.     return L;
  157. }
  158.  
  159.  
  160.  
  161. int main(){
  162.     setlocale(LC_ALL, "rus");
  163.     Node* L;
  164.     L = CreatePolinomyal();
  165.     PrintPolinomyal(L);
  166.     L = ChangePolinomyal(L);
  167.     printf("Измененный многочлен:\n");
  168.     PrintPolinomyal(L);
  169.     ClearList(L);
  170. }
  171.  
  172.  
Advertisement
RAW Paste Data Copied
Advertisement