Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Сортировка и вывод элементов массива от максимума к минимуму в Pascal"

Delphi , Синтаксис , Массивы

Сортировка и вывод элементов массива от максимума к минимуму в Pascal

Вопрос, поставленный автором, заключается в необходимости написать процедуру для сортировки массива значений, считанных из файла, в порядке убывания и вывода его элементов вместе с порядковыми номерами элементов. При этом важно сохранить соответствие между значениями и их порядковыми номерами.

Решение проблемы

Для решения поставленной задачи можно использовать структуры данных, которые позволяют хранить связанные данные вместе. В языке Pascal такими структурами являются записи. Запись позволяет объединить различные типы данных в одно целое, что идеально подходит для хранения пар "номер элемента - значение элемента".

Шаги решения

  1. Определить новый тип данных, который будет представлять запись с двумя полями: номером элемента и его значением.
  2. Изменить тип массива a на новый тип записи.
  3. При чтении элементов из файла записать в каждое поле записи соответствующие значения.
  4. Отсортировать массив записей по убыванию значений.
  5. Вывести отсортированный массив, включая номера элементов и их значения.

Пример кода

type
  TValueWithIndex = record
    Value: real;
    Index: integer;
  end;
  mas = array of TValueWithIndex;

var
  n, i: integer;
  a: mas;
  Rf: text;
  min, max, vid, nrmin, nrmax: real;

procedure ReadValues;
begin
  Assign(Rf, 'duom1.txt');
  Reset(Rf);
  Readln(Rf, n);
  SetLength(a, n);
  for i := 1 to n do
  begin
    Read(Rf, a[i].Value);
    a[i].Index := i;
  end;
  Close(Rf);
end;

procedure SortArray(var arr: mas);
var
  i, j: integer;
  temp: TValueWithIndex;
begin
  for i := High(arr) downto 2 do
    for j := 1 to i - 1 do
      if arr[j].Value < arr[j + 1].Value then
      begin
        temp := arr[j];
        arr[j] := arr[j + 1];
        arr[j + 1] := temp;
      end;
end;

procedure FindMinMax(var arr: mas; var min, max, nrmin, nrmax, vid: real);
var
  i: integer;
begin
  min := arr[0].Value;
  max := arr[0].Value;
  nrmin := arr[0].Index;
  nrmax := arr[0].Index;
  vid := 0;
  for i := 0 to High(arr) do
  begin
    vid := vid + arr[i].Value;
    if min > arr[i].Value then
    begin
      min := arr[i].Value;
      nrmin := arr[i].Index;
    end;
    if max < arr[i].Value then
    begin
      max := arr[i].Value;
      nrmax := arr[i].Index;
    end;
  end;
  vid := vid / (High(arr) + 1);
end;

procedure WriteSortedArray(var arr: mas);
var
  i: integer;
begin
  Assign(Rf, 'rez.txt');
  Rewrite(Rf);
  WriteLn(Rf, 'biggest amount     ', arr[High(arr)].Value:7:2, '   number ', arr[High(arr)].Index:7:0);
  WriteLn(Rf, 'smallest  amount     ', arr[0].Value:7:2, '   number', arr[0].Index:7:0);
  WriteLn(Rf, 'average amount       ', vid:7:2);
  WriteLn(Rf);
  WriteLn(Rf, 'number   amount');
  for i := 0 to High(arr) do
    WriteLn(Rf, arr[i].Index:7:0, '       ', arr[i].Value:7:2);
  Close(Rf);
end;

begin
  ReadValues;
  SortArray(a);
  FindMinMax(a, min, max, nrmin, nrmax, vid);
  WriteSortedArray(a);
end.

Альтернативный ответ

Если по каким-то причинам использование записей невозможно, можно использовать два отдельных массива: один для хранения значений, а второй — для хранения соответствующих им индексов. При сортировке массива значений необходимо будет также сортировать массив индексов, чтобы сохранить корректное соответствие между значениями и их номерами.

Вывод

Использование записей в Pascal позволяет эффективно решать задачи, связанные с хранением и обработкой связанных данных. В данном случае применение записей позволяет упростить задачу сортировки массива с сохранением соответствия между значениями и их порядковыми номерами.

Создано по материалам из источника по ссылке.

Сортировка элементов массива от максимального к минимальному значения с сохранением соответствия порядковых номеров элементов в программировании на языке Pascal.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 13:06:28/0.0030820369720459/0