#include #include #include #define MAXN 11 #define MAXZ 9 typedef struct IGRE { char naziv[MAXN]; char zanr[MAXZ]; char platforma[MAXZ]; float cena; struct IGRE *sledeci; }IGRE; FILE *SafeOpen(char Ime[],char Mod[],int error) { FILE *fp=fopen(Ime,Mod); if(fp==NULL) { printf("Nije moguce otvoriti datoteku"); exit(error); } return fp; } void Inicijalizacija(IGRE **glava) { *glava=NULL; } IGRE *KreirajCvor(char naziv[],char zanr[],char platforma[],float cena) { IGRE *novi=(IGRE *)malloc(sizeof(IGRE)); if(novi==NULL) { printf("Nema dovoljno RAM-a"); exit(21); } strcpy(novi->naziv,naziv); strcpy(novi->zanr,zanr); strcpy(novi->platforma,platforma); novi->cena=cena; novi->sledeci=NULL; return novi; } void SpojiCvor(IGRE **glava,IGRE *novi) { if(*glava==NULL) { *glava=novi; return; } int nakraj=1; IGRE *tek,*pret; tek=*glava; pret=*glava; if(novi->cenacena) { novi->sledeci=*glava; *glava=novi; return; } while(tek!=NULL) { if(novi->cenacena) { nakraj=0; break; } pret=tek; tek=tek->sledeci; } if(nakraj==1) { pret->sledeci=novi; } else { novi->sledeci=pret->sledeci; pret->sledeci=novi; } } void Ucitaj(FILE *ulaz,IGRE **glava) { char naziv[MAXN]; char zanr[MAXZ]; char platforma[MAXZ]; float cena; IGRE *novi; while(fscanf(ulaz,"%s %s %s %f",naziv,zanr,platforma,&cena)!=EOF) { novi=KreirajCvor(naziv,zanr,platforma,cena); SpojiCvor(glava,novi); } } void SacuvajListu(FILE *izlaz,IGRE *glava) { if(glava!=NULL) { fprintf(izlaz,"%s %s %s %.2f\n",x->naziv,x->zanr,x->platforma,x->cena); SacuvajListu(izlaz,glava->sledeci); } } void UnistiListu(IGRE **glava) { if(*glava!=NULL) { UnistiListu(&((*glava)->sledeci)); free(*glava); *glava=NULL; } } void NajpovoljnijaIGRE(IGRE *glava,char platforma[],char zanr[],FILE *izlaz) { if(glava==NULL) { return; } IGRE *naj=NULL; while(glava!=NULL) { if(strcmp(glava->platforma,platforma)==0 && strcmp(glava->zanr,zanr)==0) { if(naj==NULL) { naj=glava; } else if(glava->cenacena) { naj=glava; } } glava=glava->sledeci; } if(naj==NULL) { fprintf(izlaz,"Za %s platformu ne postoje %s igre",platforma,zanr); } else { fprintf(izlaz,"Najpovoljnija %s igra za platformu %s je:%s %.2f",zanr,platforma,naj->naziv,naj->cena); } } int main(int brArg,char *Arg[]) { IGRE *glava; if(brArg!=5) { printf("Niste uneli odgovarajuc br argumenata"); exit(42); } char *ulaz_ime=Arg[3]; FILE *ulaz=SafeOpen(ulaz_ime,"r",1); char *izlaz_ime=Arg[4]; FILE *izlaz=SafeOpen(izlaz_ime,"w",2); Inicijalizacija(&glava); Ucitaj(ulaz,&glava); SacuvajListu(izlaz,glava); NajpovoljnijaIGRE(glava,Arg[1],Arg[2],izlaz); UnistiListu(&glava); fclose(ulaz); fclose(izlaz); return 0; }