Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
demidrolll
131 / 130 / 60
Регистрация: 10.12.2008
Сообщений: 286
1

Сделать эту программу с помощью рекурсии

25.12.2008, 20:13. Просмотров 520. Ответов 0
Метки нет (Все метки)

Необходимо с помощью рекурсивной функции уточнить корень уравнения
F(x)=(x - 1) * Exp(ln(0.5)*x) методом половинного деления.
Метод половинного деления работает по алгоритму: сравниваются знаки на концах исходного отрезка, если они различны, отрезок делится пополам. Выбирается та половина, на концах которой знаки у функции различны, и снова делится пополам. Процедура деления выполняется до тех пор, пока длина очередного отрезка не окажется меньше, чем допустимая погрешность. После этого выводится середина знакопеременного кусочка. Метод работает быстрее первого, но требует уверенности, что на исходном отрезке есть ровно один нуль, и по разные стороны от нуля функция имеет разные знаки.
В этой программе представлен сам метод половинного деления

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Program xxx;
Uses
 crt;
Function F(x: Real): Real;
begin
  F := (x - 1) * Exp(ln(0.5)*x);
end;
 
Var 
  Eps, f1, f2, x, x1, x2, A, B : Real;
  N, i: Integer;
Begin
  ClrScr;
  Repeat
    WriteLn('Wwedite granici interwala: ');
    Write('A = '); ReadLn(A);
    Write('B = '); ReadLn(b);
    if A >= B then WriteLn('Granici interwala zadani nekorrectno');
  Until A < B;
  WriteLn;
  Repeat
    WriteLn('Ukagite tochnost wichisleniya');
    Write('Eps = '); ReadLn(Eps);
    if Eps <= 0 then WriteLn('Eps moget imet tolko pologitelnoe znachenie');
  Until Eps > 0;
  WriteLn;
 
 
  WriteLn('Metod polowinnogo deleniya:');
  N := 0;
  x1 := A;
  x2 := B;
  f1 := F(x1);
  f2 := F(x2);
  if F(A) * F(B) >= 0 then
  begin
    WriteLn('Newozmozhno naity nol funkcii');
  end
  else
  Repeat
    x := (x1 + x2) / 2;
    if f1*F(x) <= 0 then
    begin
      x2 := x;
      f2 := F(x);
    end;
    if f2*F(x) <= 0 then
    begin
      x1 := x;
      f1 := F(x);
    end;
    inc(N);
  Until (x2 - x1) < eps;
  WriteLn('Nol funccii na x = ', (x2 + x1)/2:12:8);
  WriteLn('Wipolneno ', N, ' shagow.');
  ReadLn;
End.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2008, 20:13
Ответы с готовыми решениями:

Программа с помощью рекурсии
Написать программу, которая по заданным натуральным значениям и вычисляет...

Вычислить сумму ряда с помощью рекурсии
Помогите решить задачу с помощью рекурсии. Вот код: var i, n: integer; ...

Найти с помощью рекурсии максимальный элемент вектора
Необходимо найти с помощью рекурсии максимальный элемент вектора V,...

Является ли данное слово палиндромом (с помощью рекурсии)
Помогите пожалуйста. написать прогу. Является ли данное слово палиндромом (с...

Найти максимальное и минимальное число массива с помощью рекурсии
Дан массив , Найти максимальное и минимальное число с помощью рекурсии

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2008, 20:13

Проверить с помощью рекурсии, можно ли заданную последовательность цифр четной длины составить из одного комплекта домино.
Проверить с помощью рекурсии, можно ли заданную последовательность цифр четной...

Нужно доработать программу по рекурсии
Извлечь корень m-ой степени из числа с помощью разложения формула на рисунке...

составьте эту программу в цикле while
programm pr4; var F,T,I: integer; begin For t:=-7 to 14 do begin F:=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru