Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define EXIT_NO_MEMORY 2
- #define EXIT_NO_IN_FILE 3
- #define EXIT_NO_OUT_FILE 4
- #define MAX_NAME (20 + 1)
- #define MAX_SURNAME (30 + 1)
- typedef struct musterija_st{
- char ime[MAX_NAME];
- char prezime[MAX_SURNAME];
- unsigned int br_artikala;
- double pazar;
- struct musterija_st *left;
- struct musterija_st *right;
- }MUSTERIJA;
- void tree_init(MUSTERIJA**);
- void destroy_tree(MUSTERIJA**);
- MUSTERIJA* make_musterija(char*,char*,unsigned int,double);
- void add_to_tree(MUSTERIJA**,MUSTERIJA*);
- FILE* safe_open(char*,char*,int);
- void load(FILE*,MUSTERIJA**);
- void save_fast(FILE*,MUSTERIJA*,double*,int);
- void fprint_(FILE*);
- void fprint_sum(FILE*,double);
- void save(FILE*,MUSTERIJA*,double*,int);
- int main(int argc, char** argv){
- if(argc != 4){
- printf("Nepravilan poziv programa.\n");
- return EXIT_FAILURE;
- }else{
- MUSTERIJA *koren;
- FILE *file = safe_open(argv[1],"r",EXIT_NO_IN_FILE);
- double sum = 0;
- tree_init(&koren);
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[2],"w",EXIT_NO_OUT_FILE);
- save_fast(file,koren,&sum,atoi(argv[3]));
- fprint_(file);
- fprint_sum(file,sum);
- fprintf(file,"\n\n");
- sum = 0;
- save(file,koren,&sum,atoi(argv[3]));
- fprint_(file);
- fprint_sum(file,sum);
- fclose(file);
- destroy_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(MUSTERIJA** koren){
- *koren = NULL;
- return;
- }
- void destroy_tree(MUSTERIJA** koren){
- if(*koren != NULL){
- destroy_tree(&(*koren)->left);
- destroy_tree(&(*koren)->right);
- free(*koren);
- *koren = NULL;
- }
- return;
- }
- MUSTERIJA* make_musterija(char* name,char* sname,unsigned int br_art,double pazar){
- MUSTERIJA* new = (MUSTERIJA*)malloc(sizeof(MUSTERIJA));
- if(new == NULL){
- printf("Nema dovoljno memorije.\n");
- exit(EXIT_NO_MEMORY);
- }
- strcpy(new->ime,name);
- strcpy(new->prezime,sname);
- new->br_artikala = br_art;
- new->pazar = pazar;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- void add_to_tree(MUSTERIJA** koren,MUSTERIJA* new){
- if(*koren == NULL){
- *koren = new;
- }else{
- if((*koren)->br_artikala > new->br_artikala){
- add_to_tree(&(*koren)->left,new);
- }else{
- add_to_tree(&(*koren)->right,new);
- }
- }
- return;
- }
- FILE* safe_open(char* name,char* mode,int err_code){
- FILE* f = fopen(name,mode);
- if(f == NULL){
- printf("Nije moguce ucitati fajl %s.\n",name);
- exit(err_code);
- }
- return f;
- }
- void load(FILE* file,MUSTERIJA** koren){
- char ime[MAX_NAME],
- prezime[MAX_SURNAME];
- unsigned int br_artikala;
- double pazar;
- while(fscanf(file,"%s %s %u %lf",
- ime,
- prezime,
- &br_artikala,
- &pazar) != EOF){
- add_to_tree(koren,make_musterija(ime,prezime,br_artikala,pazar));
- }
- return;
- }
- void save_fast(FILE* file,MUSTERIJA* koren,double* sum,int br_art){
- if(koren != NULL){
- save_fast(file,koren->left,sum,br_art);
- if(koren->br_artikala < br_art){
- fprintf(file,"%7.2lf %-9s %s\n",
- koren->pazar,
- koren->ime,
- koren->prezime);
- *sum += koren->pazar;
- }
- save_fast(file,koren->right,sum,br_art);
- }
- return;
- }
- void fprint_(FILE* file){
- int i = 0;
- for(;i < 30; i++){
- fprintf(file,"-");
- }
- fprintf(file,"\n");
- return;
- }
- void fprint_sum(FILE* file,double sum){
- fprintf(file,"%7.2lf",sum);
- return;
- }
- void save(FILE* file,MUSTERIJA* koren,double* sum,int br_art){
- if(koren != NULL){
- save(file,koren->left,sum,br_art);
- if(koren->br_artikala >= br_art){
- fprintf(file,"%7.2lf %-9s %s\n",
- koren->pazar,
- koren->ime,
- koren->prezime);
- *sum += koren->pazar;
- }
- save(file,koren->right,sum,br_art);
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement