Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct prijava* PPRIJAVA;
- typedef struct polozili* PPOLOZILI;
- typedef struct student {
- char brojIndexa[15];
- char fullName[40];
- }STUDENT;
- typedef struct predmet {
- int sifraPredmeta;
- char imePredmeta[50];
- }PREDMET;
- typedef struct prijava {
- char brojIndexa[15];
- int sifraPredmeta;
- int ocena;
- PPRIJAVA sled;
- }PRIJAVA;
- typedef struct polozili {
- char brojIndexa[15];
- char fullname[50];
- double prosecna;
- int brojPolozenihIspita;
- PPOLOZILI sled;
- }POLOZILI;
- void ubaciNaKraj(PPRIJAVA * glava, PPRIJAVA * rep, char brojIndexa[], int sifra, int ocena, STUDENT xs[], PREDMET xp[], int brojPredmeta, int brojStudenata);
- int provera(PPRIJAVA glava, PPRIJAVA rep, char brojIndexa[], int sifra, int ocena, STUDENT xs[], PREDMET xp[], int brojPredmeta, int brojStudenata);
- void ispisiPrijave(PPRIJAVA glava);
- void ubaciUPolozili(PPOLOZILI * pglava, PPRIJAVA glava, STUDENT xs[], int brojStudenata);
- void ispisiPolozili(PPOLOZILI glava);
- int brojNoda(PPOLOZILI glava);
- void ispisiPoloziliSortirano(PPOLOZILI glava);
- int main(void) {
- STUDENT xs[] = {
- { "2016_0001", "Andrej Andric" },
- { "2016_0002", "Sofija_Sofic" },
- { "2016_0003", "Jovan Jovic" },
- { "2016_0004", "Sara Saric" },
- { "2016_0005", "Milica Milic" }
- };
- PREDMET xp[] = {
- { 1,"Programiranje 1" },
- { 2,"Programiranje 2" },
- { 3,"UIS" },
- { 4,"Matematika" }
- };
- int brojPredmeta = sizeof(xp) / sizeof(PREDMET);
- int brojStudenata = sizeof(xs) / sizeof(STUDENT);
- PPRIJAVA glava = NULL;
- PPRIJAVA rep = NULL;
- ubaciNaKraj(&glava, &rep, "2016_0005", 2, 10, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0005", 3, 9, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0004", 2, 9, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0003", 2, 8, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0003", 3, 9, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0003", 1, 10, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0002", 1, 5, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0002", 1, 8, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0002", 2, 5, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0002", 2, 6, xs, xp, brojPredmeta, brojStudenata);
- ubaciNaKraj(&glava, &rep, "2016_0001", 1, 7, xs, xp, brojPredmeta, brojStudenata);
- ispisiPrijave(glava);
- PPOLOZILI head = NULL;
- ubaciUPolozili(&head, glava, xs, brojStudenata);
- ispisiPolozili(head);
- ispisiPoloziliSortirano(head);
- return 0;
- }
- void ubaciNaKraj(PPRIJAVA * glava, PPRIJAVA * rep, char brojIndexa[], int sifra, int ocena, STUDENT xs[], PREDMET xp[], int brojPredmeta, int brojStudenata)
- {
- int uslov = 0;
- uslov = provera(*glava, *rep, brojIndexa, sifra, ocena, xs, xp, brojPredmeta, brojStudenata);
- if (uslov) {
- PPRIJAVA nova = malloc(sizeof(PRIJAVA));
- strcpy(nova->brojIndexa, brojIndexa);
- nova->sifraPredmeta = sifra;
- nova->ocena = ocena;
- nova->sled = NULL;
- if (*glava == NULL) {
- *glava = nova;
- *rep = nova;
- }
- else {
- (*rep)->sled = nova;
- *rep = nova;
- }
- }
- }
- int provera(PPRIJAVA glava, PPRIJAVA rep, char brojIndexa[], int sifra, int ocena, STUDENT xs[], PREDMET xp[], int brojPredmeta, int brojStudenata)
- {
- int uslov = 1;
- int postojiStudent = 0;
- for (int i = 0; i < brojStudenata; i++)
- {
- if (strcmp(brojIndexa, xs[i].brojIndexa) == 0) {
- postojiStudent++;
- break;
- }
- }
- if (!postojiStudent) {
- return 0;
- }
- int postojiPredmet = 0;
- for (int i = 0; i < brojPredmeta; i++)
- {
- if (sifra == xp[i].sifraPredmeta) {
- postojiPredmet++;
- break;
- }
- }
- if (!postojiStudent) {
- return 0;
- }
- int polozio = 1;
- PPRIJAVA curr = glava;
- while (curr != NULL) {
- if (strcmp(curr->brojIndexa, brojIndexa) == 0) {
- if (curr->ocena > 5 && curr->sifraPredmeta == sifra) {
- polozio = 0;
- }
- }
- curr = curr->sled;
- }
- if (!polozio) {
- return 0;
- }
- return 1;
- }
- void ispisiPrijave(PPRIJAVA glava)
- {
- printf("PRIJAVE:\nBroj prijave\t\tbrojIndexa\tsifraPredmeta\tocena\n");
- PPRIJAVA curr = glava;
- int i = 1;
- while (curr != NULL) {
- printf("%d.\t\t\t %s\t%d\t\t%d\n", i, curr->brojIndexa, curr->sifraPredmeta, curr->ocena);
- i++;
- curr = curr->sled;
- }
- }
- void ubaciUPolozili(PPOLOZILI * pglava, PPRIJAVA glava, STUDENT xs[], int brojStudenata)
- {
- PPRIJAVA curr = glava;
- while (curr != NULL) {
- if (curr->ocena == 5) {
- curr = curr->sled;
- continue;
- }
- int status = 1;
- PPOLOZILI tren = *pglava;
- while (tren != NULL) {
- if (strcmp(curr->brojIndexa, tren->brojIndexa) == 0) {
- status = 0;
- break;
- }
- tren = tren->sled;
- }
- if (status == 1) {
- PPOLOZILI novi = malloc(sizeof(POLOZILI));
- strcpy(novi->brojIndexa, curr->brojIndexa);
- novi->brojPolozenihIspita = 1;
- for (int i = 0; i < brojStudenata; i++)
- {
- if (strcmp(novi->brojIndexa, xs[i].brojIndexa) == 0) {
- strcpy(novi->fullname, xs[i].fullName);
- }
- }
- novi->prosecna = (double)curr->ocena;
- novi->sled = *pglava;
- *pglava = novi;
- }
- else {
- tren = *pglava;
- while (strcmp(tren->brojIndexa, curr->brojIndexa) != 0) {
- tren = tren->sled;
- }
- int x = tren->prosecna * tren->brojPolozenihIspita++;
- x += curr->ocena;
- tren->prosecna = (double)x / tren->brojPolozenihIspita;
- }
- curr = curr->sled;
- }
- }
- void ispisiPolozili(PPOLOZILI glava)
- {
- printf("PRIJAVE:\nBroj prijave\t\tbrojIndexa\tStudent\t\tProsecna ocena\t Broj polozenih\n");
- PPOLOZILI curr = glava;
- int i = 1;
- while (curr != NULL) {
- printf("%d.\t\t\t %s\t%s\t\t%.2lf\t\t%d\n", i, curr->brojIndexa, curr->fullname, curr->prosecna,curr->brojPolozenihIspita);
- i++;
- curr = curr->sled;
- }
- }
- int brojNoda(PPOLOZILI glava)
- {
- int i = 0;
- PPOLOZILI curr = glava;
- while (curr != NULL) {
- i++;
- curr = curr->sled;
- }
- return i;
- }
- void ispisiPoloziliSortirano(PPOLOZILI glava) {
- POLOZILI niz[10];
- int broj = brojNoda(glava);
- PPOLOZILI curr = glava;
- int i = 0;
- while (curr != NULL) {
- niz[i].prosecna = curr->prosecna;
- niz[i].brojPolozenihIspita = curr->brojPolozenihIspita;
- strcpy(niz[i].brojIndexa, curr->brojIndexa);
- strcpy(niz[i].fullname, curr->fullname);
- curr = curr->sled;
- i++;
- }
- for (int c = 0; c <broj - 1; c++)
- {
- for (int d = 0; d < broj - c - 1; d++)
- {
- if (niz[d].prosecna <= niz[d + 1].prosecna)
- {
- if (niz[d].prosecna == niz[d + 1].prosecna && niz[d].brojPolozenihIspita>niz[d+1].brojPolozenihIspita) {
- continue;
- }
- POLOZILI swap = niz[d];
- niz[d] = niz[d + 1];
- niz[d + 1] = swap;
- }
- }
- }
- for (int i = 0; i < broj; i++)
- {
- printf("\n%d.\t\t\t %s\t%s\t\t%.2lf\t\t%d", i, niz[i].brojIndexa, niz[i].fullname, niz[i].prosecna, niz[i].brojPolozenihIspita);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement