MartinSRB

Поново ради биоскоп

Dec 13th, 2021 (edited)
1,332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_GRAD (2 + 1)
  6. #define MAX_BIOSKOP (10 + 1)
  7. #define MAX_FILM (8 + 1)
  8. #define MAX_ZANR (9 + 1)
  9.  
  10. typedef struct projekcija_st
  11. {
  12.     char grad[MAX_GRAD];
  13.     char bioskop[MAX_BIOSKOP];
  14.     char film[MAX_FILM];
  15.     char zanr[MAX_ZANR];
  16.     float cena;
  17.     struct projekcija_st *left;
  18.     struct projekcija_st *right;
  19. }PROJEKCIJA;
  20.  
  21. void tree_init(PROJEKCIJA**);
  22. void delete_tree(PROJEKCIJA**);
  23. PROJEKCIJA* make_projekcija(char*,char*,char*,char*,float);
  24. void add_to_tree(PROJEKCIJA**,PROJEKCIJA*);
  25.  
  26. FILE* safe_open(char*,char*);
  27. void load(FILE*,PROJEKCIJA**);
  28. void save(FILE*,PROJEKCIJA*,char*,char*,PROJEKCIJA**);
  29.  
  30. int main(int argc,char** argv){
  31.     if(argc != 5){
  32.         printf("nepravilan poziv programa.");
  33.         exit(EXIT_FAILURE);
  34.     }else{
  35.         PROJEKCIJA* koren,
  36.                   * min = NULL;
  37.         tree_init(&koren);
  38.         FILE* file = safe_open(argv[3],"r");
  39.         load(file,&koren);
  40.         fclose(file);
  41.         file = safe_open(argv[4],"w");
  42.         save(file,koren,argv[1],argv[2],&min);
  43.         if(min != NULL){
  44.             fprintf(file,"\nNajpovoljnija projekcija za %s filmove u %s je:\n%s %.2f",argv[2],argv[1],min->film,min->cena);
  45.         }else{
  46.             fprintf(file,"\nNiko ne projektuje %s filmove u %s!",argv[2],argv[1]);
  47.         }
  48.         fclose(file);
  49.         delete_tree(&koren);
  50.         return EXIT_SUCCESS;
  51.     }
  52. }
  53.  
  54. void tree_init(PROJEKCIJA** koren){
  55.     *koren = NULL;
  56.     return;
  57. }
  58.  
  59. void delete_tree(PROJEKCIJA** koren){
  60.     if(*koren != NULL){
  61.         delete_tree(&(*koren)->left);
  62.         delete_tree(&(*koren)->right);
  63.         free(*koren);
  64.     }
  65. }
  66.  
  67. PROJEKCIJA* make_projekcija(char* grad,char* bioskop,char* film,char* zanr,float cena){
  68.     PROJEKCIJA* new = (PROJEKCIJA*)malloc(sizeof(PROJEKCIJA));
  69.     if(new == NULL){
  70.         printf("Nije moguce zauzeti memoriju.");
  71.         exit(EXIT_FAILURE);
  72.     }
  73.     strcpy(new->grad,grad);
  74.     strcpy(new->bioskop,bioskop);
  75.     strcpy(new->film,film);
  76.     strcpy(new->zanr,zanr);
  77.     new->cena = cena;
  78.     new->left = NULL;
  79.     new->right = NULL;
  80.     return new;
  81. }
  82.  
  83. void add_to_tree(PROJEKCIJA** koren,PROJEKCIJA* new){
  84.     if(*koren == NULL){
  85.         *koren = new;
  86.     }else{
  87.         if((*koren)->cena > new->cena){
  88.             add_to_tree(&(*koren)->left,new);
  89.         }else{
  90.             add_to_tree(&(*koren)->right,new);
  91.         }
  92.     }
  93.     return;
  94. }
  95.  
  96. FILE* safe_open(char* name,char* mode){
  97.     FILE* f = fopen(name,mode);
  98.     if(f == NULL){
  99.         printf("NIje moguce otvoriti fajl %s.",name);
  100.         exit(EXIT_FAILURE);
  101.     }
  102.     return f;
  103. }
  104.  
  105. void load(FILE* f,PROJEKCIJA** koren){
  106.     char grad[MAX_GRAD],
  107.          bioskop[MAX_BIOSKOP],
  108.          film[MAX_FILM],
  109.          zanr[MAX_ZANR];
  110.     float cena;
  111.     while(fscanf(f,"%s %s %s %s %f",
  112.                                     grad,
  113.                                     bioskop,
  114.                                     film,
  115.                                     zanr,
  116.                                     &cena) != EOF){
  117.         add_to_tree(koren,make_projekcija(grad,bioskop,film,zanr,cena));
  118.     }
  119.     return;
  120. }
  121.  
  122. void save(FILE* f,PROJEKCIJA* koren,char* param_grad,char* param_zanr,PROJEKCIJA** min){
  123.     if(koren != NULL){
  124.         save(f,koren->left,param_grad,param_zanr,min);
  125.         fprintf(f,"%2s %-10s %-8s %-9s %6.2f\n",koren->grad,
  126.                                               koren->bioskop,
  127.                                               koren->film,
  128.                                               koren->zanr,
  129.                                               koren->cena);
  130.         if( (strcmp(koren->grad,param_grad) == 0) && (strcmp(koren->zanr,param_zanr) == 0) ){
  131.             if(*min == NULL){
  132.                 *min = koren;
  133.             }else{
  134.                 if(koren->cena < (*min)->cena){
  135.                     *min = koren;
  136.                 }
  137.             }
  138.         }
  139.         save(f,koren->right,param_grad,param_zanr,min);
  140.     }
  141. }
Add Comment
Please, Sign In to add comment