- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #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->cena<tek->cena)
- {
- novi->sledeci=*glava;
- *glava=novi;
- return;
- }
- while(tek!=NULL)
- {
- if(novi->cena<tek->cena)
- {
- 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->cena<naj->cena)
- {
- 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;
- }