Как найти 3 наименьших элемента в одномерном массиве? - Pascal ABC
Формулировка задачи:
Собственно вот моё задание:
Дана квадратная матрица А, составьте программу формирования последовательности В, элементами которой являются элементы матрицы А расположенные под главной диагональю. В полученной последовательности найдите 3 наименьших элемента. Если количество между первый и вторым элементом совпадает с количеством между вторым и третьим то поменять их местами сохранив порядок следования(без доп массива) линейный массив вывести в строку
И мне не понятно как в массиве найти 3 наименьших элемента, я могу найти один но 3 хз как + не используя доп.массив, если кто-то делал что-то подобное напишите как делали.
Была идея сортировать методом хоара а потом 3 последних элемента считать минимальными но это доп.массив(
Решение задачи: «Как найти 3 наименьших элемента в одномерном массиве?»
textual
Листинг программы
const
n=10; //кол-во элементов в массиве
var
a: array[1..n] of real; //основной массив
i: integer;
procedure Out (var a: array[1..n] of real); //вывод массива
var i: integer;
begin
write('Массив:');
for i:=1 to n do
write(' ',a[i]);
end;
procedure Swap(var a,b: real); //меняет 2 числа местами
var temp: real;
begin
temp:=a; a:=b; b:=temp;
end;
function MinEl(var b: array[1..n] of real; el: integer): integer; //ищет в массиве номер минимального элемента, начиная с номера el
var u: integer;
begin
result:=el;
for u:= el+1 to n do
if b[u]<b[result] then result:=u;
end;
procedure Three (b: array[1..n] of real); //основная процедура по поиску трех минимумов: создает копию массива a (чтобы основной массив не изменялся)
var i: integer;
begin
write('Три наименьших элемента:');
for i:=1 to 3 do begin //на место i-го элемента становится минимальный элемент в промежутке от i до n
swap(b[i],b[minel(b,i)]);
write(' ',b[i]); //и выводится на экран
end;
end;
begin
for i := 1 to n do //создаем массив
a[i] := random(101) - 50;
Out(a); //выводим на экран
writeln;
Three(a); //ищем три минимума
writeln;
Out(a); //показываем, что основной массив не изменился
writeln;
end.
Объяснение кода листинга программы
- Объявляется константа
nравная 10, которая определяет размер массива. - Создается массив
aтипа array[1..n] of real, который будет содержать 10 чисел. - Инициализируются случайные значения для каждого элемента массива
a. - Выводится на экран весь массив
a. - Создается процедура
Out, которая выводит на экран массивa. - Создается процедура
Swap, которая меняет два числа местами. - Создается функция
MinEl, которая ищет в массиве номер минимального элемента, начиная с номераel. - Создается процедура
Three, которая ищет три минимума в массивеa. - В основной части программы вызываются процедуры
Out,ThreeиOutдля вывода начального массива, поиска трех минимумов и вывода массива после поиска минимумов.