Сортировка и вывод элементов массива от максимума к минимуму в Pascal
Вопрос, поставленный автором, заключается в необходимости написать процедуру для сортировки массива значений, считанных из файла, в порядке убывания и вывода его элементов вместе с порядковыми номерами элементов. При этом важно сохранить соответствие между значениями и их порядковыми номерами.
Решение проблемы
Для решения поставленной задачи можно использовать структуры данных, которые позволяют хранить связанные данные вместе. В языке Pascal такими структурами являются записи. Запись позволяет объединить различные типы данных в одно целое, что идеально подходит для хранения пар "номер элемента - значение элемента".
Шаги решения
Определить новый тип данных, который будет представлять запись с двумя полями: номером элемента и его значением.
Изменить тип массива a на новый тип записи.
При чтении элементов из файла записать в каждое поле записи соответствующие значения.
Отсортировать массив записей по убыванию значений.
Вывести отсортированный массив, включая номера элементов и их значения.
Пример кода
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