Facebook
From Unreliable Tern, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 88
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define MAXN 14
  5. #define MAXV 11
  6.  
  7.  
  8.  
  9. typedef struct NAMIRNICE
  10. {
  11.         char naziv[MAXN];
  12.         char vrsta[MAXV];
  13.         unsigned kol;
  14.         struct NAMIRNICE *levi;
  15.         struct NAMIRNICE *desni;
  16.        
  17. }NAMIRNICE;
  18.  
  19.  
  20.  
  21. FILE *SafeOpen(char Ime[],char Mod[],int error)
  22. {
  23.         FILE *fp=fopen(Ime,Mod);
  24.         if(fp==NULL)
  25.         {
  26.                 printf("Nije moguce otvoriti fajl");
  27.                 exit(error);
  28.  
  29.         }
  30.  
  31.         return fp;
  32. }
  33.  
  34.  
  35.  
  36. void Inicijalizacija(NAMIRNICE **koren)
  37. {
  38.         *koren=NULL;
  39.  
  40. }
  41.  
  42.  
  43.  
  44. NAMIRNICE *KreirajCvor(char naziv[],char vrsta[],unsigned kol)
  45. {
  46.         NAMIRNICE *novi=(NAMIRNICE *)malloc(sizeof(NAMIRNICE));
  47.         if(novi==NULL)
  48.         {
  49.                 printf("Nema dovoljno RAM-a");
  50.                 exit(21);
  51.  
  52.         }
  53.         strcpy(novi->naziv,naziv);
  54.         novi->kol=kol;
  55.         strcpy(novi->vrsta,vrsta);
  56.         novi->levi=NULL;
  57.         novi->desni=NULL;
  58.  
  59.         return novi;
  60. }
  61.  
  62.  
  63.  
  64. void SpojiCvor(NAMIRNICE **koren,NAMIRNICE *novi)
  65. {
  66.         if(*koren==NULL)
  67.         {
  68.                 *koren=novi;
  69.                 return;
  70.  
  71.         }
  72.         if((*koren)->kol<=novi->kol)
  73.         {
  74.                 SpojiCvor(&((*koren)->desni),novi);
  75.  
  76.         }
  77.        
  78.         if((*koren)->kol>novi->kol)
  79.         {
  80.                 SpojiCvor(&((*koren)->levi),novi);
  81.  
  82.         }
  83.  
  84. }
  85.  
  86.  
  87.  
  88. void Ucitaj(NAMIRNICE **koren,FILE *ulaz)
  89. {
  90.         char naziv[MAXN];
  91.         char vrsta[MAXV];
  92.         unsigned kol;
  93.        
  94.         while(fscanf(ulaz,"%s %u %s",naziv,&kol,vrsta)!=EOF)
  95.         {
  96.                 NAMIRNICE *novi=KreirajCvor(naziv,vrsta,kol);
  97.                 SpojiCvor(koren,novi);
  98.  
  99.         }
  100.  
  101. }
  102.  
  103.  
  104.  
  105. void SacuvajStablo(NAMIRNICE *koren,FILE *izlaz)
  106. {
  107.         if(koren!=NULL)
  108.         {
  109.                 SacuvajStablo(koren->desni,izlaz);
  110.                 fprintf(izlaz,"%u %s %s\n",koren->kol,koren->naziv,koren->vrsta);
  111.                 SacuvajStablo(koren->levi,izlaz);
  112.  
  113.         }
  114.  
  115. }
  116.  
  117.  
  118.  
  119. void NajviseC(NAMIRNICE *koren,FILE *izlaz)
  120. {
  121.         if(koren==NULL)
  122.         {
  123.                 printf("Stablo je prazno");
  124.                 return;
  125.  
  126.         }
  127.         if(koren->desni==NULL)
  128.         {
  129.                 fprintf(izlaz,"Najvise vitamina C ima:\n%u %s %s",koren->kol,koren->naziv,koren->vrsta);
  130.  
  131.         }
  132.         else
  133.         {
  134.                 NajviseC(koren->desni,izlaz);
  135.  
  136.         }
  137.  
  138. }
  139.  
  140.  
  141.  
  142. void UnistiStablo(NAMIRNICE **koren)
  143. {
  144.         if(*koren!=NULL)
  145.         {
  146.                 UnistiStablo(&((*koren)->levi));
  147.                 UnistiStablo(&((*koren)->desni));
  148.                 free(*koren);
  149.                 *koren=NULL;
  150.  
  151.         }
  152.  
  153. }
  154.  
  155.  
  156.  
  157. int main(int brArg,char *Arg[])
  158. {
  159.         NAMIRNICE *koren;
  160.  
  161.         if(brArg!=3)
  162.         {
  163.                 printf("Niste uneli odgovrajuc broj argumenata");
  164.                 exit(42);
  165.  
  166.         }
  167.  
  168.         char *ulaz_ime=Arg[1];
  169.         FILE *ulaz=SafeOpen(ulaz_ime,"r",1);
  170.        
  171.         char *izlaz_ime=Arg[2];
  172.         FILE *izlaz=SafeOpen(izlaz_ime,"w",2); 
  173.  
  174.         Inicijalizacija(&koren);
  175.         Ucitaj(&koren,ulaz);
  176.         SacuvajStablo(koren,izlaz);
  177.         NajviseC(koren,izlaz);
  178.         UnistiStablo(&koren);
  179.        
  180.  
  181.         fclose(ulaz);
  182.         fclose(izlaz);
  183.  
  184.  
  185.         return 0;
  186. }