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