Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти номер и значение вещественного.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
retenr
Даны 30 вещественных чисел, найти номер и значение того из них, которое наиболее близкок какому-нибудь целому числу:

Моя версия такая:


program pr1;
var
i,n:integer;
min:double;
A: array[0..29] of double; {массив 30 числел}


BEGIN
writeln('Введите вещественное число'); {вводим и распечатываем очредное число, делаем это 30 раз}
for i:=0 to 29 do
begin
read(A[i]);
write(A[i]:0:2,' ');
end;

min:=1000;

for i:=0 to 29 do {ищем номер и значение того числа, которое наиболее близко к какому-нибудь целому числу}
begin
if(abs(A[i]-round(A[i])) < min) then
begin
min:=abs(A[i]-round(A[i]));
n:=i+1;
end;
end;
i:=n-1;
writeln(' '); {выводим результаты}
writeln('Число  ',A[i]:0:2);
writeln('Номер числа  ',n);



Все бы ничего, но раскритиковали эту работу, сказав, что нужно обойтись без массива вообще.
volvo
Можно и без массива. Но ввести и распечатать, а потом пройти еще раз и найти ближайшее к целому - не получится. Сразу вводишь, и сразу сравниваешь... И запоминать придется не (или не только) номер числа, но еще и само число...

Кстати,
Цитата
min:=1000;
- перебор... Единицы уже достаточно, большего отклонения от ближайшего целого не будет...
retenr
volvo, спасибо.

То есть наверно так сделать это решение:


program pr1;
var
i,n:integer;
min, x:double;


BEGIN
min:=1;

for i:=0 to 29 do {вводим и сразу ищем номер и значение того числа, которое наиболее близко к какому-нибудь целому числу}
begin
writeln('Введите вещественное число');
read(x);
if(abs(x-round(x)) < min) then
begin
min:=abs(x-round(x));
n:=i+1;
end;
end;
i:=n-1;
writeln(' '); {выводим результаты}
writeln('Число ',x:0:2);
writeln('Номер числа ',n);

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.