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)
- #define MAX_PROIZVODJAC (12 + 1)
- typedef struct brownie_st{
- char naziv[MAX_NAZIV];
- unsigned int kolicina;
- double cena;
- char proizvodjac[MAX_PROIZVODJAC];
- struct brownie_st *right;
- struct brownie_st *left;
- }BROWNIE;
- void tree_init(BROWNIE**);
- void delete_tree(BROWNIE**);
- BROWNIE* make_brownie(char*,unsigned int,double,char*);
- void add_to_tree(BROWNIE**,BROWNIE*);
- FILE* safe_open(char*,char*);
- void load(FILE*,BROWNIE**);
- void save(FILE*,BROWNIE*,char*,double*,BROWNIE**);
- int main(int argc,char** argv){
- if(argc != 4){
- printf("nepravilan poziv programa.");
- return EXIT_FAILURE;
- }else{
- BROWNIE *koren,
- *max = NULL;
- FILE *file = safe_open(argv[1],"r");
- double ukupno = 0;
- tree_init(&koren);
- load(file,&koren);
- fclose(file);
- file = safe_open(argv[2],"w");
- save(file,koren,argv[3],&ukupno,&max);
- fprintf(file,"\nUkupna cena namirnica je %.3lf.",ukupno);
- if(max != NULL){
- fprintf(file,"\nNamirnica sa najvecom gramazom proizvodjaca %s je: %s",argv[3],max->naziv);
- }
- fclose(file);
- delete_tree(&koren);
- return EXIT_SUCCESS;
- }
- }
- void tree_init(BROWNIE** koren){
- *koren = NULL;
- return;
- }
- void delete_tree(BROWNIE** koren){
- if(*koren != NULL){
- delete_tree(&(*koren)->left);
- delete_tree(&(*koren)->right);
- free(*koren);
- }
- return;
- }
- BROWNIE* make_brownie(char* naziv,unsigned int kolicina,double cena,char* proizvodjac){
- BROWNIE* new = (BROWNIE*)malloc(sizeof(BROWNIE));
- if(new == NULL){
- printf("nije moguce zauzeti memoriju.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->naziv,naziv);
- strcpy(new->proizvodjac,proizvodjac);
- new->kolicina = kolicina;
- new->cena = cena;
- new->left = NULL;
- new->right = NULL;
- return new;
- }
- //s1<s2=<=-1
- void add_to_tree(BROWNIE** koren,BROWNIE* new){
- if(*koren == NULL){
- *koren = new;
- }else{
- if(strcmp((*koren)->naziv,new->proizvodjac) > 0){
- 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 fajl %s.",name);
- exit(EXIT_FAILURE);
- }
- return f;
- }
- void load(FILE* f,BROWNIE** koren){
- char naziv[MAX_NAZIV],
- proizvodac[MAX_PROIZVODJAC];
- unsigned int kolicina;
- double cena;
- while(fscanf(f,"%s %u %lf %s",
- naziv,
- &kolicina,
- &cena,
- proizvodac) != EOF){
- add_to_tree(koren,make_brownie(naziv,kolicina,cena,proizvodac));
- }
- return;
- }
- void save(FILE* f,BROWNIE* koren,char* param,double* ukupno,BROWNIE** max){
- if(koren != NULL){
- save(f,koren->left,param,ukupno,max);
- fprintf(f,"%s %u %.3lf\n",koren->naziv,koren->kolicina,koren->cena*(koren->kolicina/100.));
- *ukupno += koren->cena*(koren->kolicina/100.);
- if(strcmp(koren->proizvodjac,param) == 0){
- if(*max == NULL){
- *max = koren;
- }else{
- if((*max)->kolicina < koren->kolicina){
- *max = koren;
- }
- }
- }
- save(f,koren->right,param,ukupno,max);
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment