MartinSRB

odnesi.com

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