Navigace: Hlavní stránka -> PASCAL -> 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.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a1,b1,a2,b2,a,b,c,j,nsd:integer;
    znamenko:char;

begin

  write('Zadejte 1.citatel: ');
  readln(a1);
  write('Zadejte 1.jmenovatel: ');
  readln(b1);
  write('Zadejte 2.citatel: ');
  readln(a2);
  write('Zadejte 2.jmenovatel: ');
  readln(b2);

  if (b1=0) or (b2=0) then writeln('Nelze vypocitat.')
  else
     a:=a1*b2+a2*b1;
     b:=b1*b2;
     if a=0 then writeln('Zlomek v zakladnim tvaru: 0')
     else
     begin
        if a*b<0 then znamenko:='-'
                 else znamenko:=' ';
        c:=abs(a);
        j:=abs(b);
        while c<>j do
           if c>j then c:=c-j
                  else j:=j-c;
        nsd:=c;
        c:=abs(a) div nsd;
        j:=abs(b) div nsd;

        if j=1 then writeln('Zlomek v zakladnim tvaru: ',znamenko,c)
               else writeln('Zlomek v zakladnim tvaru: ',znamenko,c,'/',j);
     end;

  readln;

end.
program ke stažení