Advertisement
AmidamaruZXC

Untitled

Oct 29th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct node {
  7.     int koeff;
  8.     int power;
  9.     struct node* next;
  10. };
  11.  
  12. typedef struct node* list;
  13.  
  14. void createList(list* phead)
  15. {
  16.     *phead = NULL;
  17. }
  18.  
  19. int checkIfExist(list* phead, int power, int koeff)
  20. {
  21.     list p = *phead;
  22.     while (p != NULL)
  23.     {
  24.         if (p->power == power)
  25.         {
  26.             p->koeff += koeff;
  27.             return 1;
  28.         }
  29.         p = p->next;
  30.     }
  31.     return 0;
  32. }
  33.  
  34. int addToHead(list* phead, int koeff, int power)
  35. {
  36.     list p;
  37.     if (checkIfExist(phead, power, koeff))
  38.     {
  39.         printf("Такая степень уже есть %d\n", power);
  40.         return 0;
  41.     }
  42.     p = (list)malloc(sizeof(*p));
  43.     p->koeff = koeff;
  44.     p->power = power;
  45.     p->next = *phead;
  46.     *phead = p;
  47.     printf("Добавлено: %d*x^%d\n", p->koeff, p->power);
  48.     return 1;
  49. }
  50.  
  51. void enterListElems(list* phead)
  52. {
  53.     cout << "Введите степень многочлена: ";
  54.     int k = 0;
  55.     cin >> k;
  56.     int i_koeff = 1, i_power = 0;
  57.     for (int i = 0; i < k + 1; i++)
  58.     {
  59.         cout << "Введите коэффициент для x^" << i_power << ": ";
  60.         cin >> i_koeff;
  61.         if (i_koeff != 0)
  62.             addToHead(phead, i_koeff, i_power);
  63.         i_power++;
  64.     }
  65. }
  66.  
  67. void printList(list* phead)
  68. {
  69.     list p;
  70.     cout << "P(x) = ";
  71.     for (p = *phead; p != NULL; p = p->next)
  72.     {
  73.         if (p->next != NULL)
  74.             printf("%dx^%d + ", p->koeff, p->power);
  75.         else
  76.             printf("%dx^%d", p->koeff, p->power);
  77.     }
  78.     printf("\n");
  79. }
  80.  
  81. bool checkEquality(list* phead1, list* phead2)
  82. {
  83.     list p1 = *phead1;
  84.     list p2 = *phead2;
  85.     int len1 = 0, len2 = 0;
  86.     for (p1; p1 != NULL; p1 = p1->next)
  87.         len1++;
  88.     for (p2; p2 != NULL; p2 = p2->next)
  89.         len2++;
  90.     if (len1 != len2)
  91.         return false;
  92.     p1 = *phead1;
  93.     p2 = *phead2;
  94.     for (p1, p2; p1 != NULL && p2 != NULL; p1 = p1->next, p2 = p2->next)
  95.         if (p1->koeff != p2->koeff || p1->power != p2->power)
  96.             return false;
  97.     return true;
  98. }
  99.  
  100. int main(void)
  101. {
  102.     list L1, L2;
  103.     int k;
  104.  
  105.     setlocale(LC_ALL, "RUSSIAN");
  106.  
  107.     createList(&L1);
  108.     enterListElems(&L1);
  109.     printf("\n------\n");
  110.     printList(&L1);
  111.     printf("------\n\n");
  112.     createList(&L2);
  113.     enterListElems(&L2);
  114.     printf("\n------\n");
  115.     printList(&L2);
  116.     printf("------\n\n");
  117.     if (checkEquality(&L1, &L2))
  118.         cout << "Многочлены равны" << endl;
  119.     else
  120.         cout << "Многочлены не равны" << endl;
  121.     return 0;
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement