MartinSRB

Просечна цена горива

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