Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>//biblioteca
- #include<stdlib.h>//biblioteca
- #include<string.h>//biblioteca
- #define MAX 6//nr maxim de persoane
- typedef struct {
- char nume[35];//numele unui film
- int durata_minute;//durata unui film
- }film;
- film a[MAX];//vectorul de filme
- void citire()//creem functia de citire din fisier
- {
- FILE* f;//pointer pentru deschderea fisierului
- f = fopen("fisier.txt", "r");
- for (int i = 0; i < MAX; i++)
- {
- fscanf(f, "%s %d\n", a[i].nume, &a[i].durata_minute);//cititm din fisier numele si durata fiecarui film
- }
- }
- void quicksort_c(film a[], int s, int d)//creem functia de sortare
- {
- int i = s, j = d;//capetii "intervalului" pe care il sortam
- char x[35];//elementul pe care il comparam
- strcpy(x, a[(s + d) / 2].nume);
- film aux;//variabila de interchimbare
- do {
- while (strcmp(a[i].nume, x) < 0) i++;//mergem pana gasim un elem mai mare decat x
- while (strcmp(a[j].nume, x) > 0) j--;//mergem pana unde gasim un elem mai mic decat x
- if (i <= j)
- {
- aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
- i++; j--;//incrementam/decrementam pt a verivica in continuare
- }
- } while (i <= j);//condita de oprire
- if (s < j) quicksort_c(a, s, j);//ord subvectorul stang daca e cazul
- if (d > i) quicksort_c(a, i, d);//ord subvectorul drept dca e cazul
- }
- void quicksort_d(film a[], int s, int d)//creem functia de sortare
- {
- int i = s, j = d;//capetii "intervalului" pe care il sortam
- int x;//elementul pe car eil comparam
- x=a[(s + d) / 2].durata_minute;
- film aux;//variabila de interchimbare
- do {
- while (a[i].durata_minute < x) i++;//mergem pana gasim un elem mai mic decat x
- while (a[j].durata_minute > x) j--;//mergem pana unde gasim un elem mai mare decat x
- if (i <= j)
- {
- aux = a[i]; a[i] = a[j]; a[j] = aux;//interchimbam elementele gasite anterior
- i++; j--;//incrementam/decrementam pt a verivica in continuare
- }
- } while (i <= j);//condita de oprire
- if (s < j) quicksort_d(a, s, j);//ord subvectorul stang daca e cazul
- if (d > i) quicksort_d(a, i, d);//ord subvectorul drept dca e cazul
- }
- void afisare() {
- for (int i = 0; i < MAX; i++)
- {
- printf("%s cu durata %d\n", a[i].nume, a[i].durata_minute);
- }
- printf("\n");
- }
- int main() {
- citire();//citim din fiser
- quicksort_d(a, 0, MAX - 1);//ord descrescator dupa durata
- for (int i = 0; i < MAX-1; i++)//parcurge vectorul pt a gasi filme cu aceeasi durata
- {
- int x = 0;
- for (int j = i + 1; j < MAX;j++)
- if (a[i].durata_minute == a[j].durata_minute) x++;//daca exista filme cu aceeasi durata numaram cate sunt
- if((i+x)>x) quicksort_c(a, i, i+x);//ordonam cele x filme crescator dupa nume
- i += x;//trecem sa verificam filmele urmatoare de cele pe care le-am ordonat
- }
- afisare();//afisam vectorul/structul
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement