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ů: