Advertisement
Crackbone

Untitled

Nov 12th, 2019
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. /*4. Napisati program za zbrajanje i množenje polinoma.
  2. Koeficijenti i eksponenti se čitaju iz datoteke.
  3. Napomena: Eksponenti u datoteci nisu nužno sortirani. */
  4.  
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #define MAX_FILENAME 50
  7.  
  8.  
  9. #include<stdio.h>
  10. #include<string.h>
  11. #include<stdlib.h>
  12.  
  13.  
  14. //Struct poli
  15.  
  16. struct node;
  17. typedef struct node* Pnode;
  18. struct node
  19. {
  20.         int koef;
  21.         int exp;
  22.         Pnode Next;
  23. };
  24.  
  25. //Functions
  26.  
  27.  
  28.  
  29. //Main
  30. int main()
  31. {
  32.     struct node P1, P2, P3, P4;
  33.     P1.Next = NULL;
  34.     P2.Next = NULL;
  35.     P3.Next = NULL;
  36.     P4.Next = NULL;
  37.  
  38.     FILE *fp = NULL;
  39.     Pnode q, temp,temp1,temp2;
  40.     char ime_dat[MAX_FILENAME];
  41.     //Prva
  42.     printf("Upisi ime prve datoteke:\n");
  43.     scanf(" %s", ime_dat);
  44.     fp = fopen(ime_dat, "r");
  45.     if (NULL == fp)
  46.         printf("Greska tokom otvaranja datoteke");
  47.     while (!feof(fp))
  48.     {
  49.         q = (Pnode)malloc(sizeof(struct node));
  50.         fscanf(fp, " %d %d", &q->koef, &q->exp);
  51.         temp = &P1;
  52.         while (temp->Next != NULL && temp->Next->exp > q->exp)
  53.             temp = temp->Next;
  54.  
  55.         if (temp->Next != NULL && temp->Next->exp == q->exp)
  56.         {
  57.             temp->Next->koef =temp->Next->koef + q->koef;
  58.             free(q);
  59.             if (temp->Next->koef == 0)
  60.             {
  61.                 q = temp->Next;
  62.                 temp->Next = q->Next;
  63.  
  64.                 free(q);
  65.             }
  66.         }
  67.         else
  68.         {
  69.             q->Next = temp->Next;
  70.             temp->Next = q;
  71.         }
  72.     }
  73.     fclose(fp);
  74.     //Druga
  75.     printf("Upisi ime druge datoteke:\n");
  76.     scanf(" %s", ime_dat);
  77.     fp = fopen(ime_dat, "r");
  78.     if (NULL == fp)
  79.         printf("Greska tokom otvaranja datoteke");
  80.     while (!feof(fp))
  81.     {
  82.         q = (Pnode)malloc(sizeof(struct node));
  83.         fscanf(fp, " %d %d", &q->koef, &q->exp);
  84.         temp = &P2;
  85.         while (temp->Next != NULL && temp->Next->exp > q->exp)
  86.             temp = temp->Next;
  87.  
  88.         if (temp->Next != NULL && temp->Next->exp == q->exp)
  89.         {
  90.             temp->Next->koef = temp->Next->koef + q->koef;
  91.             free(q);
  92.             if (temp->Next->koef == 0)
  93.             {
  94.                 q = temp->Next;
  95.                 temp->Next = q->Next;
  96.  
  97.                 free(q);
  98.             }
  99.         }
  100.         else
  101.         {
  102.             q->Next = temp->Next;
  103.             temp->Next = q;
  104.         }
  105.     }
  106.     fclose(fp);
  107.  
  108.     //Ispis prve
  109.     printf("Ispis prvog polinoma:\n");
  110.     temp = P1.Next;
  111.     while (temp != NULL)
  112.     {
  113.         if (temp->koef > 0)
  114.             printf(" +%dx^%d", temp->koef, temp->exp);
  115.         else
  116.             printf(" %dx^%d", temp->koef, temp->exp);
  117.         temp = temp->Next;
  118.     }
  119.     //Ispis druge
  120.     printf("\nIspis drugog polinoma:\n");
  121.     temp = P2.Next;
  122.     while (temp != NULL)
  123.     {
  124.         if (temp->koef > 0)
  125.             printf(" +%dx^%d", temp->koef, temp->exp);
  126.         else
  127.             printf(" %dx^%d", temp->koef, temp->exp);
  128.         temp = temp->Next;
  129.     }
  130.  
  131.     printf("\nZbrajanje polioma:\n");
  132.     //Zbrajanje polinoma
  133.     temp = P1.Next;
  134.     temp1 = P2.Next;
  135.     temp2 = P3.Next;
  136.     while (temp != NULL && temp1 != NULL)
  137.     {
  138.         q = (Pnode)malloc(sizeof(struct node));
  139.        
  140.  
  141.         if (temp->exp > temp1->exp)
  142.         {
  143.             q->exp = temp->exp;
  144.             q->koef = temp->koef;
  145.             temp = temp->Next;
  146.         }
  147.         else if (temp->exp < temp1->exp)
  148.         {
  149.             q->exp = temp1->exp;
  150.             q->koef = temp1->koef;
  151.             temp1 = temp1->Next;
  152.         }
  153.         else
  154.         {
  155.             q->exp = temp->exp;
  156.             q->koef = temp->koef + temp1->koef;
  157.             temp = temp->Next;
  158.             temp1 = temp1->Next;
  159.         }
  160.  
  161.         q->Next = temp2->Next;
  162.         temp2->Next = q;
  163.  
  164.         temp2 = q;
  165.     }
  166.     //Ispis sume
  167.     printf("\nIspis sume:\n");
  168.  
  169.     temp = P3.Next;
  170.     while (temp != NULL)
  171.     {
  172.         if (temp->koef > 0)
  173.             printf(" +%dx^%d", temp->koef, temp->exp);
  174.         else
  175.             printf(" %dx^%d", temp->koef, temp->exp);
  176.         temp = temp->Next;
  177.     }
  178.  
  179.  
  180.     getchar();
  181.     getchar();
  182.     return 0;
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement