Zadání:
Sestavte program, který sečte dva zlomky a výsledek převede na základní tvar.
Řešení:
Program využívá program 04.25 - hledání největšího společného dělitele. Na začátku programu vypočteme
jmenovatele a čitatele výsledného zlomku. Poté otestujeme, zda jmenovatel není nulový. Pokud ano, vytiskneme
chybové hlášení. Poté otestujeme čitatel na nulovou hodnotu. Pokud ji obsahuje, vytiskneme hlášení o nulovém
zlomku. Pokud ani jedna zadaná hodnota není nulová, zjistíme znaménko výsledného zlomku, absolutní hodnotou
odstraníme znaménka čitatele i jmenovatele a dalčí část programu zjistí největší společný dělitel jmenovatele
a čitatele. Poté čitatel a jmenovatele vydělíme největším společným dělitelem a výsledek vytiskneme včetně znaménka.
#include "stdafx.h"
#include "math.h"
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a1,b1,a2,b2,a,b,c,j,nsd;
char znamenko;
printf("Zadejte 1.citatel: ");
scanf_s("%d",&a1,1);
printf("Zadejte 1.jmenovatel: ");
scanf_s("%d",&b1,1);
printf("Zadejte 2.citatel: ");
scanf_s("%d",&a2,1);
printf("Zadejte 2.jmenovatel: ");
scanf_s("%d",&b2,1);
if (b1==0 || b2==0) printf("Nelze vypocitat.\n");
else
{
a=a1*b2+a2*b1;
b=b1*b2;
if (a==0) printf("Zlomek v zakladnim tvaru: 0\n");
else
{
if (a*b<0) znamenko='-';
else znamenko=' ';
c=abs(a);
j=abs(b);
while (c!=j)
{
if (c>j) c=c-j; else j=j-c;
}
nsd=c;
c=abs(a)/nsd;
j=abs(b)/nsd;
if (j==1) printf("Zlomek v zakladnim tvaru: %c%d\n",znamenko,c);
else printf("Zlomek v zakladnim tvaru: %c%d/%d\n",znamenko,c,j);
}
}
system("pause");
return 0;
}
program ke stažení