Другие языки программирования и технологии

Информатика. Паскаль. Объясните, как решать (БЕЗ МАССИВОВ)

Дана последовательность целых чисел, не превосходящих по модулю `10000`. Ноль - признак конца. Вывести минимальное произведение двух элементов этой последовательности.
Надо найти 6 чисел:
Минимальное отрицательное: NegMin
Два максимальных отрицательных: NegMax1, NegMax2
Максимальное положительное: PosMax
Два минимальны положительных: PosMin1, PosMin2

Если в последовательности были только отрицательные числа, ответ: NegMax1 * NegMax2

Если в последовательности были только положительные числа, ответ: PosMin1 * PosMin2

Во всех прочих случаях ответ: NegMin * PosMax

NegMin := 0;
NegMax1 := -10001;
NegMax2 := -10001;
PosMax := 0;
PosMin1 := 10001;
PosMin2 := 10001;
read(cur);
while cur <> 0 do begin
if cur < NegMin then NegMin := cur;
if cur > PosMax then PosMax := cur;
if (cur < 0) and (cur > NegMax1) then begin
NegMax2 := NegMax1;
NegMax1 := cur
end else if (cur < 0) and (cur > NegMax2) then NegMax2 := cur;
if (cur > 0) and (cur < PosMin1) then begin
PosMin2 := PosMin1;
PosMin1 := cur
end else if (cur > 0) and (cur < PosMin2) then PosMin2 := cur;
read(cur)
end;
if NegMin = 0 then
writeln(PosMin1 * PosMin2)
else if PosMax = 0 then
writeln(NegMax1 * NegMax2)
else
writeln(NegMin * PosMax)

Данный код предполагает, что в последовательности всегда содержится не менее 2 чисел.
Руслан Ф
Руслан Ф
83 810
Лучший ответ
Иван Троицкий Почему, только, положительное максимальное принимает значение 0, а пожит. пинимальные 10001,а не наоборот?
начальное значение минимального числа берешь 10001 (что бы точно любое число было меньше его)
метка начало :
читаешь число, если не 0, то берешь минимальное из пары минимальное и новое и идешь на начало.
если 0, то выходишь из цикла и выводишь минимальное число
Виталий Жарков
Виталий Жарков
22 439
Dimon Павлик автору нужно найти не минимальное число, а минимальное произведение двух чисел
с массивами очень легко, а вот без них вряд ли выйдет