/***************************************************************** * Ovo delo zaštićeno je licencom Creative Commons CC BY-NC-ND 4.0 * (Attribution-NonCommercial-NoDerivatives 4.0 International License). * Za detalje pogledati LICENSE.TXT * Autori: Milena Vujosevic Janicic, Jelena Graovac, Nina Radojicic, * Ana Spasic, Mirko Spasic, Andjelka Zecevic ******************************************************************/ #include #include #include #define MAX 1000 #define MAX_DUZINA 16 /* Struktura koja reprezentuje jednog gradjanina */ typedef struct gr { char ime[MAX_DUZINA]; char prezime[MAX_DUZINA]; } Gradjanin; /* Funkcija sortira niz gradjana rastuce po imenima */ void sort_ime(Gradjanin a[], int n) { int i, j, min; Gradjanin pom; for (i = 0; i < n - 1; i++) { /* Unutrasnja petlja pronalazi poziciju min, na kojoj se nalazi najmanji od elemenata a[i].ime,...,a[n-1].ime. */ min = i; for (j = i + 1; j < n; j++) if (strcmp(a[j].ime, a[min].ime) < 0) min = j; /* Zamena elemenata na pozicijama (i) i min. Ovo se radi samo ako su (i) i min razliciti, inace je nepotrebno. */ if (min != i) { pom = a[i]; a[i] = a[min]; a[min] = pom; } } } /* Funkcija sortira niz gradjana rastuce po prezimenima */ void sort_prezime(Gradjanin a[], int n) { int i, j, min; Gradjanin pom; for (i = 0; i < n - 1; i++) { /* Unutrasnja petlja pronalazi poziciju min, na kojoj se nalazi najmanji od elemenata a[i].prezime,...,a[n-1].prezime. */ min = i; for (j = i + 1; j < n; j++) if (strcmp(a[j].prezime, a[min].prezime) < 0) min = j; /* Zamena elemenata na pozicijama (i) i min. Ovo se radi samo ako su (i) i min razliciti, inace je nepotrebno. */ if (min != i) { pom = a[i]; a[i] = a[min]; a[min] = pom; } } } /* Pretraga niza gradjana */ int linearna_pretraga(Gradjanin a[], int n, Gradjanin * x) { int i; for (i = 0; i < n; i++) if (strcmp(a[i].ime, x->ime) == 0 && strcmp(a[i].prezime, x->prezime) == 0) return i; return -1; } int main() { Gradjanin spisak1[MAX], spisak2[MAX]; int isti_rbr = 0; int i, n; FILE *fp = NULL; /* Otvara se datoteka */ if ((fp = fopen("biracki-spisak.txt", "r")) == NULL) { fprintf(stderr, "Greska: Neupesno otvaranje datoteke za citanje.\n"); exit(EXIT_FAILURE); } /* Cita se sadrzaj */ for (i = 0; fscanf(fp, "%s %s", spisak1[i].ime, spisak1[i].prezime) != EOF; i++) spisak2[i] = spisak1[i]; n = i; /* Zatvara se datoteka */ fclose(fp); sort_ime(spisak1, n); /***************************************************************** Ovaj deo je iskomentarisan jer se u zadatku ne trazi ispis sortiranih nizova. Koristi se samo u fazi testiranja programa. printf("Biracki spisak [uredjen prema imenima]:\n"); for(i=0; i