Advertisement
aimon1337

Untitled

Jan 12th, 2022 (edited)
1,002
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <memory.h>
  4. #include <string.h>
  5. #include <math.h>
  6.  
  7. #define max(a,b) ((a>b) ? (a) : (b))
  8. #define min(a,b) ((a<b) ? (a) : (b))
  9.  
  10. typedef struct
  11. {
  12.     char nume_produs[30];
  13.     double cantitate, pret;
  14. } Produs;
  15.  
  16. Produs readData(FILE *fp)
  17. {
  18.     Produs input;
  19.     if (fp)
  20.         fscanf(fp, "%s %lf %lf", &input.nume_produs, &input.cantitate, &input.pret);
  21.     else
  22.     {
  23.         fprintf(stderr, "Eroare la deschiderea fisierului.");
  24.         exit(EXIT_FAILURE);
  25.     }
  26.     return input;
  27. }
  28.  
  29. void printData(Produs obiect)
  30. {
  31.     printf("%s %lf %lf\n", obiect.nume_produs, obiect.cantitate, obiect.pret);
  32. }
  33.  
  34. int comparator(const void* obiect1, const void* obiect2)
  35. {
  36.     Produs *produs1 = (Produs*)obiect1;
  37.     Produs *produs2 = (Produs*)obiect2;
  38.     return(produs2->pret*produs2->cantitate <= produs1->pret*produs1->cantitate);
  39. }
  40.  
  41.  
  42.  
  43. int main()
  44. {
  45.     int N;
  46.     printf("%s", "Care este denumirea fisierului?\n");
  47.     char str[30];
  48.     scanf("%s", &str);
  49.     FILE *fp = fopen(str, "rt");
  50.     if (fp)
  51.     {
  52.         fscanf(fp, "%d", &N);
  53.         Produs *sir_produse;
  54.         sir_produse = (Produs*)malloc(N * sizeof(Produs));
  55.         if(!sir_produse)
  56.         {
  57.             fprintf(stderr, "Eroare la alocarea memoriei");
  58.             exit(EXIT_FAILURE);
  59.         }
  60.         for (int i = 0; i < N; ++i)
  61.         {
  62.             sir_produse[i] = readData(fp);
  63.         }
  64.         int cheapItem = 0, expensiveItem = 0;
  65.         for (int i = 0; i < N; ++i)
  66.         {
  67.             if(sir_produse[cheapItem].pret >= sir_produse[i].pret)
  68.                 cheapItem = i;
  69.             if(sir_produse[expensiveItem].pret <= sir_produse[i].pret)
  70.                 expensiveItem = i;
  71.         }
  72.         printData(sir_produse[cheapItem]);
  73.         printData(sir_produse[expensiveItem]);
  74.         FILE *fo = fopen("output.bin", "wb");
  75.         if(fo)
  76.         {
  77.             qsort(sir_produse, N, sizeof(Produs), comparator);
  78.             for(int i = 0; i < N; ++i)
  79.             {
  80.                 printf("%s %lf %lf\n", sir_produse[i].nume_produs, sir_produse[i].cantitate, sir_produse[i].pret);
  81.             }
  82.             fwrite(sir_produse, sizeof(sir_produse), 1, fo);
  83.             free(sir_produse);
  84.         }
  85.         else
  86.         {
  87.             fprintf(stderr, "Eroare la deschiderea fisierului de iesire");
  88.             exit(EXIT_FAILURE);
  89.         }
  90.         return 0;
  91.  
  92.     }
  93.     else
  94.     {
  95.         fprintf(stderr, "Eroare la deschiderea fisierului");
  96.         exit(EXIT_FAILURE);
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement