Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. #include<stdio.h>//biblioteca
  2. #include<stdlib.h>//biblioteca
  3. #include<string.h>//biblioteca
  4. #define MAX 6//nr maxim de persoane
  5.  
  6. typedef struct {
  7. char nume[35];//numele unui film
  8. int durata_minute;//durata unui film
  9. }film;
  10.  
  11. film a[MAX];//vectorul de filme
  12.  
  13. void citire()//creem functia de citire din fisier
  14. {
  15. FILE* f;//pointer pentru deschderea fisierului
  16. f = fopen("fisier.txt", "r");
  17. for (int i = 0; i < MAX; i++)
  18. {
  19. fscanf(f, "%s %d\n", a[i].nume, &a[i].durata_minute);//cititm din fisier numele si durata fiecarui film
  20. }
  21. }
  22.  
  23. void quicksort_c(film a[], int s, int d)//creem functia de sortare
  24. {
  25. int i = s, j = d;//capetii "intervalului" pe care il sortam
  26. char x[35];//elementul pe care il comparam
  27. strcpy(x, a[(s + d) / 2].nume);
  28. film aux;//variabila de interchimbare
  29. do {
  30. while (strcmp(a[i].nume, x) < 0) i++;//mergem pana gasim un elem mai mare decat x
  31. while (strcmp(a[j].nume, x) > 0) j--;//mergem pana unde gasim un elem mai mic decat x
  32. if (i <= j)
  33. {
  34. aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
  35. i++; j--;//incrementam/decrementam pt a verivica in continuare
  36. }
  37. } while (i <= j);//condita de oprire
  38. if (s < j) quicksort_c(a, s, j);//ord subvectorul stang daca e cazul
  39. if (d > i) quicksort_c(a, i, d);//ord subvectorul drept dca e cazul
  40. }
  41.  
  42. void quicksort_d(film a[], int s, int d)//creem functia de sortare
  43. {
  44. int i = s, j = d;//capetii "intervalului" pe care il sortam
  45. int x;//elementul pe car eil comparam
  46. x=a[(s + d) / 2].durata_minute;
  47. film aux;//variabila de interchimbare
  48. do {
  49. while (a[i].durata_minute < x) i++;//mergem pana gasim un elem mai mic decat x
  50. while (a[j].durata_minute > x) j--;//mergem pana unde gasim un elem mai mare decat x
  51. if (i <= j)
  52. {
  53. aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
  54. i++; j--;//incrementam/decrementam pt a verivica in continuare
  55. }
  56. } while (i <= j);//condita de oprire
  57. if (s < j) quicksort_d(a, s, j);//ord subvectorul stang daca e cazul
  58. if (d > i) quicksort_d(a, i, d);//ord subvectorul drept dca e cazul
  59. }
  60.  
  61. void afisare() {
  62. for (int i = 0; i < MAX; i++)
  63. {
  64. printf("%s cu durata %d\n", a[i].nume, a[i].durata_minute);
  65. }
  66. printf("\n");
  67. }
  68.  
  69. int main() {
  70. citire();//citim din fiser
  71. quicksort_d(a, 0, MAX - 1);//ord descrescator dupa durata
  72. for (int i = 0; i < MAX-1; i++)//parcurge vectorul pt a gasi filme cu aceeasi durata
  73. {
  74. int x = 0;
  75. for (int j = i + 1; j < MAX;j++)
  76. if (a[i].durata_minute == a[j].durata_minute) x++;//daca exista filme cu aceeasi durata numaram cate sunt
  77. if((i+x)>x) quicksort_c(a, i, i+x);//ordonam cele x filme crescator dupa nume
  78. i += x;//trecem sa verificam filmele urmatoare de cele pe care le-am ordonat
  79. }
  80. afisare();//afisam vectorul/structul
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement