xoma писал(а):эту я написала,ток у меня вот как получилось:
Получилось ли? Ведь оно 1) не скомпилируется, 2) если исправить ошибки синтаксиса, будет считать несколько иную функцию, проверьте калькулятором, 3) условие (x = 1.4) and (x > 1.4) ложно при любых значениях x, 4) возведение в целую степень n при помощи x^n = e^(n ln x) -- не ошибка, но из пушки по воробьям, кроме того, попробуйте ввести отрицательное значение x
.
По поводу сравнения действительных чисел на равенство, вот вам нехитрый тест для размышления (single, double, extended -- действительные типы одинарной, двойной и расширенной точности, real может быть одним из них или между single и double (в Borland/Turbo Pascal)):
- Код: Выделить всё
var
xr: real;
xs: single;
xd: double;
xe: extended;
begin
xr := 1.4; xs := 1.4; xd := 1.4; xe := 1.4;
if 1.4 = 1.4 then writeln('1.4 = 1.4') else writeln('1.4 <> 1.4');
if xr = 1.4 then writeln('r1.4 = 1.4') else writeln('r1.4 <> 1.4');
if xs = 1.4 then writeln('s1.4 = 1.4') else writeln('s1.4 <> 1.4');
if xd = 1.4 then writeln('d1.4 = 1.4') else writeln('d1.4 <> 1.4');
if xe = 1.4 then writeln('e1.4 = 1.4') else writeln('e1.4 <> 1.4');
end.
и тестовый прогон:
- Код: Выделить всё
1.4 = 1.4
r1.4 <> 1.4
s1.4 <> 1.4
d1.4 <> 1.4
e1.4 = 1.4
Как видите, 1.4 очень часто не равно 1.4
Поэтому проверка на равенство превращается в if abs(x - 1.4) < eps then.
Пойду вверху тоже поправлю на короткий вариант... И да, в первоначальном варианте была ошибка, имелось в виду, как вы уже конечно догадались, if (x > 1.4 - eps) and (x < 1.4 + eps) then, или, как пишут математики, 1.4 - eps < x < 1.4 + eps.
Добавлено спустя 5 минут 40 секунд:xoma писал(а):чтобы начиналось ... с x = 0,5
До цикла задайте желаемое начальное значение для x.