#include #include #include #define MAXG 3 #define MAXM 21 typedef struct MESO { char grad[MAXG]; char meso[MAXM]; float cena; struct MESO *sledeci; }MESO; 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(MESO **glava) { *glava=NULL; } MESO *KreirajCvor(char grad[],char meso[],int cena) { MESO *novi=(MESO *)malloc(sizeof(MESO)); if(novi==NULL) { printf("Nema dovoljno RAM-a"); exit(21); } strcpy(novi->grad,grad); strcpy(novi->meso,meso); novi->cena=cena; novi->sledeci=NULL; return novi; } void SpojiCvor(MESO **glava,MESO *novi) { if(*glava==NULL) { *glava=novi; return; } int nakraj=1; MESO *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=tek; pret->sledeci=novi; } } void KreirajListu(MESO **glava,FILE *ulaz) { char grad[MAXG]; char meso[MAXM]; float cena; while(fscanf(ulaz,"%s %s %f",grad,meso,&cena)!=EOF) { MESO *novi=KreirajCvor(grad,meso,cena); SpojiCvor(glava,novi); } } void SacuvajListu(FILE *izlaz,MESO *glava) { if(glava!=NULL) { fprintf(izlaz,"%.2f %s %s\n",glava->cena,glava->grad,glava->meso); SacuvajListu(izlaz,glava->sledeci); } } void NajpovoljnijeMeso(MESO *glava,char meso[],FILE *izlaz) { if(glava==NULL) { printf("Lista je prazna"); return; } MESO *naj=NULL; while(glava!=NULL) { if(strcmp(glava->meso,meso)==0) { if(naj==NULL) { naj=glava; } else if(glava->cenacena) { naj=glava; } } glava=glava->sledeci; } if(naj==NULL) { fprintf(izlaz,"Ne postoji meso: %s",meso); } else { fprintf(izlaz,"Najpovoljnija %s je:\n%.2f %s %s ",meso,naj->cena,naj->grad,naj->meso); } } void UnistiListu(MESO **glava) { if(*glava!=NULL) { UnistiListu(&((*glava)->sledeci)); free(*glava); *glava=NULL; } } int main(int brArg,char *Arg[]) { MESO *glava; if(brArg!=4) { printf("Niste uneli odgovarajuc broj argumenata"); exit(42); } char *ulaz_ime=Arg[2]; FILE *ulaz=SafeOpen(ulaz_ime,"r",1); char *izlaz_ime=Arg[3]; FILE *izlaz=SafeOpen(izlaz_ime,"w",2); Inicijalizacija(&glava); KreirajListu(&glava,ulaz); SacuvajListu(izlaz,glava); NajpovoljnijeMeso(glava,Arg[1],izlaz); UnistiListu(&glava); fclose(ulaz); fclose(izlaz); return 0; }