MartinSRB

Намирница са највише витамина С

Dec 15th, 2021 (edited)
1,174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_NAZIV (13 + 1)
  6. #define MAX_VRSTA (10 + 1)
  7.  
  8. typedef struct namirnica_st{
  9.     char naziv[MAX_NAZIV];
  10.     unsigned int kolicina;
  11.     char vrsta[MAX_VRSTA];
  12.     struct namirnica_st *left;
  13.     struct namirnica_st *right;
  14. }NAMIRNICA;
  15.  
  16. void tree_init(NAMIRNICA**);
  17. void delete_tree(NAMIRNICA**);
  18. NAMIRNICA* make_namirnica(char*,unsigned int,char*);
  19. void add_to_tree(NAMIRNICA**,NAMIRNICA*);
  20.  
  21. FILE* safe_open(char*,char*);
  22. void load(FILE*,NAMIRNICA**);
  23. void save(FILE*,NAMIRNICA*);
  24. void save_max(FILE*,NAMIRNICA*);
  25.  
  26. int main(int argc,char** argv){
  27.     if(argc != 3){
  28.         printf("Nepravilan poziv programa.\n");
  29.         return EXIT_FAILURE;
  30.     }else{
  31.         NAMIRNICA* koren;
  32.         FILE* file = safe_open(argv[1],"r");
  33.         tree_init(&koren);
  34.         load(file,&koren);
  35.         fclose(file);
  36.         file = safe_open(argv[2],"w");
  37.         save(file,koren);
  38.         save_max(file,koren);
  39.         fclose(file);
  40.         delete_tree(&koren);
  41.         return EXIT_SUCCESS;
  42.     }
  43. }
  44.  
  45. void tree_init(NAMIRNICA** koren){
  46.     *koren = NULL;
  47. }
  48.  
  49. void delete_tree(NAMIRNICA** koren){
  50.     if(*koren != NULL){
  51.         delete_tree(&(*koren)->left);
  52.         delete_tree(&(*koren)->right);
  53.         free(*koren);
  54.     }
  55. }
  56.  
  57. NAMIRNICA* make_namirnica(char* naziv,unsigned int kolicina,char* vrsta){
  58.     NAMIRNICA* new = (NAMIRNICA*)malloc(sizeof(NAMIRNICA));
  59.     if(new == NULL){
  60.         printf("Nije moguce zauzeti memoriju.");
  61.         exit(EXIT_FAILURE);
  62.     }
  63.     strcpy(new->naziv,naziv);
  64.     strcpy(new->vrsta,vrsta);
  65.     new->kolicina = kolicina;
  66.     new->left     = NULL;
  67.     new->right    = NULL;
  68.     return new;
  69. }
  70.  
  71. void add_to_tree(NAMIRNICA** koren,NAMIRNICA* new){
  72.     if(*koren == NULL){
  73.         *koren = new;
  74.     }else{
  75.         if((*koren)->kolicina > new->kolicina){
  76.             add_to_tree(&(*koren)->right,new);
  77.         }else{
  78.             add_to_tree(&(*koren)->left,new);
  79.         }
  80.     }
  81.     return;
  82. }
  83.  
  84. FILE* safe_open(char* name,char* mode){
  85.     FILE* f = fopen(name,mode);
  86.     if(f == NULL){
  87.         printf("Nije moguce otvoriti fajl %s.\n",name);
  88.         exit(EXIT_FAILURE);
  89.     }
  90.     return f;
  91. }
  92.  
  93. void load(FILE *f,NAMIRNICA** koren){
  94.     char naziv[MAX_NAZIV],
  95.          vrsta[MAX_VRSTA];
  96.     unsigned int kolicina;
  97.     while(fscanf(f,"%s %u %s",
  98.                              naziv,
  99.                              &kolicina,
  100.                              vrsta) != EOF){
  101.         add_to_tree(koren,make_namirnica(naziv,kolicina,vrsta));
  102.     }
  103.     return;
  104. }
  105.  
  106. void save(FILE* f,NAMIRNICA* koren){
  107.     if(koren != NULL){
  108.         save(f,koren->left);
  109.         fprintf(f,"%3u %-13s %s\n",
  110.                                 koren->kolicina,
  111.                                 koren->naziv,
  112.                                 koren->vrsta);
  113.         save(f,koren->right);
  114.     }
  115. }
  116.  
  117. void save_max(FILE* f,NAMIRNICA* koren){
  118.     if(koren->left != NULL){
  119.         save_max(f,koren->left);
  120.         return;
  121.     }
  122.     fprintf(f,"\n%s %u",koren->naziv,koren->kolicina);
  123. }
Advertisement
Add Comment
Please, Sign In to add comment