IB001 Úvod do programování - Seminární skupina 25 a 26

Zlomky - zdrojový kód

#include <stdio.h>

typedef struct
{
    int citatel;
    int jmenovatel;
} zlomek;

int spolecny_delitel(int a, int b)
{
    int delitel;
    if (a<b)
    {
        delitel=a;
    }
    else
    {
        delitel=b;
    }
    while (!((a%delitel==0) && (b%delitel==0)))
    {
        delitel--;
    }
    return delitel;
}

zlomek secti(zlomek a, zlomek b)
{
    if (a.citatel == 0)
    {
        return b;
    }
    if (b.citatel == 0)
    {
        return a;
    }
    zlomek vysledek;
    vysledek.citatel = b.jmenovatel*a.citatel + a.jmenovatel*b.citatel;
    vysledek.jmenovatel = b.jmenovatel*a.jmenovatel;

    return vysledek;
}

zlomek soucet(const char *vstup)
{
    FILE *vstupni_soubor = fopen(vstup,"r");
    zlomek vysledek = {0,0};
    zlomek hodnota = {0,0};

    if(vstupni_soubor == NULL)
    {
        printf("Vstupni soubor se nepodarilo otevrit!");
        return vysledek;
    }

    int chyba_scanf;
    while(!feof(vstupni_soubor))
    {
        chyba_scanf = fscanf(vstupni_soubor,"%d %*c %d", &hodnota.citatel, &hodnota.jmenovatel);
        if(chyba_scanf == 2)
        {
            vysledek = secti(vysledek,hodnota);
        }
        else
        {
            printf("Nepodarilo se nacist zlomek!");
        }
    }

    // normalizace
    int delitel = spolecny_delitel(abs(vysledek.citatel), abs(vysledek.jmenovatel));
    vysledek.citatel /= delitel;
    vysledek.jmenovatel /= delitel;

    fclose(vstupni_soubor);
    return vysledek;
}

int main (void)
{
    zomek vysledek = soucet("vstup.txt");
    printf("Soucet: %d/%d",vysledek.citatel, vysledek.jmenovatel);
    return 0;
}