Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_DRZAVA (3 + 1)
- #define MAX_GRAD (2 + 1)
- #define MAX_PIZZA (20 + 1)
- typedef struct pizza_st{
- unsigned int cena;
- char drzava[MAX_DRZAVA];
- char grad[MAX_GRAD];
- char pizza[MAX_PIZZA];
- struct pizza_st *sl;
- }PIZZA;
- void list_init(PIZZA**);
- void delete_list(PIZZA**);
- PIZZA* make_pizza(unsigned int,char*,char*,char*);
- void add_to_list(PIZZA**,PIZZA*);
- FILE* safe_open(char*,char*);
- void load(FILE*,PIZZA**);
- void save(FILE*,PIZZA*,char*,char*);
- int main(int argc,char** argv){
- if(argc != 5){
- printf("Nepravilan poziv programa.");
- return EXIT_FAILURE;
- }else{
- PIZZA* glava;
- FILE * file = safe_open(argv[3],"r");
- list_init(&glava);
- load(file,&glava);
- fclose(file);
- file = safe_open(argv[4],"w");
- save(file,glava,argv[1],argv[2]);
- fclose(file);
- delete_list(&glava);
- return EXIT_SUCCESS;
- }
- }
- void list_init(PIZZA** glava){
- *glava = NULL;
- return;
- }
- void delete_list(PIZZA** glava){
- PIZZA* t;
- while(*glava != NULL){
- t = *glava;
- *glava = (*glava)->sl;
- free(t);
- }
- return;
- }
- PIZZA* make_pizza(unsigned int cena,char* drzava,char* grad,char* pizza){
- PIZZA* new = (PIZZA*)malloc(sizeof(PIZZA));
- if(new == NULL){
- printf("Nije moguce zauzeti memorij.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->drzava,drzava);
- strcpy(new->grad,grad);
- strcpy(new->pizza,pizza);
- new->cena = cena;
- new->sl = NULL;
- return new;
- }
- void add_to_list(PIZZA** glava,PIZZA* new){
- if(*glava == NULL){
- *glava = new;
- }else{
- PIZZA* t = *glava;
- while(t->sl != NULL){
- t = t->sl;
- }
- t->sl = 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,PIZZA** glava){
- unsigned int cena;
- char drzava[MAX_DRZAVA],
- grad[MAX_GRAD],
- pizza[MAX_PIZZA];
- while(fscanf(f,"%u %s %s %s",
- &cena,
- drzava,
- grad,
- pizza) != EOF){
- add_to_list(glava,make_pizza(cena,drzava,grad,pizza));
- }
- return;
- }
- void save(FILE* f,PIZZA* glava,char* param_drzava,char* param_pizza){
- PIZZA* t = glava;
- unsigned int count = 0,
- sum = 0;
- while(t != NULL){
- fprintf(f,"%4u %s %s %s\n",
- t->cena,
- t->drzava,
- t->grad,
- t->pizza);
- if( (strcmp(t->drzava,param_drzava) == 0) && (strcmp(t->pizza,param_pizza) == 0) ){
- sum += t->cena;
- count++;
- }
- t = t->sl;
- }
- if(count != 0){
- fprintf(f,"\navg = %.2f",(float)sum/count);
- }else{
- fprintf(f,"\nNOT FOUND!");
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment