
Паскаль. Заполните массив случайными числами в интервале [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



Я могу помочь вам с вашим вопросом о Паскале. Вот пример кода, который заполняет массив случайными числами в интервале [100, 999] и переставляет их по возрастанию суммы цифр:
```pascal program SortArray; var A: array[1..10] of integer; // объявляем массив из 10 элементов i, j, temp: integer; // объявляем переменные для циклов и обмена sum1, sum2: integer; // объявляем переменные для суммы цифр
// функция, которая возвращает сумму цифр числа function SumOfDigits(n: integer): integer; var s: integer; begin s := 0; // инициализируем сумму нулем while n > 0 do // пока число не равно нулю begin s := s + (n mod 10); // прибавляем к сумме последнюю цифру числа n := n div 10; // отбрасываем последнюю цифру числа end; SumOfDigits := s; // возвращаем сумму цифр end;
begin Randomize; // инициализируем генератор случайных чисел // заполняем массив случайными числами в интервале [100, 999] for i := 1 to 10 do begin A[i] := Random(900) + 100; // генерируем случайное число от 0 до 899 и прибавляем 100 Write(A[i], ' '); // выводим элемент массива на экран end; Writeln; // переходим на новую строку // сортируем массив по возрастанию суммы цифр for i := 1 to 9 do // проходим по всем элементам массива, кроме последнего begin for j := i + 1 to 10 do // проходим по всем элементам массива, начиная со следующего за i begin sum1 := SumOfDigits(A[i]); // вычисляем сумму цифр i-го элемента sum2 := SumOfDigits(A[j]); // вычисляем сумму цифр j-го элемента if sum1 > sum2 then // если сумма цифр i-го элемента больше суммы цифр j-го элемента begin temp := A[i]; // запоминаем i-й элемент во временной переменной A[i] := A[j]; // присваиваем i-му элементу значение j-го элемента A[j] := temp; // присваиваем j-му элементу значение временной переменной end; end; end; // выводим отсортированный массив на экран for i := 1 to 10 do begin Write(A[i], ' '); // выводим элемент массива на экран end; Writeln; // переходим на новую строку end. ```
Надеюсь, это поможет вам. Если у вас есть еще вопросы, я буду рад ответить.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili