Rozvažujeme-li reprezentaci dlouhých čísel, je dobré se zamyslet nad několika otázkami. V našem případě odpovíme takto:
Nyní tedy víme, že budeme číslo reprezentovat v poli o velikosti MAX, kde typ prvků pole bude cifra 0..9. Dále nás ale zajímá několik dalších věcí:
const MAX = 302;
type TCifry = array[0..MAX] of 0..9;
type TCislo = record
cifry : TCifry;
delka : 0..MAX;
end;
Proč nejsou jednotlivá políčka pole TCifry typu integer nebo menší byte? Nepoužít integer je vhodné kvůli šetření s pamětí, ale
jinak je výhodné, že máme takto zajištěnou kontrolu přetečení. Možná si říkáte - co je v tom za výhodu, že napíšu program, který bude padat na přetečení? Kupodivu je výhoda značná. Budete mít
alespoň nápovědu, kde hledat problém. Že jste v nějaké operaci např. zapomněli použít operaci mod 10. Není totiž nic protivnějšího, než mít nefunkční program,
o kterém netušíte, proč je nefunkční - a co hůř ani neznáte vstup, na kterém nefunguje... ;)
procedure Nacti( var A : TCislo );Nebo obdobně na součet dvou čísel:
function Secti( var A,B : TCislo ):TCislo;A teď už jen stačí vymyslet, jak realizovat jednotlivé operace, jak volat vytvořené podprogramy - a máme vystaráno. :-)
Nakonec pár zajímavých odkazů: