Паскаль. Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию суммы цифр.

Паскаль. Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию суммы цифр.
Гость
Ответ(ы) на вопрос:
Гость
Непростая задача... 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
Не нашли ответ?
Ответить на вопрос
Похожие вопросы