#include #include #include #define MAXG 3 #define MAXI 11 typedef struct GORIVO { char grad[MAXG]; char gorivo[MAXI]; float cena; struct GORIVO *sledeci; }GORIVO; FILE *SafeOpen(char Ime[],char Mod[],int error) { FILE *fp=fopen(Ime,Mod); if(fp==NULL) { printf("Nije moguce otvoriti fajl"); exit(error); } return fp; } void Inicijalizacija(GORIVO **glava) { *glava=NULL; } GORIVO *KreirajCvor(char grad[],char gorivo[],float cena) { GORIVO *novi=(GORIVO *)malloc(sizeof(GORIVO)); if(novi==NULL) { printf("Nema dovoljno RAM-a"); exit(21); } strcpy(novi->grad,grad); strcpy(novi->gorivo,gorivo); novi->cena=cena; novi->sledeci=NULL; return novi; } void SpojiCvor(GORIVO **glava,GORIVO *novi) { if(*glava==NULL) { *glava=novi; return; } int nakraj=1; GORIVO *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(GORIVO **glava,FILE *ulaz) { char grad[MAXG]; char gorivo[MAXI]; float cena; while(fscanf(ulaz,"%s %s %f",grad,gorivo,&cena)!=EOF) { GORIVO *novi=KreirajCvor(grad,gorivo,cena); SpojiCvor(glava,novi); } } void SacuvajListu(GORIVO *glava,FILE *izlaz) { if(glava!=NULL) { fprintf(izlaz,"%.2f %s %sn",glava->cena,glava->grad,glava->gorivo); SacuvajListu(glava->sledeci,izlaz); } } void ProsecnaCena(GORIVO *glava,FILE *izlaz,char vrsta_goriva[]) { if(glava==NULL) { printf("Lista je prazna"); return; } int br=0; float suma=0; float S; while(glava!=NULL) { if(strcmp(glava->gorivo,vrsta_goriva)==0) { br++; suma+=glava->cena; } glava=glava->sledeci; } S=(float)suma/br; fprintf(izlaz,"Srednja vrednost cene goriva tipa %s je:n%.2f ",vrsta_goriva,S); } void UnistiListu(GORIVO **glava) { if(*glava!=NULL) { UnistiListu(&((*glava)->sledeci)); free(*glava); *glava=NULL; } } int main(int brArg,char *Arg[]) { GORIVO *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(glava,izlaz); ProsecnaCena(glava,izlaz,Arg[1]); UnistiListu(&glava); fclose(ulaz); fclose(izlaz); return 0; }