Непростая задача...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.pend;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 endend;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; Writelnend.Тестовое решение:*** Исходные элементы массива *** 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