MartinSRB

Најповољнија игра

Dec 13th, 2021 (edited)
1,080
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_NAZIV_IGRE (10 + 1)
  6. #define MAX_NAZIV_ZANRA (8 + 1)
  7. #define MAX_NAZIV_PLATFORME (8 + 1)
  8.  
  9. typedef struct igra_st{
  10.     char naziv[MAX_NAZIV_IGRE];
  11.     char zanr[MAX_NAZIV_ZANRA];
  12.     char platforma[MAX_NAZIV_PLATFORME];
  13.     float cena;
  14.     struct igra_st *sl;
  15. } IGRA;
  16.  
  17. void list_init(IGRA**);
  18. void delete_list(IGRA**);
  19. IGRA* make_game(char*,char*,char*,double);
  20. void add_to_list(IGRA**,IGRA*);
  21.  
  22. FILE* safe_open(char*,char*);
  23. void load(FILE*, IGRA**);
  24. void save(FILE*, IGRA*,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.         IGRA* 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(IGRA** glava){
  45.     *glava = NULL;
  46.     return;
  47. }
  48.  
  49. void delete_list(IGRA** glava){
  50.     IGRA* tek;
  51.     while(*glava != NULL){
  52.         tek = *glava;
  53.         *glava = (*glava)->sl;
  54.         tek->sl = NULL;
  55.         free(tek);
  56.     }
  57.     return;
  58. }
  59.  
  60. IGRA* make_game(char* tnaziv,char* tzanr,char* tplatforma,double tcena){
  61.     IGRA* new = (IGRA*)malloc(sizeof(IGRA));
  62.     if(new == NULL){
  63.         printf("Nema dosta memorije.\n");
  64.         exit(EXIT_FAILURE);
  65.     }
  66.     strcpy(new->naziv,tnaziv);
  67.     strcpy(new->zanr,tzanr);
  68.     strcpy(new->platforma,tplatforma);
  69.     new->cena = tcena;
  70.     new->sl = NULL;
  71.     return new;
  72. }
  73.  
  74.  
  75. void add_to_list(IGRA** glava,IGRA* new){
  76.     if(*glava == NULL){
  77.         *glava = new;
  78.     }else{
  79.         IGRA* tek = *glava;
  80.         while(tek->sl != NULL){
  81.             tek = tek->sl;
  82.         }
  83.         tek->sl = new;
  84.     }
  85.     return;
  86. }
  87.  
  88. FILE* safe_open(char* name,char* mode){
  89.     FILE* f = fopen(name,mode);
  90.     if(f == NULL){
  91.         printf("Nije pronadjen fajl %s.\n",name);
  92.         exit(EXIT_FAILURE);
  93.     }
  94.     return f;
  95. }
  96.  
  97. void load(FILE* f, IGRA** glava){
  98.     char t_igra[MAX_NAZIV_IGRE],
  99.          t_zanr[MAX_NAZIV_ZANRA],
  100.          t_platforma[MAX_NAZIV_PLATFORME];
  101.     float t_cena;
  102.     while(fscanf(f,"%s %s %s %f",
  103.                                 t_igra,
  104.                                 t_zanr,
  105.                                 t_platforma,
  106.                                 &t_cena) != EOF){
  107.         add_to_list(glava,make_game(t_igra,t_zanr,t_platforma,t_cena));
  108.     }
  109.     return;
  110. }
  111.  
  112. void save(FILE* f, IGRA* glava,char* param_platf,char* param_zanr){
  113.     IGRA* min = NULL,
  114.         * tek = glava;
  115.     while(tek != NULL){
  116.         fprintf(f,"%-10s %-8s %-8s %5.2f\n",
  117.                   tek->naziv,tek->zanr,tek->platforma,tek->cena);
  118.         if((strcmp(tek->platforma,param_platf) == 0) && (strcmp(tek->zanr,param_zanr) == 0)){
  119.             if(min == NULL){
  120.                 min = tek;
  121.             }else{
  122.                 if(tek->cena < min->cena){
  123.                     min = tek;
  124.                 }
  125.             }
  126.         }
  127.         tek = tek->sl;
  128.     }
  129.     if(min == NULL){
  130.         fprintf(f,"\nZa %s platformu ne postoje '%s' igre!",param_platf,param_zanr);
  131.     }else{
  132.         fprintf(f,"\nNajpovoljnija '%s' igra za %s platformu je:\n%s %.2f",min->zanr,min->platforma,min->naziv,min->cena);
  133.     }
  134.     return;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment