Navigace: Hlavní stránka -> Jazyk C -> 04 Cykly -> 04.27 Součet zlomků a převod výsledku na základní tvar

MENU

04.27 Součet zlomků a převod výsledku na základní tvar

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í