Patey

Untitled

Jan 19th, 2021
457
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4.  
  5. typedef struct film {
  6.     char *nume, *actor;
  7.     int an, nota;
  8. }b;
  9.  
  10. int cmp_actor(const void *a, const void *b)
  11. {
  12.     struct film *ia = (struct film *)a;
  13.     struct film *ib = (struct film *)b;
  14.     return strcmp(ia->actor, ib->actor);
  15. }
  16.  
  17.  
  18. void adaugare_struct(int *n,b a[50], char *nume, char *actor, int an, int nota)
  19. {
  20.     (*n)++;
  21.     (a + *n)->actor = (char*)malloc(strlen(actor) + 1);
  22.     (a + *n)->nume = (char*)malloc(strlen(nume) + 1);
  23.     strcpy((a + *n)->actor, actor);
  24.     strcpy((a + *n)->nume, nume);
  25.     (a + *n)->nota = nota;
  26.     (a + *n)->an = an;
  27. }
  28.  
  29. void afisarere(int n, b a[50])
  30. {
  31.     printf("\n");
  32.     int i;
  33.     for (i = 0; i <= n; i++)
  34.         printf("Nume: %s\nActor: %s\nAn: %d\nNota: %d\n\n", (a + i)->nume, (a + i)->actor, (a + i)->an, (a + i)->nota);
  35.     printf("\n");
  36. }
  37.  
  38. void stergerea(b *a, int *n)
  39. {
  40.     int k = 0, i, j;
  41.     for (i = 0; i <= (*n - k); i++)
  42.     {
  43.         if ((a+i)->an<2010)
  44.         {
  45.             k++;
  46.             for (j = i; j <= (*n - k); j++)
  47.                 *(a + j) = *(a + j + 1);
  48.             i--;
  49.         }
  50.     }
  51.     *n = *n - k;
  52. }
  53.  
  54. void orodnare_bule(int n, b a[50])
  55. {
  56.     int i,k;
  57.     b aux;
  58.     do {
  59.         k = 1;
  60.         for (i = 0; i < n; i++)
  61.         {
  62.             if ((a + i)->nota > (a + i + 1)->nota)
  63.             {
  64.                 aux = *(a + i);
  65.                 *(a + i) = *(a + i + 1);
  66.                 *(a + i + 1) = aux;
  67.             }
  68.         }
  69.     } while (k == 0);
  70. }
  71.  
  72. void matrice(int n, b *a)
  73. {
  74.     FILE *fis = fopen("matirce.txt", "w+t");
  75.     int m[20][20] = { 0 }, i, j, nr;
  76.     for (i = 0; i <= n; i++)
  77.     {
  78.         nr = 0;
  79.         for (j = 0; j < (strlen((a + i)->nume)); j++)
  80.         {
  81.             if (strchr("AEIOUaeiou", (a + i)->nume[j]));
  82.                 nr++;
  83.         }
  84.         m[i][i] = nr;
  85.     }
  86.     for (i = 0; i <= n; i++)
  87.     {
  88.         for (j = 0; j <= n; j++)
  89.             fprintf(fis, "%d", m[i][j]);
  90.         fprintf(fis, "\n");
  91.     }
  92. }
  93.  
  94. int main()
  95. {
  96.     int n = -1,an,nota;
  97.     char nume[20], actor[20];
  98.     b a[50];
  99.     enum{iesire, adaugare, afisare, stergere, ordoanare1, ordonare2, afisare1}opt;
  100.     do {
  101.         printf("0. Iesire\n");
  102.         printf("1. Adaugare\n");
  103.         printf("2. Afisare\n");
  104.         printf("3. Stergere filme mai vechi de 2010\n");
  105.         printf("4. Ordonarea crescatoare in functie de nota-IBDM \n");
  106.         printf("5. Ordonare alfabetica a filmelor in functie de numele actorului \n");
  107.         printf("6. Afisarea in fisier a matricii care contine pe diagonala principala numarul de litere din numele filmului, iar in rest 0. \n");
  108.         printf("opt= ");
  109.         scanf("%d", &opt);
  110.         switch (opt)
  111.         {
  112.         case iesire:exit(0);
  113.             break;
  114.         case adaugare:printf("Nume film: ");
  115.             scanf("%s", nume);
  116.             printf("Nume actor: ");
  117.             scanf("%s", actor);
  118.             printf("An: ");
  119.             scanf("%d", &an);
  120.             printf("Nota IMBD: ");
  121.             scanf("%d", &nota);
  122.             adaugare_struct(&n, a, nume, actor, an, nota);
  123.             break;
  124.         case afisare:afisarere(n, a);
  125.             break;
  126.         case stergere:stergerea(a, &n);
  127.             break;
  128.         case ordoanare1:orodnare_bule(n, a);
  129.             break;
  130.         case ordonare2:qsort(a, n + 1, sizeof(struct film), cmp_actor);
  131.             break;
  132.         case afisare1:matrice(n, a);
  133.             break;
  134.         default:printf("Eroare!\n");
  135.             break;
  136.         }
  137.     } while (1);
  138. }
RAW Paste Data