MartinSRB

Исправак - Гориво

Dec 15th, 2021 (edited)
994
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.59 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define ERROR_MAGIC_NUM -666.999 //dodao sam ti definiciju koju si koristila, broj je zli pera odabrao samo sam uzeo sa sajta
  6.  
  7. typedef struct gorivo_st {
  8.     char grad [3];
  9.     char gorivo[11];
  10.     double cena;
  11.     struct gorivo_st *next;
  12. }GORIVO;
  13.  
  14. void inicijalizacija(GORIVO **head) {
  15.     *head = NULL;
  16. }
  17.  
  18. FILE *safe_fopen(char *naziv, char *mode, int kodgreske) {
  19.     FILE *fp=fopen(naziv, mode);
  20.     if(fp == NULL) {
  21.     printf("greska u otvaranju fajla!");
  22.     exit(kodgreske);
  23.     }
  24.     return fp;
  25. }
  26.  
  27. GORIVO *napravi_cvor(char *grad, char *gorivo, double cena) {
  28.     GORIVO *novi=(GORIVO *)malloc(sizeof(GORIVO)); //napravila si gresku u kucanju, pisalo je GORIVP
  29.     if(novi==NULL) {
  30.     printf("nema dovoljno memorije");
  31.     exit(5);
  32.     }
  33.     strcpy(novi->grad, grad);
  34.     strcpy(novi->gorivo, gorivo);
  35.     novi->cena=cena;
  36.     novi->next= NULL;
  37.     return novi;
  38.  
  39. }
  40.  
  41. void dodaj_u_listu(GORIVO *novi, GORIVO **head) {
  42.     if(*head == NULL) {
  43.     *head = novi;
  44.     return;
  45.     }
  46.  
  47.     dodaj_u_listu(novi, &((*head)->next));
  48.  
  49. }
  50. void ucitaj_podatke(FILE *ulaz, GORIVO **head) {
  51.     char grad [3];
  52.     char gorivo[11];
  53.     double cena;
  54. while(fscanf(ulaz, "%s %s %lf", grad, gorivo, &cena) != EOF) {
  55.     GORIVO *novi=napravi_cvor(grad, gorivo, cena);
  56.     dodaj_u_listu(novi, head);
  57.     }
  58. }
  59.  
  60. void sacuvaj_podatke(FILE *izlaz, GORIVO *x) {
  61.     fprintf(izlaz, "%6.2lf %s %ls\n", x->cena, x->grad, x->gorivo); //dodao sam ti \n zbog preglednosti ispisa, i %6.2lf jer se tako trazi u zadatku
  62. }
  63.  
  64. void sacuvaj_listu(FILE *izlaz, GORIVO *head) {
  65.     if(head != NULL) {
  66.     sacuvaj_podatke(izlaz, head);
  67.     sacuvaj_listu(izlaz, head->next);
  68.     }
  69. }
  70.  
  71. void obrisi(GORIVO **head) {
  72.     if(*head != NULL) {
  73.     obrisi(&(*head)->next); //imala si jedu zagradu vise na kraju
  74.     free(*head);
  75.     *head= NULL;
  76.     }
  77. }
  78.  
  79. int count_gorivo(GORIVO *Head, char gorivo[]) {
  80.     int count = 0 ;
  81.     while(Head != NULL) {
  82.     if(strcmp(Head->gorivo, gorivo) == 0) { //head ti je u ovo funkciji definisano kao Head, sa velikim H pa onda moras tako da ga koristis
  83.     count ++;
  84.     }
  85.     Head = Head->next; //i ovde isto Head
  86. }
  87.     return count;
  88. }
  89.  
  90. double suma_goriva(GORIVO *head, char gorivo []) {
  91.     double suma=0;
  92.     while(head != NULL) {
  93.     if(strcmp(head->gorivo, gorivo) ==0){
  94.     suma +=head->cena;
  95.     }
  96.     head= head->next;
  97.     }
  98.     return suma;
  99. }
  100.  
  101. double avg_gorivo(GORIVO *head, char gorivo []) {
  102.     int count = count_gorivo(head, gorivo);
  103.     if(count == 0) {
  104.     return ERROR_MAGIC_NUM;
  105.     }  else {
  106.     return suma_goriva(head, gorivo) / count;
  107. }
  108. }
  109.  
  110. //./gorivo benzin cene.txt izvestaj.txt
  111. int main (int brArg, char **arg) {
  112.     if(brArg !=4) {
  113.     printf("kod nije dobro pozvan!");
  114.     exit(1);
  115.     }
  116.     GORIVO* head; //zaboravila si da deklarises head pre inicijalizacije
  117.     inicijalizacija(&head);
  118.     FILE *ulaz=safe_fopen(arg[2], "r", 2);
  119.     FILE *izlaz=safe_fopen(arg [3], "w", 3);
  120.     ucitaj_podatke(ulaz, &head);
  121.  
  122.     //GORIVO *head; -------- Ovo treba da se pomeri gore gde sam ja stavio, mora da bude pre inicijalizacije
  123.     ucitaj_podatke(ulaz, &head);
  124.     sacuvaj_listu(izlaz, head);
  125.  
  126.     double avg = avg_gorivo(head, arg[1]); //tebi je gorivo zapravo sacuvano u arg jer nisi pravila posebnu promenjivu da ga tamo sacuvas tako da sam to promenio
  127.     if(avg == ERROR_MAGIC_NUM) {
  128.     fprintf(izlaz, "\nNIJE PRONADJENO\n");
  129.     } else {
  130.     fprintf(izlaz,"\n AVG = %6.2lf\n", avg);
  131.     }
  132.  
  133.  
  134. obrisi(&head);
  135. fclose(ulaz);
  136. fclose(izlaz);
  137. return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment