Разделим исходный код на группы по 4 разряда. 111011 2 = 0011 1011 2 Затем заменяем каждую группу на код из таблицы. Двоичная СС шестнадцатеричная СС 1101D1110E1111F Получаем число: 0011 1011 2 = 3B16 Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда. 10011 2 = 1001 1000 2 Затем заменяем каждую группу на код из таблицы. Получаем число: 1001 1000 2 = 98 16 В итоге получаем число: 3B.98 16
делим 32 на 8 до наименьшего ответа и остатка.Остаток от деления записываем в обратном порядке. Получаем число в 8-ой системе счисления: 040 32 = 040 8 Для перевода дробной части числа последовательно умножаем дробную часть на основание 8. В результате каждый раз записываем целую часть произведения. 0.25*8 = 2 (целая часть 2) 0*8 = 0 (целая часть 0) 0*8 = 0 (целая часть 0) 0*8 = 0 (целая часть 0) Получаем число в 8-ой системе счисления: 2000 0.25 = 2000 8 В итоге получаем число: 040.2000 8
type R = record v: integer; p: integer end; mR = array[1..n] of R;
function SummOfDigits(n: integer): integer; { Сумма цифр в трехзначном числе } begin SummOfDigits := (n div 100) + ((n mod 100) div 10) + (n mod 10) end;
procedure Swp(var a, b: R); { Меняет местами элементы a и b } var t: R; begin t.v := a.v; t.p := a.p; a.v := b.v; a.p := b.p; b.v := t.v; b.p := t.p end;
procedure Shell(var a: mR; n: integer); { сортировка методом Шелла } var i, j, step: integer;
begin step := n div 2; while step > 0 do begin for j := n - step downto 1 do begin i := j; while i <= n - step do begin if a[i].v > a[i + step].v then Swp(a[i], a[i + step]); i := i + step end end; step := step div 2 end end;
var a: array[1..n] of integer; b: mR; i: integer;
begin Randomize; Writeln('*** Исходные элементы массива ***'); for i := 1 to n do begin a[i] := Random(900) + 100; b[i].v := SummOfDigits(a[i]); b[i].p := i; Write(a[i]:4) end; Writeln; Shell(b, n); Writeln('*** Упорядоченные по возрастанию суммы цифр элементы массива ***'); for i := 1 to n do begin Write(a[b[i].p]:4) end; Writeln end.
111011 2 = 0011 1011 2
Затем заменяем каждую группу на код из таблицы.
Двоичная СС шестнадцатеричная СС
1101D1110E1111F
Получаем число:
0011 1011 2 = 3B16
Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда.
10011 2 = 1001 1000 2
Затем заменяем каждую группу на код из таблицы.
Получаем число:
1001 1000 2 = 98 16
В итоге получаем число: 3B.98 16
делим 32 на 8 до наименьшего ответа и остатка.Остаток от деления записываем в обратном порядке. Получаем число в 8-ой системе счисления: 040
32 = 040 8
Для перевода дробной части числа последовательно умножаем дробную часть на основание 8. В результате каждый раз записываем целую часть произведения.
0.25*8 = 2 (целая часть 2)
0*8 = 0 (целая часть 0)
0*8 = 0 (целая часть 0)
0*8 = 0 (целая часть 0)
Получаем число в 8-ой системе счисления: 2000
0.25 = 2000 8
В итоге получаем число: 040.2000 8
const
n = 16;
type
R = record
v: integer;
p: integer
end;
mR = array[1..n] of R;
function SummOfDigits(n: integer): integer;
{ Сумма цифр в трехзначном числе }
begin
SummOfDigits := (n div 100) + ((n mod 100) div 10) + (n mod 10)
end;
procedure Swp(var a, b: R);
{ Меняет местами элементы a и b }
var
t: R;
begin
t.v := a.v; t.p := a.p;
a.v := b.v; a.p := b.p;
b.v := t.v; b.p := t.p
end;
procedure Shell(var a: mR; n: integer);
{ сортировка методом Шелла }
var
i, j, step: integer;
begin
step := n div 2;
while step > 0 do
begin
for j := n - step downto 1 do
begin
i := j;
while i <= n - step do
begin
if a[i].v > a[i + step].v then Swp(a[i], a[i + step]);
i := i + step
end
end;
step := step div 2
end
end;
var
a: array[1..n] of integer;
b: mR;
i: integer;
begin
Randomize;
Writeln('*** Исходные элементы массива ***');
for i := 1 to n do
begin
a[i] := Random(900) + 100;
b[i].v := SummOfDigits(a[i]);
b[i].p := i;
Write(a[i]:4)
end;
Writeln;
Shell(b, n);
Writeln('*** Упорядоченные по возрастанию суммы цифр элементы массива ***');
for i := 1 to n do
begin
Write(a[b[i].p]:4)
end;
Writeln
end.
Тестовое решение:
*** Исходные элементы массива ***
862 244 599 379 595 840 551 151 614 383 185 893 131 172 139 256
*** Упорядоченные по возрастанию суммы цифр элементы массива ***
131 151 244 172 551 614 840 139 256 185 383 862 595 379 893 599