Navigace: Hlavní stránka -> PASCAL -> 10 Znaky, texty ->10.11 Rozdíl dvou velkých celých čísel

MENU

10.11 Rozdíl dvou velkých celých čísel

Zadání:
Sestavte program, který odečte dvě celá velká čísla.
Řešení:
Program po zadání dvou celých čísel otestuje pomocí příkazu IF, které z obou čísel je kratší a pomocí cyklu FOR
ho doplní zleva nulami na délku druhého čísla.
V dalším kroku program porovná obě čísla. Pokud je první číslo menší než druhé, obě čísla prohodí a zapamatuje
si znaménko"mínus". Poté program pomocí cyklu FOR prochází obě čísla zprava, převede každý znak na číslo,
odečte tato čísla, odečte od nich přenos, výsledek převede na znak a přidá ho zleva k výsledku. Poté vypočte
přenos do vyššího řádu.
Na konci programu se výsledek vytiskne.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var c1,c2,v,pom:string;
    i:integer;
    z1,z2,prenos,s:integer;
    znamenko:char;

begin

  write('Zadejte prvni cislo: ');
  readln(c1);
  write('Zadejte druhe cislo: ');
  readln(c2);

  if length(c1)>length(c2) then
     for i:=1 to length(c1)-length(c2) do
        c2:='0'+c2
  else
     for i:=1 to length(c2)-length(c1) do
        c1:='0'+c1;

  znamenko:=#0;
  if c1<c2 then
  begin
     pom:=c1;
     c1:=c2;
     c2:=pom;
     znamenko:='-';
  end;

  prenos:=0;
  v:='';
  for i:=length(c1) downto 1 do
  begin
     z1:=ord(c1[i])-ord('0');
     z2:=ord(c2[i])-ord('0');
     s:=z1-z2-prenos;
     if s<0 then
     begin
        s:=s+10;
        prenos:=1;
     end
     else prenos:=0;
     v:=chr((s)+ord('0'))+v;
  end;

  if v[1]='0' then delete(v,1,1);
  v:=znamenko+v;

  writeln(c1);
  writeln(c2);
  writeln('Vysledek:',v);

  readln;

end.
program ke stažení