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í