Автор Тема: [Pascal] repeat-until и for-do  (Прочитано 4411 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Richi106

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
[Pascal] repeat-until и for-do
« : 08 Ноября 2010, 20:43:45 »
Задание:
Установить, на каком из 10 интервалов отрезка [1, 4]  функция f(x)=ln(x)-x+1,8  имеет корень.
Разделив отрезок на 10 интервалов, найти значение функции на интервале путем сравнения правой и левой координаты интервала.
есть наработки, получается неправильное значение:

program prim4;
 var
  f,h,x,a,b,g,xl,xr:real;
 begin
   writeln('введите границы отрезка');
   readln(a,b);
   h:=(b-a)/10;
   xl:=a;
   xr:=a+h;
    repeat
      f:=ln(xl)-xl+1.8;
      g:=ln(xr)-xr+1.8;
      xl:=xl+h;
      xr:=xr+h;
      if (f*g)<0 then writeln('функция имеет значение на [',xl:4:2,';',xr:4:2,']');
    until xr=b;
  end.

просьба найти ошибку. вроде правильное значение:2,845

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: [Pascal] repeat-until и for-do
« Ответ #1 : 08 Ноября 2010, 23:46:20 »
с точки зрения кода ошибок не вижу. единственное - не проверяете вводимые границы, вдруг кто то введет a больше b... будет печально.
с математической точки зрения уверены, что реализация такая?
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн testtest

  • Старожил
  • ****
  • Сообщений: 376
    • Просмотр профиля
Re: [Pascal] repeat-until и for-do
« Ответ #2 : 09 Ноября 2010, 08:12:32 »
с точки зрения кода ошибку вижу
      f:=ln(xl)-xl+1.8;
      g:=ln(xr)-xr+1.8;
      xl:=xl+h;
      xr:=xr+h;
-->      if (f*g)<0 then writeln('функция имеет значение на [',xl:4:2,';',xr:4:2,']');
здесь xl, xr принимают уже следующие значения. нужно так:
      f:=ln(xl)-xl+1.8;
      g:=ln(xr)-xr+1.8;
      if (f*g)<0 then writeln('функция имеет значение на [',xl:4:2,';',xr:4:2,']');
      xl:=xl+h;
      xr:=xr+h;
ну и условие выхода
until (xr > b + h);

а во-вторых, логарифм при x < 1 быстро убывает, а в окрестности x = 0 вообще бешено несется вниз, поэтому a и b нужно задавать или 0-1, или 1-10, т.к. корня на отрезке, который ты вероятнее всего задаешь, два.

Оффлайн Richi106

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [Pascal] repeat-until и for-do
« Ответ #3 : 09 Ноября 2010, 11:38:53 »
с точки зрения кода ошибок не вижу. единственное - не проверяете вводимые границы, вдруг кто то введет a больше b... будет печально.
с математической точки зрения уверены, что реализация такая?

ну да.

с точки зрения кода ошибку вижу
      f:=ln(xl)-xl+1.8;
      g:=ln(xr)-xr+1.8;
      xl:=xl+h;
      xr:=xr+h;
-->      if (f*g)<0 then writeln('функция имеет значение на [',xl:4:2,';',xr:4:2,']');
здесь xl, xr принимают уже следующие значения. нужно так:
      f:=ln(xl)-xl+1.8;
      g:=ln(xr)-xr+1.8;
      if (f*g)<0 then writeln('функция имеет значение на [',xl:4:2,';',xr:4:2,']');
      xl:=xl+h;
      xr:=xr+h;
ну и условие выхода
until (xr > b + h);

а во-вторых, логарифм при x < 1 быстро убывает, а в окрестности x = 0 вообще бешено несется вниз, поэтому a и b нужно задавать или 0-1, или 1-10, т.к. корня на отрезке, который ты вероятнее всего задаешь, два.

значение одно в том то и дело.




Оффлайн Richi106

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [Pascal] repeat-until и for-do
« Ответ #4 : 09 Ноября 2010, 11:44:37 »
с перестановкой "if" значение совпадает с искомым. спасибо за помощь.   ;)

 

Помогите в составлении программы на Turbo Pascal,плиз!срочно!

Автор Ymni4ka

Ответов: 1
Просмотров: 5813
Последний ответ 03 Ноября 2010, 09:27:22
от testtest
Помогите составить блок-схему и программы на языке Pascal

Автор tasha1991

Ответов: 0
Просмотров: 6424
Последний ответ 09 Января 2011, 16:33:00
от tasha1991
Pascal. Вычислить значения  du/dx, пользуясь конечно-разностным соотношением

Автор Shurara

Ответов: 0
Просмотров: 6263
Последний ответ 09 Февраля 2011, 17:54:21
от Shurara
Pascal. Решить задачу Коши для ОДУ модифицированным методом Эйлера

Автор Shurara

Ответов: 1
Просмотров: 7689
Последний ответ 10 Марта 2011, 16:39:51
от lyamec
Pascal FAQ. Напишите примеры использования процедур и функций

Автор privatnebank

Ответов: 3
Просмотров: 5852
Последний ответ 19 Февраля 2010, 16:29:25
от InfStudent