MartinSRB

Цене пице у свету

Dec 14th, 2021 (edited)
1,094
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_DRZAVA (3 + 1)
  6. #define MAX_GRAD (2 + 1)
  7. #define MAX_PIZZA (20 + 1)
  8.  
  9. typedef struct pizza_st{
  10.     unsigned int cena;
  11.     char drzava[MAX_DRZAVA];
  12.     char grad[MAX_GRAD];
  13.     char pizza[MAX_PIZZA];
  14.     struct pizza_st *sl;
  15. }PIZZA;
  16.  
  17. void list_init(PIZZA**);
  18. void delete_list(PIZZA**);
  19. PIZZA* make_pizza(unsigned int,char*,char*,char*);
  20. void add_to_list(PIZZA**,PIZZA*);
  21.  
  22. FILE* safe_open(char*,char*);
  23. void load(FILE*,PIZZA**);
  24. void save(FILE*,PIZZA*,char*,char*);
  25.  
  26. int main(int argc,char** argv){
  27.     if(argc != 5){
  28.         printf("Nepravilan poziv programa.");
  29.         return EXIT_FAILURE;
  30.     }else{
  31.         PIZZA* glava;
  32.         FILE * file = safe_open(argv[3],"r");
  33.         list_init(&glava);
  34.         load(file,&glava);
  35.         fclose(file);
  36.         file = safe_open(argv[4],"w");
  37.         save(file,glava,argv[1],argv[2]);
  38.         fclose(file);
  39.         delete_list(&glava);
  40.         return EXIT_SUCCESS;        
  41.     }
  42. }
  43.  
  44. void list_init(PIZZA** glava){
  45.     *glava = NULL;
  46.     return;
  47. }
  48.  
  49. void delete_list(PIZZA** glava){
  50.     PIZZA* t;
  51.     while(*glava != NULL){
  52.         t = *glava;
  53.         *glava = (*glava)->sl;
  54.         free(t);
  55.     }
  56.     return;
  57. }
  58.  
  59. PIZZA* make_pizza(unsigned int cena,char* drzava,char* grad,char* pizza){
  60.     PIZZA* new = (PIZZA*)malloc(sizeof(PIZZA));
  61.     if(new == NULL){
  62.         printf("Nije moguce zauzeti memorij.");
  63.         exit(EXIT_FAILURE);
  64.     }
  65.     strcpy(new->drzava,drzava);
  66.     strcpy(new->grad,grad);
  67.     strcpy(new->pizza,pizza);
  68.     new->cena = cena;
  69.     new->sl = NULL;
  70.     return new;
  71. }
  72.  
  73. void add_to_list(PIZZA** glava,PIZZA* new){
  74.     if(*glava == NULL){
  75.         *glava = new;
  76.     }else{
  77.         PIZZA* t = *glava;
  78.         while(t->sl != NULL){
  79.             t = t->sl;
  80.         }
  81.         t->sl = new;
  82.     }
  83.     return;
  84. }
  85.  
  86. FILE* safe_open(char* name,char* mode){
  87.     FILE* f = fopen(name,mode);
  88.     if(f == NULL){
  89.         printf("Nije moguce otvoriti fajl %s.\n",name);
  90.         exit(EXIT_FAILURE);
  91.     }
  92.     return f;
  93. }
  94.  
  95. void load(FILE* f,PIZZA** glava){
  96.     unsigned int cena;
  97.     char drzava[MAX_DRZAVA],
  98.          grad[MAX_GRAD],
  99.          pizza[MAX_PIZZA];
  100.     while(fscanf(f,"%u %s %s %s",
  101.                                 &cena,
  102.                                 drzava,
  103.                                 grad,
  104.                                 pizza) != EOF){
  105.         add_to_list(glava,make_pizza(cena,drzava,grad,pizza));
  106.     }
  107.     return;
  108. }
  109.  
  110. void save(FILE* f,PIZZA* glava,char* param_drzava,char* param_pizza){
  111.     PIZZA*       t     = glava;
  112.     unsigned int count = 0,
  113.                  sum   = 0;
  114.     while(t != NULL){
  115.         fprintf(f,"%4u %s %s %s\n",
  116.                                   t->cena,
  117.                                   t->drzava,
  118.                                   t->grad,
  119.                                   t->pizza);
  120.         if( (strcmp(t->drzava,param_drzava) == 0) && (strcmp(t->pizza,param_pizza) == 0) ){
  121.             sum += t->cena;
  122.             count++;
  123.         }
  124.         t = t->sl;
  125.     }
  126.     if(count != 0){
  127.         fprintf(f,"\navg = %.2f",(float)sum/count);
  128.     }else{
  129.         fprintf(f,"\nNOT FOUND!");
  130.     }
  131.     return;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment