Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_GRAD (2 + 1)
- #define MAX_BIOSKOP (10 + 1)
- #define MAX_FILM (8 + 1)
- #define MAX_ZANR (9 + 1)
- typedef struct projekcija_st
- {
- char grad[MAX_GRAD];
- char bioskop[MAX_BIOSKOP];
- char film[MAX_FILM];
- char zanr[MAX_ZANR];
- float cena;
- struct projekcija_st *left;
- struct projekcija_st *right;
- }PROJEKCIJA;
- void tree_init(PROJEKCIJA**);
- void delete_tree(PROJEKCIJA**);
- PROJEKCIJA* make_projekcija(char*,char*,char*,char*,float);
- void add_to_tree(PROJEKCIJA**,PROJEKCIJA*);
- FILE* safe_open(char*,char*);
- void load(FILE*,PROJEKCIJA**);
- void save(FILE*,PROJEKCIJA*,char*,char*,PROJEKCIJA**);
- int main(int argc,char** argv){
- if(argc != 5){
- printf("nepravilan poziv programa.");
- exit(EXIT_FAILURE);
- }else{
- PROJEKCIJA* koren,
- * min = NULL;
- tree_init(&koren);
- FILE* file = safe_open(argv[3],"r");
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[4],"w");
- save(file,koren,argv[1],argv[2],&min);
- if(min != NULL){
- fprintf(file,"\nNajpovoljnija projekcija za %s filmove u %s je:\n%s %.2f",argv[2],argv[1],min->film,min->cena);
- }else{
- fprintf(file,"\nNiko ne projektuje %s filmove u %s!",argv[2],argv[1]);
- }
- fclose(file);
- delete_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(PROJEKCIJA** koren){
- *koren = NULL;
- return;
- }
- void delete_tree(PROJEKCIJA** koren){
- if(*koren != NULL){
- delete_tree(&(*koren)->left);
- delete_tree(&(*koren)->right);
- free(*koren);
- }
- }
- PROJEKCIJA* make_projekcija(char* grad,char* bioskop,char* film,char* zanr,float cena){
- PROJEKCIJA* new = (PROJEKCIJA*)malloc(sizeof(PROJEKCIJA));
- if(new == NULL){
- printf("Nije moguce zauzeti memoriju.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->grad,grad);
- strcpy(new->bioskop,bioskop);
- strcpy(new->film,film);
- strcpy(new->zanr,zanr);
- new->cena = cena;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- void add_to_tree(PROJEKCIJA** koren,PROJEKCIJA* new){
- if(*koren == NULL){
- *koren = new;
- }else{
- if((*koren)->cena > new->cena){
- add_to_tree(&(*koren)->left,new);
- }else{
- add_to_tree(&(*koren)->right,new);
- }
- }
- return;
- }
- FILE* safe_open(char* name,char* mode){
- FILE* f = fopen(name,mode);
- if(f == NULL){
- printf("NIje moguce otvoriti fajl %s.",name);
- exit(EXIT_FAILURE);
- }
- return f;
- }
- void load(FILE* f,PROJEKCIJA** koren){
- char grad[MAX_GRAD],
- bioskop[MAX_BIOSKOP],
- film[MAX_FILM],
- zanr[MAX_ZANR];
- float cena;
- while(fscanf(f,"%s %s %s %s %f",
- grad,
- bioskop,
- film,
- zanr,
- &cena) != EOF){
- add_to_tree(koren,make_projekcija(grad,bioskop,film,zanr,cena));
- }
- return;
- }
- void save(FILE* f,PROJEKCIJA* koren,char* param_grad,char* param_zanr,PROJEKCIJA** min){
- if(koren != NULL){
- save(f,koren->left,param_grad,param_zanr,min);
- fprintf(f,"%2s %-10s %-8s %-9s %6.2f\n",koren->grad,
- koren->bioskop,
- koren->film,
- koren->zanr,
- koren->cena);
- if( (strcmp(koren->grad,param_grad) == 0) && (strcmp(koren->zanr,param_zanr) == 0) ){
- if(*min == NULL){
- *min = koren;
- }else{
- if(koren->cena < (*min)->cena){
- *min = koren;
- }
- }
- }
- save(f,koren->right,param_grad,param_zanr,min);
- }
- }
Add Comment
Please, Sign In to add comment