Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define ERROR_MAGIC_NUM -666.999 //dodao sam ti definiciju koju si koristila, broj je zli pera odabrao samo sam uzeo sa sajta
- typedef struct gorivo_st {
- char grad [3];
- char gorivo[11];
- double cena;
- struct gorivo_st *next;
- }GORIVO;
- void inicijalizacija(GORIVO **head) {
- *head = NULL;
- }
- FILE *safe_fopen(char *naziv, char *mode, int kodgreske) {
- FILE *fp=fopen(naziv, mode);
- if(fp == NULL) {
- printf("greska u otvaranju fajla!");
- exit(kodgreske);
- }
- return fp;
- }
- GORIVO *napravi_cvor(char *grad, char *gorivo, double cena) {
- GORIVO *novi=(GORIVO *)malloc(sizeof(GORIVO)); //napravila si gresku u kucanju, pisalo je GORIVP
- if(novi==NULL) {
- printf("nema dovoljno memorije");
- exit(5);
- }
- strcpy(novi->grad, grad);
- strcpy(novi->gorivo, gorivo);
- novi->cena=cena;
- novi->next= NULL;
- return novi;
- }
- void dodaj_u_listu(GORIVO *novi, GORIVO **head) {
- if(*head == NULL) {
- *head = novi;
- return;
- }
- dodaj_u_listu(novi, &((*head)->next));
- }
- void ucitaj_podatke(FILE *ulaz, GORIVO **head) {
- char grad [3];
- char gorivo[11];
- double cena;
- while(fscanf(ulaz, "%s %s %lf", grad, gorivo, &cena) != EOF) {
- GORIVO *novi=napravi_cvor(grad, gorivo, cena);
- dodaj_u_listu(novi, head);
- }
- }
- void sacuvaj_podatke(FILE *izlaz, GORIVO *x) {
- 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
- }
- void sacuvaj_listu(FILE *izlaz, GORIVO *head) {
- if(head != NULL) {
- sacuvaj_podatke(izlaz, head);
- sacuvaj_listu(izlaz, head->next);
- }
- }
- void obrisi(GORIVO **head) {
- if(*head != NULL) {
- obrisi(&(*head)->next); //imala si jedu zagradu vise na kraju
- free(*head);
- *head= NULL;
- }
- }
- int count_gorivo(GORIVO *Head, char gorivo[]) {
- int count = 0 ;
- while(Head != NULL) {
- 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
- count ++;
- }
- Head = Head->next; //i ovde isto Head
- }
- return count;
- }
- double suma_goriva(GORIVO *head, char gorivo []) {
- double suma=0;
- while(head != NULL) {
- if(strcmp(head->gorivo, gorivo) ==0){
- suma +=head->cena;
- }
- head= head->next;
- }
- return suma;
- }
- double avg_gorivo(GORIVO *head, char gorivo []) {
- int count = count_gorivo(head, gorivo);
- if(count == 0) {
- return ERROR_MAGIC_NUM;
- } else {
- return suma_goriva(head, gorivo) / count;
- }
- }
- //./gorivo benzin cene.txt izvestaj.txt
- int main (int brArg, char **arg) {
- if(brArg !=4) {
- printf("kod nije dobro pozvan!");
- exit(1);
- }
- GORIVO* head; //zaboravila si da deklarises head pre inicijalizacije
- inicijalizacija(&head);
- FILE *ulaz=safe_fopen(arg[2], "r", 2);
- FILE *izlaz=safe_fopen(arg [3], "w", 3);
- ucitaj_podatke(ulaz, &head);
- //GORIVO *head; -------- Ovo treba da se pomeri gore gde sam ja stavio, mora da bude pre inicijalizacije
- ucitaj_podatke(ulaz, &head);
- sacuvaj_listu(izlaz, head);
- 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
- if(avg == ERROR_MAGIC_NUM) {
- fprintf(izlaz, "\nNIJE PRONADJENO\n");
- } else {
- fprintf(izlaz,"\n AVG = %6.2lf\n", avg);
- }
- obrisi(&head);
- fclose(ulaz);
- fclose(izlaz);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment