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;
}
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;
}