Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 21:05   #1
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию Метод половинного деления

Дана функция, дано а и b и точность e. Нужно решить её методом половинного деления.

Код:
program mdp;
        function f(x: real): real;
        begin
             f:=4*(sqr(x))-16*x-9;
        end;
var  a,b,e,c,x:real;
begin
     writeln ('a,b,e');
     read(a,b,e);
     c:=(a+b)/2;
     while (abs(b-a)<=2*e) do
     begin
          if (f(c)=0)  then writeln(c) else
          begin
               if (f(a)*f(c)<0) then
               b:=c
               else
               a:=c;
          end;
     c:=(a+b)/2;
     writeln ('x=',c)  ;
     readln;
     end;

end.
Что не так? Подскажите.
serhan вне форума Ответить с цитированием
Старый 01.10.2011, 21:15   #2
AnKor94
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от serhan Посмотреть сообщение
Дана функция, дано а и b и точность e. Нужно решить её методом половинного деления.
Кого решить? Функцию?? Как можно решить функцию?

Цитата:
Сообщение от serhan Посмотреть сообщение
Что не так? Подскажите.
А что-то не так? Компилируется вроде. Запускается, пишет непонятные буквы, чего-то спрашивает, считает, выдаёт. Что не так-то, действительно?
141.116.168.135 : damiu2d449028.dami.army.pentagon.mi l (.MIL | US Military)

Последний раз редактировалось AnKor94; 01.10.2011 в 21:18.
AnKor94 вне форума Ответить с цитированием
Старый 01.10.2011, 23:39   #3
9i.
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 103
По умолчанию

Код:
(abs(b-a)<=2*e)
здесь должно быть больше или равно, а не меньше или равно
9i. вне форума Ответить с цитированием
Старый 01.10.2011, 23:53   #4
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию

Все равно чтото зацикливается...
serhan вне форума Ответить с цитированием
Старый 02.10.2011, 00:06   #5
9i.
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 103
По умолчанию

в каком смысле зацикливается?
Код:
     writeln ('x=',c)  ;
                readln;
это и должно быть в цикле?
или вам нужен только конечный результат?


Код:
program mdp;
        function f(x: real): real;
        begin
           f:=4*(sqr(x))-16*x-9;
        end;
var  a,b,e,c,x:real;
begin
     writeln ('a,b,e');
     read(a,b,e);
     c:=(a+b)/2;
     while (abs(f(c))>e) do
     begin
          if f(c)=0  then writeln(c)
          else
               if f(c)>0 then
               	b:=c
               else
               	a:=c;

     c:=(a+b)/2;
     end;
     writeln ('x=',c:5:3);
     readln;
     readln
end.
так вроде работает

Последний раз редактировалось 9i.; 02.10.2011 в 00:22.
9i. вне форума Ответить с цитированием
Старый 02.10.2011, 01:34   #6
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию

У меня вообще чтото так не работает. Ввожу а,в,е ентер и все - виснет
serhan вне форума Ответить с цитированием
Старый 02.10.2011, 01:40   #7
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

попробуйте посмотреть под отладчиком, может тогда все встанет на свои места?
_Engine_ вне форума Ответить с цитированием
Старый 02.10.2011, 01:40   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А вводите как? Через пробел?
Я бы советовал избегать ввода с помощью readln(a,b,c,еще 10050 переменных), лучше по одной.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.10.2011, 02:26   #9
9i.
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 103
По умолчанию

а какие данные вы вводите??
9i. вне форума Ответить с цитированием
Старый 02.10.2011, 10:39   #10
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию

Дано система уравнений.
4*(х^2)-16*x-9=0
(e^x)-e^(-3*x)-4=0
(x^5)-x-1=0
Вот её нужно решить методом половинного деления.
Можете под сказать какой код сюда нужно?
И ещо такой вопрос, вот есть три графика функций, как узнать где а и где b?

Вот код, на котором я остановился.
Код:
program mdp;
function f(x: real): real;
begin
f:=4*x*x-16*x-9;
{f:=exp(x)-exp(-3*x)-4};
{f:=x*x*x*x*x-x-1};
end;
var
a, b, e, c, x: real;
begin
write('a=');
read(a);
write('b=');
read(b);
write ('e=');
read(e);
c:=(a+b)/2;
while abs(b-a)>e do
begin
if f(a)*f(c)<0 then
b:=c
else
a:=c;
c:=(a+b)/2;
end;
x:=(a+b)/2;
writeln ('x=',x:3:3,' f(x)=',f(x):4:4);
readln;
end.

Последний раз редактировалось serhan; 02.10.2011 в 15:55.
serhan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
Метод половинного деления Hichcog Помощь студентам 0 13.12.2010 17:33
метод половинного деления(бисекции) Раймир Общие вопросы Delphi 1 01.05.2010 17:21
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08