MartinSRB

Зимске чаролије

Dec 12th, 2021 (edited)
1,117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_SIZE (30 + 1)
  6.  
  7. typedef struct slatkis_st{
  8.     char naziv[MAX_SIZE];
  9.     double kolicina;
  10.     unsigned int gramaza;
  11.     char vrsta[MAX_SIZE];
  12.     struct slatkis_st *sl;
  13. }SLATKISH;
  14.  
  15. void list_init(SLATKISH**);
  16. void delete_list(SLATKISH**);
  17. SLATKISH* make_slatkish(char*,double,unsigned int,char*);
  18. void add_to_list(SLATKISH**,SLATKISH*);
  19.  
  20. FILE* safe_open(char*,char*);
  21. void load(FILE*,SLATKISH**);
  22. void save(FILE*,SLATKISH*,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.         SLATKISH *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(SLATKISH** glava){
  43.     *glava = NULL;
  44.     return;
  45. }
  46.  
  47. void delete_list(SLATKISH** glava){
  48.     SLATKISH *t;
  49.     while(*glava != NULL){
  50.         t = *glava;
  51.         *glava = (*glava)->sl;
  52.         free(t);
  53.     }
  54.     return;
  55. }
  56.  
  57. SLATKISH* make_slatkish(char* naziv,double kolicina,unsigned int gramaza,char* vrsta){
  58.     SLATKISH *new = (SLATKISH*)malloc(sizeof(SLATKISH));
  59.     if(new == NULL){
  60.         printf("Nije moguce zauzeti memoriju.");
  61.         exit(EXIT_FAILURE);
  62.     }
  63.     strcpy(new->naziv,naziv);
  64.     strcpy(new->vrsta,vrsta);
  65.     new->kolicina = kolicina;
  66.     new->gramaza = gramaza;
  67.     new->sl = NULL;
  68.     return new;
  69. }
  70.  
  71. void add_to_list(SLATKISH** glava,SLATKISH* new){
  72.     if(*glava == NULL){
  73.         *glava = new;
  74.     }else{
  75.         SLATKISH* t = *glava;
  76.         while(t->sl != NULL){
  77.             t = t->sl;
  78.         }
  79.         t->sl = new;
  80.     }
  81.     return;
  82. }
  83.  
  84. FILE* safe_open(char* name,char* mode){
  85.     FILE* f = fopen(name,mode);
  86.     if(f == NULL){
  87.         printf("Nije moguce otvoriti fajl %s.",name);
  88.         exit(EXIT_FAILURE);
  89.     }
  90.     return f;
  91. }
  92.  
  93. void load(FILE* f,SLATKISH** glava){
  94.     char naziv[MAX_SIZE],
  95.          vrsta[MAX_SIZE];
  96.     double kolicina;
  97.     unsigned int gramaza;
  98.     while(fscanf(f,"%s %lf %u %s",
  99.                                   naziv,
  100.                                   &kolicina,
  101.                                   &gramaza,
  102.                                   vrsta) != EOF){
  103.         add_to_list(glava,make_slatkish(naziv,kolicina,gramaza,vrsta));
  104.     }
  105.     return;
  106. }
  107.  
  108. void save(FILE* f,SLATKISH* glava,char* param){
  109.     SLATKISH*   t = glava,
  110.             *   max = NULL;
  111.     while(t != NULL){
  112.         if(strcmp(t->vrsta,param) == 0){
  113.             double tmp = t->kolicina*(t->gramaza/100.);
  114.             fprintf(f,"%s %u %.2lf\n",t->naziv,t->gramaza,t->kolicina);
  115.             if(max == NULL){
  116.                 max = t;
  117.             }else{
  118.                 if( (max->kolicina*(max->gramaza/100.)) < tmp){
  119.                     max = t;
  120.                 }
  121.             }
  122.         }
  123.         t = t->sl;
  124.     }
  125.     if(max == NULL){
  126.         fprintf(f,"\nNe postoji max el.");
  127.     }else{
  128.         fprintf(f,"\nSlatkis sa najvise secera je: %s\nKolicina secera je: %.2lf",max->naziv,max->kolicina*(max->gramaza/100.));
  129.     }
  130.     return;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment