Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство 1+1/2+...+1/K<A . Для решения этой задачи ученик написал такую программу:
var a, s: real;
k: integer;
begin
read(a);
k := 1;
s := 1;
while s < a do begin
s := s + 1.0/k;
k := k + 1;
end;
write(k);
end.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа выведет правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Answers & Comments
Verified answer
1)22)Для начала об ошибке:Дело в том, что программа дважды прибавляет 1 к сумме прогрессии.
1.6
3)k:=1 меняем на k:=2
writeln(k) меняем на writeln(k-2)
//Однако, есть одна проблема. Если число a меньше или равно 1, программа возвращает 0. В начале прогрессии в любом случае будет 1, а потом уже 1/2 1/3 и т.д..