[ Miladinovic @ 30.01.2009. 13:55 ] @
Pozdrav, Trebam da rešim problem koji izgleda ovako: Unositi studente (ime, prezime,ocenu) sortirano u listu po sledećim kriterijumima: 1. Po prosečnoj oceni; 2.Ukoliko je prosečna ocena ista kod studenata, njih sortirati leksikografski po imenu Ja sam uradio samo za prosečnu ocenu, i posebno da sortira leksikografski, ali ne uspevam da uradim kombinaciju da radi kako treba, pa molim za pomoć. Code: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _cvor { char ime[100]; char prezime[100]; float ocena; struct _cvor *sl; }CVOR; CVOR* naparavi_cvor(char ime[],char* prezime,float ocena) { CVOR*novi=(CVOR*)malloc(sizeof(CVOR)); if (novi==NULL) exit(-1); strcpy(novi->ime,ime); strcpy(novi->prezime,prezime); novi->ocena=ocena; return novi; } void ubaci_na_pocetak_ime(CVOR**pl,char* ime,char*prezime,float ocena) { CVOR*novi=naparavi_cvor(ime,prezime,ocena); if (*pl==NULL || strcmp(ime,(*pl)->ime)<0) { novi->sl=*pl; *pl=novi; return; } CVOR*t; for (t=*pl;t->sl!=NULL && strcmp(ime,t->sl->ime)>0;t=t->sl); novi->sl=t->sl; t->sl=novi; } void ubaci_na_pocetak_prosek(CVOR**pl,char* ime,char*prezime,float ocena) { CVOR*novi=naparavi_cvor(ime,prezime,ocena); if (*pl==NULL || ocena > (*pl)->ocena) { novi->sl=*pl; *pl=novi; return; } CVOR*t; for (t=*pl;t->sl!=NULL && t->sl->ocena > ocena;t=t->sl); novi->sl=t->sl; t->sl=novi; } void ispis_liste(CVOR*l) { CVOR*t; for (t=l;t!=NULL;t=t->sl) printf("%s\t%s\t%f\n",t->ime,t->prezime,t->ocena); } void oslobodi(CVOR*l) { while (l) { CVOR*tmp=l->sl; free(l); l=tmp; } } int main() { CVOR*l=NULL; CVOR*m=NULL; char ime[100]; char prezime[100]; float ocena; int i; for (i=0;i<3;i++) { printf("\nUnesite Ime Studenta:"); scanf("%s",&ime); printf("\nUnesite Prezime Studenta:"); scanf("%s",&prezime); printf("\nUnesite Prosecnu Ocenu:"); scanf("%f",&ocena); ubaci_na_pocetak_ime(&l,ime,prezime,ocena); ubaci_na_pocetak_prosek(&m,ime,prezime,ocena); } printf("\n\n---------Ispis leksikografski po imenima----------\n"); ispis_liste(l); printf("\n\n-----------Ispis po prosecnoj oceni-----------\n"); ispis_liste(m); oslobodi(l); oslobodi(m); return 0; } |