Facebook
From Commodious Madrill, 2 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 32
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define MAXN 11
  5. #define MAXZ 9
  6.  
  7.  
  8. typedef struct IGRE
  9. {
  10.         char naziv[MAXN];
  11.         char zanr[MAXZ];
  12.         char platforma[MAXZ];
  13.         float cena;
  14.         struct IGRE *sledeci;
  15.  
  16. }IGRE;
  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(IGRE **glava)
  36. {
  37.         *glava=NULL;
  38.  
  39. }
  40.  
  41.  
  42.  
  43. IGRE *KreirajCvor(char naziv[],char zanr[],char platforma[],float cena)
  44. {
  45.         IGRE *novi=(IGRE *)malloc(sizeof(IGRE));
  46.         if(novi==NULL)
  47.         {
  48.                 printf("Nema dovoljno RAM-a");
  49.                 exit(21);
  50.  
  51.         }
  52.         strcpy(novi->naziv,naziv);
  53.         strcpy(novi->zanr,zanr);
  54.         strcpy(novi->platforma,platforma);
  55.         novi->cena=cena;
  56.         novi->sledeci=NULL;
  57.  
  58.         return novi;
  59. }
  60.  
  61.  
  62.  
  63. void SpojiCvor(IGRE **glava,IGRE *novi)
  64. {
  65.         if(*glava==NULL)
  66.         {
  67.                 *glava=novi;
  68.                 return;
  69.         }
  70.        
  71.         int nakraj=1;
  72.         IGRE *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=pret->sledeci;
  102.                 pret->sledeci=novi;
  103.  
  104.         }
  105.  
  106. }
  107.  
  108.  
  109.  
  110. void Ucitaj(FILE *ulaz,IGRE **glava)
  111. {
  112.         char naziv[MAXN];
  113.     char zanr[MAXZ];
  114.     char platforma[MAXZ];
  115.     float cena;
  116.         IGRE *novi;
  117.         while(fscanf(ulaz,"%s %s %s %f",naziv,zanr,platforma,&cena)!=EOF)
  118.         {
  119.                 novi=KreirajCvor(naziv,zanr,platforma,cena);
  120.                 SpojiCvor(glava,novi);
  121.  
  122.         }
  123.  
  124. }
  125.  
  126.  
  127.  
  128. void SacuvajListu(FILE *izlaz,IGRE *glava)
  129. {
  130.         if(glava!=NULL)
  131.         {
  132.                 fprintf(izlaz,"%s %s %s %.2f\n",x->naziv,x->zanr,x->platforma,x->cena);
  133.                 SacuvajListu(izlaz,glava->sledeci);
  134.                
  135.         }
  136.  
  137. }
  138.  
  139.  
  140.  
  141. void UnistiListu(IGRE **glava)
  142. {
  143.         if(*glava!=NULL)
  144.         {
  145.                 UnistiListu(&((*glava)->sledeci));
  146.                 free(*glava);
  147.                 *glava=NULL;
  148.  
  149.         }
  150.  
  151. }
  152.  
  153.  
  154.  
  155. void NajpovoljnijaIGRE(IGRE *glava,char platforma[],char zanr[],FILE *izlaz)
  156. {
  157.         if(glava==NULL)
  158.         {
  159.                 return;
  160.  
  161.         }
  162.        
  163.         IGRE *naj=NULL;
  164.         while(glava!=NULL)
  165.         {
  166.                 if(strcmp(glava->platforma,platforma)==0 && strcmp(glava->zanr,zanr)==0)
  167.                 {
  168.                         if(naj==NULL)
  169.                         {
  170.                                 naj=glava;
  171.  
  172.                         }
  173.                         else if(glava->cena<naj->cena)
  174.                         {
  175.                                 naj=glava;
  176.  
  177.                         }
  178.        
  179.                 }
  180.                 glava=glava->sledeci;
  181.         }
  182.        
  183.         if(naj==NULL)
  184.         {
  185.                 fprintf(izlaz,"Za %s platformu ne postoje %s igre",platforma,zanr);
  186.  
  187.         }
  188.         else
  189.         {
  190.                 fprintf(izlaz,"Najpovoljnija %s igra za platformu %s je:%s %.2f",zanr,platforma,naj->naziv,naj->cena);
  191.  
  192.         }
  193.  
  194. }
  195.  
  196.  
  197.  
  198. int main(int brArg,char *Arg[])
  199. {
  200.         IGRE *glava;
  201.         if(brArg!=5)
  202.         {
  203.                 printf("Niste uneli odgovarajuc br argumenata");
  204.                 exit(42);
  205.  
  206.         }
  207.        
  208.         char *ulaz_ime=Arg[3];
  209.         FILE *ulaz=SafeOpen(ulaz_ime,"r",1);
  210.        
  211.         char *izlaz_ime=Arg[4];
  212.         FILE *izlaz=SafeOpen(izlaz_ime,"w",2);
  213.        
  214.         Inicijalizacija(&glava);
  215.         Ucitaj(ulaz,&glava);
  216.         SacuvajListu(izlaz,glava);
  217.         NajpovoljnijaIGRE(glava,Arg[1],Arg[2],izlaz);
  218.         UnistiListu(&glava);
  219.  
  220.  
  221.         fclose(ulaz);  
  222.         fclose(izlaz);
  223.  
  224.  
  225.  
  226.         return 0;
  227. }