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 (13 + 1)
- #define MAX_VRSTA (10 + 1)
- typedef struct namirnica_st{
- char naziv[MAX_NAZIV];
- unsigned int kolicina;
- char vrsta[MAX_VRSTA];
- struct namirnica_st *left;
- struct namirnica_st *right;
- }NAMIRNICA;
- void tree_init(NAMIRNICA**);
- void delete_tree(NAMIRNICA**);
- NAMIRNICA* make_namirnica(char*,unsigned int,char*);
- void add_to_tree(NAMIRNICA**,NAMIRNICA*);
- FILE* safe_open(char*,char*);
- void load(FILE*,NAMIRNICA**);
- void save(FILE*,NAMIRNICA*);
- void save_max(FILE*,NAMIRNICA*);
- int main(int argc,char** argv){
- if(argc != 3){
- printf("Nepravilan poziv programa.\n");
- return EXIT_FAILURE;
- }else{
- NAMIRNICA* koren;
- FILE* file = safe_open(argv[1],"r");
- tree_init(&koren);
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[2],"w");
- save(file,koren);
- save_max(file,koren);
- fclose(file);
- delete_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(NAMIRNICA** koren){
- *koren = NULL;
- }
- void delete_tree(NAMIRNICA** koren){
- if(*koren != NULL){
- delete_tree(&(*koren)->left);
- delete_tree(&(*koren)->right);
- free(*koren);
- }
- }
- NAMIRNICA* make_namirnica(char* naziv,unsigned int kolicina,char* vrsta){
- NAMIRNICA* new = (NAMIRNICA*)malloc(sizeof(NAMIRNICA));
- if(new == NULL){
- printf("Nije moguce zauzeti memoriju.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->naziv,naziv);
- strcpy(new->vrsta,vrsta);
- new->kolicina = kolicina;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- void add_to_tree(NAMIRNICA** koren,NAMIRNICA* new){
- if(*koren == NULL){
- *koren = new;
- }else{
- if((*koren)->kolicina > new->kolicina){
- add_to_tree(&(*koren)->right,new);
- }else{
- add_to_tree(&(*koren)->left,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,NAMIRNICA** koren){
- char naziv[MAX_NAZIV],
- vrsta[MAX_VRSTA];
- unsigned int kolicina;
- while(fscanf(f,"%s %u %s",
- naziv,
- &kolicina,
- vrsta) != EOF){
- add_to_tree(koren,make_namirnica(naziv,kolicina,vrsta));
- }
- return;
- }
- void save(FILE* f,NAMIRNICA* koren){
- if(koren != NULL){
- save(f,koren->left);
- fprintf(f,"%3u %-13s %s\n",
- koren->kolicina,
- koren->naziv,
- koren->vrsta);
- save(f,koren->right);
- }
- }
- void save_max(FILE* f,NAMIRNICA* koren){
- if(koren->left != NULL){
- save_max(f,koren->left);
- return;
- }
- fprintf(f,"\n%s %u",koren->naziv,koren->kolicina);
- }
Advertisement
Add Comment
Please, Sign In to add comment