m1=0
m2=0
m3=0
x=10
while x!=0:
x=int(input())#вводим число
if m1<x:
m3=m2
m2=m1
m1=x
elif x>m2 and x>m3 and x<m1:
m3=m2
m2=x
elif x<m2 and x<m1 and x>m3:
m3=x
print(m1,m2,m3,sep=" ")
вот std алгоритм заключается в том что у нас три переменных и мы после нахождения максимума все переменные сдвигаем назад то есть m1 становится m2, m2 становится m3 а m1 присваивается новый максимум и так же тут случаи когда m2 или m3 больше старых но мешьше m1 он тогда просто меняет значение именно той переменной которой он больше
program Prog;
var i, x, Proiz, MinEl: Integer;
arr: array[1..8] of Integer;
begin
Proiz:=1;
MinEl:=13;
randomize;
write('Введите X: ');
read(x);
// запоолнение, вычисление мин. эл., и умножения
for i:=1 to 8 do begin
arr[i]:=random(12)+2;
Proiz:=Proiz*arr[i];
if arr[i]<MinEl then
MinEl:=arr[i]
end;
// вывод всего массива
for i:=1 to 8 do
write(arr[i], ' ');
writeln;
// вывод нужных элементов
writeln('Минимальный элемент: ', MinEl);
writeln('Произведение элементов: ', Proiz);
writeln('Элементы, равные X: ');
for i:=1 to 8 do
if arr[i]=x then
write(arr[i], ' ')
end.