символах, но от строки отказались, поскольку строка вмещает лишь 255 символов, а им требовалось больше.
В итоге объявление сверхбольшого числа получилось таким, как показано в программе «P_46_1», – она была написана для отладки процедуры распечатки сверхбольшого числа.
{ P_46_1 – Распечатка сверхбольших чисел }
{ объявления для сверхбольшого числа }
const CSize = 500; { размер массива для цифр }
type TBigNumber = array [1..CSize] of char;
var BN : TBigNumber; { очень большое число! }
{ Процедура распечатки сверхбольшого числа
Младшие цифры числа располагаются в младших элементах массива.
Но распечатывать надо, начиная со старших цифр.
Поэтому обработку массива ведем от конца к началу.
При этом старшие позиции, заполненные пробелами, не печатаем.}
procedure WriteBigNumber(var F: text; const aNum: TBigNumber);
var i : integer;
begin
i:= SizeOf(aNum); { печать начинаем со старших цифр }
{ Пока встречаются незначащие цифры, пропускаем их }
while (i>0) and not (aNum[i] in ['1'..'9']) do
{ Если весь массив заполнен пробелами, то печатаем ноль }
if i=0 then Write(F, '0');
{ Теперь печатаем оставшиеся цифры }
while i>0 do begin
Write(F, aNum[i]);
Dec(i);
end;
{ Добавляем ещё одну пустую строчку для удобства созерцания }
Writeln(F); Writeln(F);
end;
var i : integer;
begin { === Главная программа === }
WriteBigNumber(
WriteBigNumber(
{ заполняем случайными цифрами }
for i:=1 to CSize-1 do BN[i]:= Char(Random(100) mod 10 + Ord('0'));
WriteBigNumber(
Readln;
end.
Итак, тип данных TBigNumber – это сверхбольшое число в виде массива из 500 цифр. Процедура WriteBigNumber – печать сверхбольшого числа – выполняет то, о чем говорит её название. Напомню, что примененная здесь процедура Dec(i) выполняет быстрое вычитание единицы.
В главной программе вы найдете процедуру FillChar – «заполнить символом». Для заполнения массива можно организовать цикл, но процедура FillChar делает это проще и быстрее, она объявлена в Паскале так:
procedure FillChar(var X; Count: Integer; Value: Byte);