Анализ решений При х=0 функция 1/х терпит разрыв. При подходе к нулю слева она стремится к минус бесконечности, а справа - к плюс бесконечности. Первый вариант программы из-за суммирования на каждом шаге ошибок машинного округления пришел не к нулевому аргументу х, что привело к неточному вычислению значения функции (как видно по результату, аргумент не дошел до нуля слева). Во втором варианте аргумент вычислялся более точно, накопления суммы не было и при нуле мы получили именно "бесконечность".
Выводы Табуляция функций по второму варианту предпочтительнее. Но её недостатком является необходимость предварительного вычисления количества повторений цикла по известной формуле Int((b-a)/h)+1 и подготовка формулы для расчета текущего значения переменной в виде функции от параметра цикла.
Не больше - значит, меньше или равно. Они все сказали правду. Среди них 0 брехунов, а это не больше 1, не больше 2, не больше 3 и не больше 4. Причем тот, кто сказал "Не больше 4" - сказал правду, их же всего 4. Если среди них есть один брехун, то опять-таки все сказали правду. Потому что один - это не больше одного. Получаем противоречие. Если среди них два брехуна, то соврал только один: который сказал "Не больше одного". Опять противоречие. Если брехунов трое, то соврали только двое, которые сказали "Не больше 1" и "Не больше 2".
Известный метод артиллерийской вилки, когда пристреливаются по принципу "перелет - недолет". Пусть отверстия пронумерованы от 1 до 15. Сначала пробуем отверстие №8 (посередине ряда). Если валик не помещается, следующим пробуем середину участка 8-15, т.е. отверстие №12. а если проваливается - то середину участка 1-8, т.е. отверстие №4. Далее, по аналогии, пробуем середину отрезка левее или правее сделанной пробы, т.е. отверстия с четными номерами. И четвертая проба будет контрольной - отверстие с нечетным номером. Контрольная - потому что место валика и так уже понятно.
var
x:real;
begin
x:=-1;
while x<=2 do begin
Writeln('x=',x:4:1,' y=',1/x:0:10);
x:=x+0.2
end
end.
Решение
x=-1.0 y=-1.0000000000
x=-0.8 y=-1.2500000000
x=-0.6 y=-1.6666666667
x=-0.4 y=-2.5000000000
x=-0.2 y=-5.0000000000
x= 0.0 y=-18014398509482000.0000000000
x= 0.2 y=5.0000000000
x= 0.4 y=2.5000000000
x= 0.6 y=1.6666666667
x= 0.8 y=1.2500000000
x= 1.0 y=1.0000000000
x= 1.2 y=0.8333333333
x= 1.4 y=0.7142857143
x= 1.6 y=0.6250000000
x= 1.8 y=0.5555555556
x= 2.0 y=0.5000000000
2. Вариант с вычислением аргумента путем умножения
var
x:real;
i:integer;
begin
for i:=1 to 16 do begin
x:=0.2*(i-1)-1;
Writeln('x=',x:4:1,' y=',1/x:0:10)
end
end.
Решение
x=-1.0 y=-1.0000000000
x=-0.8 y=-1.2500000000
x=-0.6 y=-1.6666666667
x=-0.4 y=-2.5000000000
x=-0.2 y=-5.0000000000
x= 0.0 y=Infinity
x= 0.2 y=5.0000000000
x= 0.4 y=2.5000000000
x= 0.6 y=1.6666666667
x= 0.8 y=1.2500000000
x= 1.0 y=1.0000000000
x= 1.2 y=0.8333333333
x= 1.4 y=0.7142857143
x= 1.6 y=0.6250000000
x= 1.8 y=0.5555555556
x= 2.0 y=0.5000000000
Анализ решений
При х=0 функция 1/х терпит разрыв. При подходе к нулю слева она стремится к минус бесконечности, а справа - к плюс бесконечности.
Первый вариант программы из-за суммирования на каждом шаге ошибок машинного округления пришел не к нулевому аргументу х, что привело к неточному вычислению значения функции (как видно по результату, аргумент не дошел до нуля слева). Во втором варианте аргумент вычислялся более точно, накопления суммы не было и при нуле мы получили именно "бесконечность".
Выводы
Табуляция функций по второму варианту предпочтительнее. Но её недостатком является необходимость предварительного вычисления количества повторений цикла по известной формуле Int((b-a)/h)+1 и подготовка формулы для расчета текущего значения переменной в виде функции от параметра цикла.