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

Однопроходный алгоритм на последовательности (без массива) на С++

С клавиатуры вводятся несколько чисел (до первого нуля) . Определить, самые близкие по значению к нулю отрицательное и положительное числа.
Уже решалась точно такая же задача:

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
setlocale(LC_ALL,"Russian");
int x, MaxNeg = 0, MinPos = 0;
cout << "Введите числа последовательности (0 - конец ввода): " << endl;
do
{
cin >> x;
if (x < 0 && (!MaxNeg || x > MaxNeg))
MaxNeg = x;
if (x > 0 && (!MinPos || x < MinPos))
MinPos = x;
} while (x);
if (!MaxNeg)
cout << "Отрицательные числа не вводились. " << endl;
else
cout << "Самое близкое к нулю отрицательное число: " << MaxNeg << endl;
if (!MinPos)
cout << "Положительные числа не вводились. " << endl;
else
cout << "Самое близкое к нулю положительное число: " << MinPos << endl;
getch();
return 0;
}

Попробуйте воспользоваться поиском:
----------
Добавлено.
О!! ! О_о Так это даже ваш вопрос был.
Sa Sr
Sa Sr
51 590
Лучший ответ
p,o,s:integer;
begin
p=9999;
o=-9999;//тут можно и побольше числа, если предполагается вводить до миллионов)
while s{}0 do begin
readln(s);
if (s{0) and (s{o) then o:=s;
if (s}0) and (s}p) then p:=s;
end;
writeln(p:10,o:10);
end.

фигурные скобки заменяем угловыми) .
upd. не прочитал, что на си) ) поправляемся.
int main()
{

int p,o,s;
p=9999;
o=-9999;//тут можно и побольше числа, если предполагается вводить до миллионов)
while s{}0 do begin
scanf("%d\n",&s);
if ((s{0)&&(s{o)) then o=s;
if ((s}0)&&(s}p)) then p=s;
}
printf("%d\t%d\t",p,o);
getch();
}

Похожие вопросы