#include <stdio.h>
#include <stdlib.h>

// definícia štruktúry zlomok - nemeňte
typedef struct {
    int citatel, menovatel;
} zlomok;

// TODO: na vhodne miesta v programe doprogramujte funkcie gcd, vypis a scitaj


/* Funkcia dostane zlomok a upraví ho na základný tvar tak, že čitateľ
 * a menovateľ predelí ich najväčším spoločným delitelom a zabezpečí,
 * aby menovateľ bol kladné číslo. Hodnota zlomku zostane po úprave rovnaká. */
zlomok uprav(zlomok z) {
    // Túto časť funkcie nemeňte, delenie čitateľa a menovateľa najväčším spoločným deliteľom
    int d = gcd(abs(z.citatel), abs(z.menovatel));
    z.citatel /= d;
    z.menovatel /= d;

    // TODO: Doprogramujte zvyšok funkcie - úpravu znamienok,
    // aby menovateľ zlomku z bol kladný

    
    // Vrátime upravený zlomok
    return z;
}



int main() {
    // Funkciu main nemente

    // nacitanie zlomkov z1 a z2
    zlomok z1, z2;
    scanf("%d %d", &z1.citatel, &z1.menovatel);
    scanf("%d %d", &z2.citatel, &z2.menovatel);

    // vypis zlomkov v povodnom tvare
    printf("Povodny vstup\n");
    printf("Zlomok 1: ");
    vypis(z1);
    printf("\n");
    printf("Zlomok 2: ");
    vypis(z2);
    printf("\n\n");

    // uprava zlomkov na zakladny tvar
    z1 = uprav(z1);
    z2 = uprav(z2);

    // vypis zlomkov po uprave
    printf("Po uprave\n");
    printf("Zlomok 1: ");
    vypis(z1);
    printf("\n");
    printf("Zlomok 2: ");
    vypis(z2);
    printf("\n\n");

    // scitanie zlomkov a vypis vysledku
    printf("Sucet: ");
    zlomok z = scitaj(z1, z2);
    vypis(z);
    printf("\n");
}
