Вопрос задан 09.08.2018 в 22:02. Предмет Информатика. Спрашивает Мяделец Юлия.

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

суммы цифр.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Семиглазов Илья.
Непростая задача...

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



0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Я могу помочь вам с вашим вопросом о Паскале. Вот пример кода, который заполняет массив случайными числами в интервале [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. ```

Надеюсь, это поможет вам. Если у вас есть еще вопросы, я буду рад ответить.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос