MartinSRB

Најповољније месо

Dec 13th, 2021 (edited)
1,106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 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_MESO (20 + 1)
  7.  
  8. typedef struct meso_st{
  9.     char grad[MAX_GRAD];
  10.     char meso[MAX_MESO];
  11.     double cena;
  12.     struct meso_st *sl;
  13. } MESO;
  14.  
  15. //LISTA
  16. void list_init(MESO**);
  17. MESO* napravi_cvor(char*,char*,double);
  18. void delete_list(MESO**);
  19. void dodaj_u_cvor(MESO**,MESO*);
  20.  
  21. //FAJLOVI
  22. FILE* safe_open(char*,char*);
  23. void ucitaj_podatke(MESO**,FILE*);
  24. void ispisi(MESO*, FILE*,char*);
  25.  
  26. int main(int argc, char** argv){
  27.     if(argc != 4){
  28.         printf("Nepravilan poziv programa, primer: %s junetina cene_mesa.txt analiza.txt\n", argv[0]);
  29.         return EXIT_FAILURE;
  30.     }else{
  31.         MESO* glava;
  32.         FILE* file = safe_open(argv[2],"r");
  33.         list_init(&glava);
  34.         ucitaj_podatke(&glava,file);
  35.         fclose(file);
  36.         file = safe_open(argv[3],"w");
  37.         ispisi(glava,file,argv[1]);
  38.         fclose(file);
  39.         delete_list(&glava);
  40.         return EXIT_SUCCESS;
  41.     }
  42. }
  43.  
  44. void list_init(MESO **glava){
  45.     *glava = NULL;
  46. }
  47.  
  48. MESO* napravi_cvor(char* tgrad,char* tmeso,double tcena){
  49.     MESO *tmp = (MESO*)malloc(sizeof(MESO));
  50.     if(tmp == NULL){
  51.         printf("nema dosta mesta u memoriji.\n");
  52.         exit(EXIT_FAILURE);
  53.     }else{
  54.         strcpy(tmp->grad,tgrad);
  55.         strcpy(tmp->meso,tmeso);
  56.         tmp->cena = tcena;
  57.         tmp->sl = NULL;
  58.         return tmp;
  59.     }
  60. }
  61.  
  62. void dodaj_u_cvor(MESO** glava,MESO* new){
  63.     if(*glava == NULL){
  64.         *glava = new;
  65.     }else{
  66.         MESO* tek = *glava;
  67.         while(tek->sl != NULL){
  68.             tek = tek->sl;
  69.         }
  70.         tek->sl = new;
  71.     }
  72.     return;
  73. }
  74.  
  75. void delete_list(MESO** glava){
  76.     MESO* tmp;
  77.     while(*glava != NULL){
  78.         tmp = *glava;
  79.         *glava = (*glava)->sl;
  80.         tmp->sl = NULL;
  81.         free(tmp);
  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 pronaci zadanu ulaznu datoteku: %s\n",name);
  90.         exit(EXIT_FAILURE);
  91.     }else{
  92.         return f;
  93.     }
  94. }
  95.  
  96. void ucitaj_podatke(MESO** glava,FILE *f){
  97.     char tmp_grad[MAX_GRAD],
  98.          tmp_meso[MAX_MESO];
  99.     double tmp_cena;
  100.     while(fscanf(f,"%s %s %lf",
  101.                                 tmp_grad,
  102.                                 tmp_meso,
  103.                                 &tmp_cena) != EOF){
  104.         dodaj_u_cvor(glava,napravi_cvor(tmp_grad,tmp_meso,tmp_cena));
  105.     }
  106.     return;
  107. }
  108.  
  109. void ispisi(MESO* glava, FILE* f,char* param){
  110.     MESO* min = NULL,
  111.         * tek = glava;
  112.     while(tek != NULL){
  113.         fprintf(f,"%6.2lf %s %s\n",tek->cena,tek->grad,tek->meso);
  114.         if(strcmp(tek->meso,param) == 0){
  115.             if(min == NULL){
  116.                 min = tek;
  117.             }else{
  118.                 if((tek->cena) < (min->cena)){
  119.                     min = tek;
  120.                 }
  121.             }
  122.         }
  123.         tek = tek->sl;
  124.     }
  125.     if(min == NULL){
  126.         fprintf(f,"\nNije pronadjeno meso %s.",param);
  127.     }else{
  128.         fprintf(f,"\nNajpovoljnije '%s' je:\n%6.2lf %s %s",param,min->cena,min->grad,min->meso);
  129.     }
  130.     return;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment