JustPaste.it

// domaci zadatak
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//struktura
typedef struct transakcija {
    char* prviRacun;
    char* drugiRacun;
    float iznos;
} Transakcija;

typedef struct elem {
    Transakcija t;
    struct elem* sledeci;
} Elem;

typedef struct racuni {
    char* racun;
    float balans;
    struct racuni* sledeci;
} Racuni;


// prva lista -> pocetni racuni sa pocetnim balansom
// 1. racun - balans
// 2. racun - balans
// 3. racun - balans

 


// druga -> krajnji balans i sortirani
// ponistena


// funkcija koja ce da kreira jednostruko ulancanu listu
Elem* kreira_listu(FILE* dat) {
    Elem* glava = NULL, * rep = glava, * tmp;
    Transakcija t;
    // proverava da li postoji datoteka
    if (!dat) {
        printf("DAT_GRESKA");
        exit(0);
    }
    char c, * linija = calloc(1,sizeof(char));

    //1 char


    int trenBrojElemLinije = 0;

 

    // dohvata karakter po karakter u redu dok ne dodje do kraja file

    while ((c = fgetc(dat)) != EOF) {

        trenBrojElemLinije++;
        //1
        linija = realloc(linija, (trenBrojElemLinije+1) * sizeof(char));
        // 1 char

        linija[trenBrojElemLinije - 1] = c;
        linija[trenBrojElemLinije] = '\0';

        if (c == '\n') {
            linija[trenBrojElemLinije-1] = '\0';
            trenBrojElemLinije = 0;
            //OBRADA LINIJE I PRONALAZENJE PRVOG I DRUGOG ZIRORACUNA
            char* strelica = strstr(linija, "->");
            char* dveTacke = strstr(linija, ":");
            if (strelica != NULL && dveTacke != NULL && strelica < dveTacke) {
                *strelica = '\0';
                *dveTacke = '\0';
                // IZDVAJANJE PRVOG STRINGA
                int DuzPrvogRac = strelica - linija;
                char* prviZiro = calloc((DuzPrvogRac + 1) , sizeof(char));
                strncpy(prviZiro, linija, DuzPrvogRac);
                prviZiro[DuzPrvogRac] = '\0';
                t.prviRacun = prviZiro;
                // IZDVAJANJE DRUGOG STRINGA
                int DuzDrugogRac = dveTacke - (strelica + 4);
                char* drugiZiro = calloc((DuzDrugogRac + 1) , sizeof(char));
                strncpy(drugiZiro, strelica + 4, DuzDrugogRac);
                drugiZiro[DuzDrugogRac] = '\0';
                t.drugiRacun = drugiZiro;
                // ZAPISIVANJE PRENESENOG NOVCA
                t.iznos = atof(dveTacke + 2);


                linija = realloc(linija, 0);
            }
            tmp = malloc(sizeof(*tmp));
            if (!tmp) exit(1);
            tmp->t = t;
            tmp->sledeci = NULL;
            if (!glava) glava = tmp;
            else rep->sledeci = tmp;
            rep = tmp;
        }


    }
    


    return glava;
}
//funkcija koja ce da vrsi obradu ulancane liste

 


// funkcija koja ce da vrsi ispisivanje u novu datoteku zadatu sa argv[2]
void ispisi_i_oslobodi(Elem* glava, FILE* dat) {
    Elem* stari;

    while (glava) {
        fprintf(dat, "%s %s %.2f\n", glava->t.prviRacun, glava->t.drugiRacun, glava->t.iznos);
        stari = glava;
        glava = glava->sledeci;
        free(stari);
    }

}


int main(int argc, const char* argv[]) {
    if (argc != 4) return 0;
    double PstanjeRacuna;
    PstanjeRacuna = atof(argv[3]);
    FILE* ulazna = fopen(argv[1], "r");
    Elem* glava = kreira_listu(ulazna);

    fclose(ulazna);
    FILE* izlazna = fopen(argv[2], "w");
    ispisi_i_oslobodi(glava, izlazna);
    fclose(izlazna);

    return 0;
}