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 (20 + 1)
- typedef struct vatromet_st{
- char naziv[MAX_NAZIV];
- unsigned int glasnoca;
- unsigned int cena;
- struct vatromet_st *left;
- struct vatromet_st *right;
- }VATROMET;
- void tree_init(VATROMET**);
- void delete_tree(VATROMET**);
- VATROMET* make_vatromet(char*,unsigned int,unsigned int);
- void add_to_tree(VATROMET**,VATROMET*);
- FILE* safe_open(char*,char*);
- void load(FILE*,VATROMET**);
- void save(FILE*,VATROMET*,unsigned int,VATROMET**);
- int main(int argc,char** argv){
- if(argc != 4){
- printf("Nepravilan poziv programa.");
- return EXIT_FAILURE;
- }else{
- VATROMET* koren,
- * odnos = NULL;
- FILE * file = safe_open(argv[2],"r");
- tree_init(&koren);
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[3],"w");
- save(file,koren,atoi(argv[1]),&odnos);
- fprintf(file,"\nNajbolji vatromet sa odnosom glasnoce prema ceni od %.2f je:\n%u %s %u",(float)odnos->glasnoca/odnos->cena,odnos->cena,odnos->naziv,odnos->glasnoca);
- fclose(file);
- delete_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(VATROMET** koren){
- *koren = NULL;
- }
- void delete_tree(VATROMET** koren){
- if(*koren != NULL){
- delete_tree(&(*koren)->left);
- delete_tree(&(*koren)->right);
- free(*koren);
- }
- }
- VATROMET* make_vatromet(char* naziv,unsigned int glasnoca,unsigned int cena){
- VATROMET* new = (VATROMET*)malloc(sizeof(VATROMET));
- if(new == NULL){
- printf("Nije moguce zauzeti memoriju.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->naziv,naziv);
- new->glasnoca = glasnoca;
- new->cena = cena;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- void add_to_tree(VATROMET** koren,VATROMET* 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 datoteku %s.",name);
- exit(EXIT_FAILURE);
- }
- return f;
- }
- void load(FILE* f,VATROMET** koren){
- char naziv[MAX_NAZIV];
- unsigned int glasnoca,
- cena;
- while(fscanf(f,"%s %u %u",
- naziv,
- &glasnoca,
- &cena) != EOF){
- add_to_tree(koren,make_vatromet(naziv,glasnoca,cena));
- }
- return;
- }
- void save(FILE* f,VATROMET* koren,unsigned int max_glasnoca,VATROMET** odnos){
- if(koren != NULL){
- save(f,koren->left,max_glasnoca,odnos);
- if(koren->glasnoca <= max_glasnoca){
- fprintf(f,"%u %s %u\n",koren->cena,koren->naziv,koren->glasnoca);
- if(*odnos == NULL){
- *odnos = koren;
- }else{
- if( ((*odnos)->glasnoca/(*odnos)->cena) < (koren->glasnoca/koren->cena) ){
- *odnos = koren;
- }
- }
- }
- save(f,koren->right,max_glasnoca,odnos);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment