Про TButton и TMemo писАть, думаю, не стОит... Сразу к теме: Нужно посчитать функцию y=sin(2*x)/sqr(x) при x[-1;1] и получить результат при x<>0. вот здесь считаем: -------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var x, y : real; s1, s2: string; begin x := -1; while x <= 1 do begin if x <> 0 then begin y := sin(2*x)/sqr(x); str(x:7:20,s1); str(y:7:2,s2); Memo1.Lines.Add('x = '+s1+Chr(9)+'y = '+s2); end; x := x + 0.2; end; end; ------------------------------------------------- а вот, что получаем: x = -1.00000000000000000000 y = -0.91 x = -0.80000000000000004000 y = -1.56 x = -0.60000000000000009000 y = -2.59 x = -0.40000000000000008000 y = -4.48 x = -0.20000000000000007000 y = -9.74 x = -0.00000000000000007000 y = -30025219245102016.00 x = 0.19999999999999993000 y = 9.74 x = 0.39999999999999991000 y = 4.48 x = 0.59999999999999987000 y = 2.59 x = 0.79999999999999982000 y = 1.56 x = 0.99999999999999978000 y = 0.91 Где грабли???
сравнивать на "<" абс. значение "х" с близким к нулю числом, которое заведомо больше ошибки вычисления типа real. if(Abs(x) < мало_мало) then begin ... end; "мало_мало" взять, например, 0.00001. не помню, сколько там для real значащих разрядов.
я в юношестве выдвал листинг учителю и предлагал найти ошибку. Алгоритмически программа написана правильно. С точки зрения синтаксиса - тоже. Пусть учитель доказывает, что парень - верблюд. Это ж учёба, в конце концов...
У меня дочь... Я знаю, что в самом алгоритме ошибок нет, сам ОЧЕНЬ давно увлекаюсь программированием , но с подобной фигней впервые столкнулся... Ей сказал, что все правильно написала и чтобы не парилась... Спрошу сегодня вечером, что педагок сказал.
Тут хорошее объяснение. наступил на эти грабли, когда считывал и писал "деньги" в базе как "AsFloat". Переделал на "AsCurrency" - баг пропал (или два бага друг друга погасили - главное работает )
Мда. Это же азы. Не сравнивать вещественные числа на "равно" или "не равно", только на "больше" или "меньше".
Может для вас это и азы, а я институт закончил в 92г. и программирование тады изучалось исключительно по Васику... Что касается моего программировая на Delphi, то... не было у меня подобных задач. Кста, я не уверен, что школьный учитель дочери в курсе про эти грабли. Спасибо всем, кто откликнулся!!!