procedure get_num(var m: bignum; var n: integer); var i := 0; s: string; begin write('Введите число = '); readln(s); s := trim(s); n := 0; for i := length(s) downto 1 do if s[i] in ['0'..'9'] then begin n := n + 1; m[n] := strtoint(s[i]); end; end;
function more(a, b: bignum; n_a: integer): boolean; var i: integer; f := false; begin for i := n_a downto 1 do begin if a[i] > b[i] then f := true else if a[i] < b[i] then f := false; if a[i] <> b[i] then break; end; more := f; end;
procedure show(m: bignum; n: integer); var i: integer; begin write('Вывод '); for i := n downto 1 do write(m[i]); writeln(); end;
begin get_num(a, n_a); get_num(b, n_b);
while (n_a >= n_b) and more(a, b, n_a) do begin if (a[n_a] > b[n_b]) then k := n_a - n_b else if n_a > n_b then k := n_a - n_b - 1 else k := 0;
for i := 1 to n_b do begin a[i + k] := a[i + k] - b[i]; if a[i + k] < 0 then begin for j := i + k to n_a - 1 do begin if a[j] >= 0 then break; a[j] := a[j] + 10; a[j + 1] := a[j + 1] - 1; end end; end; if a[n_a] = 0 then n_a := n_a - 1; end;
Для того чтобы перевести из двоичной системы счисления в десятичную необходимо сложить произведение цифры разряда со степенью двойки (показатель системы из которой переводим). Определяем степень (последнее число имеет нулевую степень, каждое следующее +1): 43210 11110 Получаем: 11110=1*2^4+1*2^3+1*2^2+1*2^1+0*2^0=16+8+4+2+0=30 11110 (2)=30 (10)
Для того чтобы перевести из восьмеричной системы счисления в десятичную необходимо сложить произведение цифры разряда со степенью восьмерки (показатель системы из которой переводим). Определяем степень (последнее число имеет нулевую степень, каждое следующее +1): 210 372 Получаем: 372 (8) = 3*8^2+7*8^1+2*8^0=192+56+2=250
Для того чтобы перевести из шестнадцатеричной системы счисления в десятичную необходимо сложить произведение цифры разряда со степенью шестнадцати (показатель системы из которой переводим). Определяем степень (последнее число имеет нулевую степень, каждое следующее +1): 210 32А Учитывая соответствие букв в шестнадцатеричной системе числам в десятичной: А - 10 B - 11 C - 12 D - 13 E - 14 F - 15 получаем: 32А (16) = 3*16^2+2*16^1+10*16^0=768+32+10=810.
bignum = array[1..100] of integer;
var
a, b: bignum;
i, j, k, n_a, n_b: integer;
procedure get_num(var m: bignum; var n: integer);
var
i := 0;
s: string;
begin
write('Введите число = ');
readln(s);
s := trim(s);
n := 0;
for i := length(s) downto 1 do
if s[i] in ['0'..'9'] then begin
n := n + 1;
m[n] := strtoint(s[i]);
end;
end;
function more(a, b: bignum; n_a: integer): boolean;
var
i: integer;
f := false;
begin
for i := n_a downto 1 do
begin
if a[i] > b[i] then f := true
else if a[i] < b[i] then f := false;
if a[i] <> b[i] then break;
end;
more := f;
end;
procedure show(m: bignum; n: integer);
var
i: integer;
begin
write('Вывод ');
for i := n downto 1 do
write(m[i]);
writeln();
end;
begin
get_num(a, n_a);
get_num(b, n_b);
while (n_a >= n_b) and more(a, b, n_a) do
begin
if (a[n_a] > b[n_b]) then k := n_a - n_b
else if n_a > n_b then k := n_a - n_b - 1
else k := 0;
for i := 1 to n_b do
begin
a[i + k] := a[i + k] - b[i];
if a[i + k] < 0 then begin
for j := i + k to n_a - 1 do
begin
if a[j] >= 0 then break;
a[j] := a[j] + 10;
a[j + 1] := a[j + 1] - 1;
end
end;
end;
if a[n_a] = 0 then n_a := n_a - 1;
end;
show(a, n_a);
end.
Определяем степень (последнее число имеет нулевую степень, каждое следующее +1):
43210
11110
Получаем: 11110=1*2^4+1*2^3+1*2^2+1*2^1+0*2^0=16+8+4+2+0=30
11110 (2)=30 (10)
Для того чтобы перевести из восьмеричной системы счисления в десятичную необходимо сложить произведение цифры разряда со степенью восьмерки (показатель системы из которой переводим).
Определяем степень (последнее число имеет нулевую степень, каждое следующее +1):
210
372
Получаем: 372 (8) = 3*8^2+7*8^1+2*8^0=192+56+2=250
Для того чтобы перевести из шестнадцатеричной системы счисления в десятичную необходимо сложить произведение цифры разряда со степенью шестнадцати (показатель системы из которой переводим).
Определяем степень (последнее число имеет нулевую степень, каждое следующее +1):
210
32А
Учитывая соответствие букв в шестнадцатеричной системе числам в десятичной:
А - 10
B - 11
C - 12
D - 13
E - 14
F - 15
получаем: 32А (16) = 3*16^2+2*16^1+10*16^0=768+32+10=810.