Форум программистов, компьютерный форум CyberForum.ru

Метод Фибоначчи - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод текста в произвольную систему счисления http://www.cyberforum.ru/cpp-beginners/thread65570.html
Задача такая (перевод с эстонского): С клавиатуры вводится: - Р - натуральное число, 0 < P < 21. - S - массив строк P-ичных чисел (т.е. P - основание системы счисления). - N - число элементов массива S. Затем выводится в начальном виде (?) и в десятичной системе. Часы, проведенные за поиском в интернете в общем и на вашем форуме в частности, результатов не принесли =(
C++ Максимум в массиве Найти максимум в массиве иего положение Добавлено через 1 минуту #include <iostream> using namespace std; int main() { int n; double array; int i, imax(0), imin(0); http://www.cyberforum.ru/cpp-beginners/thread65511.html
C++ Матрица
Доброе время суток. Создавая матрицу возникли небольшие не понятие ... Данный код выведет примерно такую матрицу... (8 это не значение, а как бы уголок матрицы) 8123 0000 0000 0000 как сделать так Чтобы значения 1 столбика, были бы такие же как и 1 строчки. 8123 1000 2000
Вычисление с заданной точностью C++
Помогите пожалуйста решить задачу на С++. Даны положительные действительные числа А, Х, Е(epsilon). В последовательности У1,У2,... ,образованной по закону У0=А; Уi=1/2(Уi-1 +Х/Уi-1) , i=1,2,3,4........? (i, i-1 --индексы У) найти первый член Уn, для которого выполнено неравенство |Уn*Уn-Уn-1*Уn-1|<Е (n, n-1 -- индекс У)
C++ Вычисление с заданой точностью http://www.cyberforum.ru/cpp-beginners/thread65494.html
Помогите пожалуйста решить задачу на С++. Даны положительные действительные числа А, Х, Е(epsilon). В последовательности У1,У2,... ,образованной по закону У0=А; Уi=1/2(Уi-1 +Х/Уi-1) , i=1,2,3,4........? (i, i-1 --индексы У) найти первый член Уn, для которого выполнено неравенство |Уn*Уn-Уn-1*Уn-1|<Е (n, n-1 -- индекс У)
C++ Отрицательный числа в rand() Как? подробнее

Показать сообщение отдельно
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
20.11.2009, 12:54     Метод Фибоначчи
Вот
Main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
#include <fstream>
#include "Methods.h"
 
void Fib(double, double, std::ofstream&);
 
int main()
{
    std::ofstream cout("rezult.txt", std::ios::out);
    setlocale(LC_ALL, "Russian");
    double a(0), b(2.5);
    Fib(a, b, cout);
    system("pause");
    return EXIT_SUCCESS;
}

Methods.h
C++
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
58
59
60
61
62
63
64
65
66
67
#define eps 1e-3
 
double Fun(double x)
{
    return (2 * x * x * x - 6 * x + 3);
}
int F(int n)
{
    int f, f1(1), f2(1), m(0);
    while(m < n - 1)
    {
        f = f1 + f2;
        f1 = f2;
        f2 = f;
        ++m;
    }
    return f1;
}
void Fib(double a, double b, std::ofstream& cout)
{
    cout<<"\n\n\n\tМетод Фибоначчи:\n\n";
    double x1, x2, _x, xf1, xf2;
    int k(0);
    int N(0);
    double fn1(1), fn2(1), fn, f = (b - a) / eps;
    while(fn1 < f)
    {
        fn = fn1 + fn2;
        fn1 = fn2;
        fn2 = fn;
        ++N;
    }
    x1 = a + (double)F(N - 2) / F(N) * (b - a) - (N&1 ? -1 : 1) * eps / F(N);
    x2 = a + (double)F(N - 1) / F(N) * (b - a) + (N&1 ? -1 : 1) * eps / F(N);
    xf1 = Fun(x1);
    xf2 = Fun(x2);
  P:
    ++k;
    if(xf1 >= xf2)
    {
        a = x1;
        x1 = x2;
        xf1 = xf2;
        x2 = a + (double)F(N - k - 1) / F(N - k) * (b - a) + ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf2 = Fun(x2); 
    }
    else
    {
        b = x2;
        x2 = x1;
        xf2 = xf1;
        x1 = a + (double)F(N - k - 2) / F(N - k) * (b - a) - ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf1 = Fun(x1);
    }
    cout<<"Итерация № "<<k<<'\n'
        <<"x1 = "<<x1<<"\t\tF(x1) = "<<xf1
        <<"\nx2 = "<<x2<<"\t\tF(x2) = "<<xf2
        <<'\n'<<std::endl;
    if(fabs(b - a) <= eps)
    {
        _x = (a + b) / 2;
        cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
            "\nКоличество итераций: "<<k;
    }
    else
        goto P;
}
 
Текущее время: 13:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru