Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_NAZIV (10 + 1)
- #define MAX_VRSTA (20 + 1)
- typedef struct restoran_st{
- char naziv[MAX_NAZIV];
- char vrsta[MAX_VRSTA];
- float ocena;
- struct restoran_st *left;
- struct restoran_st *right;
- }RESTORAN;
- void tree_init(RESTORAN**);
- void delete_tree(RESTORAN**);
- RESTORAN* make_resoran(char*,char*,float);
- void add_to_tree(RESTORAN**,RESTORAN*);
- FILE* safe_open(char*,char*);
- void load(FILE*,RESTORAN**);
- void save(FILE*,RESTORAN*,RESTORAN**);
- int main(int argc, char** argv){
- if(argc != 3){
- printf("Nepravilan poziv funkcije.\n");
- return EXIT_FAILURE;
- }else{
- RESTORAN* koren,
- * min = NULL;
- FILE* file = safe_open(argv[1],"r");
- tree_init(&koren);
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[2],"w");
- save(file,koren,&min);
- if(min != NULL){
- fprintf(file,"\nNajgore ocenjen restoran u gradu je:\n%3.1f %-10s %s",min->ocena,min->naziv,min->vrsta);
- }
- fclose(file);
- delete_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(RESTORAN** koren){
- *koren = NULL;
- return;
- }
- void delete_tree(RESTORAN** koren){
- if(*koren != NULL){
- delete_tree(&(*koren)->left);
- delete_tree(&(*koren)->right);
- free(*koren);
- }
- return;
- }
- RESTORAN* make_resoran(char* naziv,char* vrsta,float ocena){
- RESTORAN* new = (RESTORAN*)malloc(sizeof(RESTORAN));
- if(new == NULL){
- printf("Nije moguce zauzeti memoriju.\n");
- exit(EXIT_FAILURE);
- }
- strcpy(new->naziv,naziv);
- strcpy(new->vrsta,vrsta);
- new->ocena = ocena;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- void add_to_tree(RESTORAN** koren,RESTORAN* new){
- if(*koren == NULL){
- *koren = new;
- }else{
- if((*koren)->ocena < new->ocena){
- 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.\n",name);
- exit(EXIT_FAILURE);
- }
- return f;
- }
- void load(FILE* f,RESTORAN** koren){
- char naziv[MAX_NAZIV],
- vrsta[MAX_VRSTA];
- float ocena;
- while(fscanf(f,"%s %s %f",
- naziv,
- vrsta,
- &ocena) != EOF){
- add_to_tree(koren,make_resoran(naziv,vrsta,ocena));
- }
- return;
- }
- void save(FILE* f,RESTORAN* koren,RESTORAN** min){
- if(koren != NULL){
- save(f,koren->left,min);
- fprintf(f,"%3.1f %-10s %s\n",koren->ocena,koren->naziv,koren->vrsta);
- if(*min == NULL){
- *min = koren;
- }else{
- if(koren->ocena < (*min)->ocena){
- *min = koren;
- }
- }
- save(f,koren->right,min);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment