Код: Выделить всё
program Vichitanie_Chisel;
var
num1, num2 : string;
base : integer;
res : string;
iNum : integer;
razn : integer;
diffLenNum : integer;
function IntToHex (inNum : integer) : char;
const
alpha = '0123456789ABCDEF';
begin
Result := alpha [inNum + 1];
end;
function HexToInt (inNum : char) : integer;
const
alpha = '0123456789ABCDEF';
begin
case UpperCase(inNum) of
'0'..'9': Result := Ord(inNum) - Ord('0');
'A'..'Z': Result := Ord(inNum) - Ord('A') + 10;
end;
end;
begin
writeln('> Программа разности двух чисел <');
write('Введите первое число: ');
readln(num1);
write('Введите второе число: ');
readln(num2);
write('Введите основание системы счисления: ');
readln(base);
if (
( pos ('.', num1) <> 0 ) or
( pos (',', num1) <> 0 ) or
( pos ('.', num2) <> 0 ) or
( pos (',', num2) <> 0 )
)
then begin
writeln ('Программа предназначена для целых чисел!');
exit;
end;
// Дополнение нулями слева до длины самого длинного числа
// (плюс один ноль для старшего разряда)
// Например, числа 922 и 99 будут выглядеть как 0922 и 0099.
// Чтобы разряд первого числа был рядом с разрядом второго.
diffLenNum := abs( length(num1) - length(num2) );
if ( length(num1) > length(num2) ) then begin
num1 := StringOfChar('0', 1) + num1;
num2 := StringOfChar('0', diffLenNum + 1) + num2;
end
else begin
num1 := StringOfChar('0', diffLenNum + 1) + num1;
num2 := StringOfChar('0', 1) + num2;
end;
// Подсказка для вещественных чисел: дополнять нулями справа
// Например, 922.22 и 99 должны выглядеть как 0922.22 и 0099.00
// В этом случае должна быть ещё дополнительная проверка на разделительный
// знак.
for iNum := length(num1) downto 1 do begin
razn := HexToInt(num1[iNum]) - HexToInt(num2[iNum]);
if ( razn >= base ) then begin
num1[iNum - 1] := IntToHex( HexToInt(num1[iNum - 1]) + 1 );
Dec(razn, base);
end;
res := IntToHex( razn ) + res;
end;
if (res[1] = '0') then delete(res, 1, 1);
writeln(res);
end.