Facebook
From Tacky Iguana, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 71
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define MAXG 3
  5. #define MAXI 11
  6.  
  7.  
  8. typedef struct GORIVO
  9. {
  10.         char grad[MAXG];
  11.         char gorivo[MAXI];
  12.         float cena;
  13.         struct GORIVO *sledeci;
  14.  
  15. }GORIVO;
  16.  
  17.  
  18.  
  19. FILE *SafeOpen(char Ime[],char Mod[],int error)
  20. {
  21.         FILE *fp=fopen(Ime,Mod);
  22.         if(fp==NULL)
  23.         {
  24.                 printf("Nije moguce otvoriti fajl");
  25.                 exit(error);
  26.        
  27.         }
  28.         return fp;
  29.  
  30. }
  31.  
  32.  
  33.  
  34. void Inicijalizacija(GORIVO **glava)
  35. {
  36.         *glava=NULL;
  37.  
  38. }
  39.  
  40.  
  41.  
  42. GORIVO *KreirajCvor(char grad[],char gorivo[],float cena)
  43. {
  44.         GORIVO *novi=(GORIVO *)malloc(sizeof(GORIVO));
  45.         if(novi==NULL)
  46.         {
  47.                 printf("Nema dovoljno RAM-a");
  48.                 exit(21);
  49.  
  50.         }
  51.         strcpy(novi->grad,grad);
  52.         strcpy(novi->gorivo,gorivo);
  53.         novi->cena=cena;
  54.         novi->sledeci=NULL;
  55.  
  56.         return novi;
  57.  
  58. }
  59.  
  60.  
  61.  
  62. void SpojiCvor(GORIVO **glava,GORIVO *novi)
  63. {
  64.         if(*glava==NULL)
  65.         {
  66.                 *glava=novi;
  67.                 return;
  68.  
  69.         }
  70.        
  71.         int nakraj=1;
  72.         GORIVO *tek,*pret;
  73.         tek=*glava;
  74.         pret=*glava;
  75.         if(novi->cena<tek->cena)
  76.         {
  77.                 novi->sledeci=*glava;
  78.                 *glava=novi;
  79.                 return;
  80.  
  81.         }
  82.         while(tek!=NULL)
  83.         {
  84.                 if(novi->cena<tek->cena)
  85.                 {
  86.                         nakraj=0;
  87.                         break;
  88.  
  89.                 }
  90.                 pret=tek;
  91.                 tek=tek->sledeci;
  92.  
  93.         }
  94.         if(nakraj==1)
  95.         {
  96.                 pret->sledeci=novi;
  97.  
  98.         }
  99.         else
  100.         {
  101.                 novi->sledeci=tek;
  102.                 pret->sledeci=novi;
  103.  
  104.         }
  105.  
  106. }
  107.  
  108.  
  109.  
  110. void KreirajListu(GORIVO **glava,FILE *ulaz)
  111. {
  112.         char grad[MAXG];
  113.         char gorivo[MAXI];
  114.         float cena;
  115.         while(fscanf(ulaz,"%s %s %f",grad,gorivo,&cena)!=EOF)
  116.         {
  117.                 GORIVO *novi=KreirajCvor(grad,gorivo,cena);
  118.                 SpojiCvor(glava,novi);
  119.  
  120.         }
  121.  
  122. }
  123.  
  124.  
  125.  
  126. void SacuvajListu(GORIVO *glava,FILE *izlaz)
  127. {
  128.         if(glava!=NULL)
  129.         {
  130.                 fprintf(izlaz,"%.2f %s %sn",glava->cena,glava->grad,glava->gorivo);
  131.                 SacuvajListu(glava->sledeci,izlaz);
  132.  
  133.         }
  134.  
  135. }
  136.  
  137.  
  138.  
  139. void ProsecnaCena(GORIVO *glava,FILE *izlaz,char vrsta_goriva[])
  140. {
  141.         if(glava==NULL)
  142.         {
  143.                 printf("Lista je prazna");
  144.                 return;
  145.  
  146.         }
  147.         int br=0;
  148.         float suma=0;
  149.         float S;
  150.         while(glava!=NULL)
  151.         {
  152.                 if(strcmp(glava->gorivo,vrsta_goriva)==0)
  153.                 {
  154.                         br++;
  155.                         suma+=glava->cena;
  156.  
  157.  
  158.                 }
  159.                 glava=glava->sledeci;
  160.        
  161.         }
  162.         S=(float)suma/br;
  163.  
  164.         fprintf(izlaz,"Srednja vrednost cene goriva tipa %s je:n%.2f ",vrsta_goriva,S);
  165.  
  166.  
  167. }
  168.  
  169.  
  170.  
  171. void UnistiListu(GORIVO **glava)
  172. {
  173.         if(*glava!=NULL)
  174.         {
  175.                 UnistiListu(&((*glava)->sledeci));
  176.                 free(*glava);
  177.                 *glava=NULL;
  178.  
  179.         }
  180.  
  181. }
  182.  
  183.  
  184.  
  185. int main(int brArg,char *Arg[])
  186. {
  187.         GORIVO *glava;
  188.         if(brArg!=4)
  189.         {
  190.                 printf("Niste uneli odgovarajuc broj argumenata");
  191.                 exit(42);
  192.  
  193.         }
  194.  
  195.         char *ulaz_ime=Arg[2];
  196.         FILE *ulaz=SafeOpen(ulaz_ime,"r",1);
  197.        
  198.         char *izlaz_ime=Arg[3];
  199.         FILE *izlaz=SafeOpen(izlaz_ime,"w",2);
  200.  
  201.         Inicijalizacija(&glava);       
  202.         KreirajListu(&glava,ulaz);
  203.         SacuvajListu(glava,izlaz);
  204.         ProsecnaCena(glava,izlaz,Arg[1]);
  205.         UnistiListu(&glava);
  206.  
  207.  
  208.         fclose(ulaz);
  209.         fclose(izlaz);
  210.  
  211.  
  212.         return 0;
  213. }