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