Помогите, пожалуйста, перевести из Pascal в C++

Const eps = 0.001; 
Var f0,f1,f2, { члены ряда Фибоначчи }
n : word; { номер члена ряда Фибоначчи }
V, { текущее значение параметра V }
Vold, { предыдущее значение параметра V }
V1 : real; { точное значение золотого сечения }
Begin
f0:=0; f1:=1; f2:=1;
n:=1; V:=0;
Repeat
Vold:=V;
f0:=f1; f1:=f2; f2:=f0+f1;
Inc(n); V:=f2/f1;
Until abs(V-Vold)<=eps;
V1:=0.5*(1+sqrt(5));
Writeln('V = ',V:10:8,' V1 = ',V1:10:8,' n = ',n);
End

Само задание:

Золотое сечение, используемое в задачах оптимизации, определяется как предел отношения V = f(n)/f(n-1), где - два последовательных члена ряда Фибоначчи. Требуется вычислить значение eps с погрешностью, не превышающей заданного значения.


Ответы (1 шт):

Автор решения: DmitryK

Как-то так. Но в программе ошибка, в условии цикла должно быть >= eps, т.к. погрешность с каждой итерацией уменьшается. Иначе цикл заканчивается сразу после первой итерации.
И форматирование при выводе результатов не нужно - иначе не видно разницы в вычислениях.

#include <iostream>
#include <math.h>

int main()
{
    const double eps = 0.001;
    int f0 = 0, f1 = 1, f2 = 1; //  члены ряда Фибоначчи 
    int n = 1; //  номер члена ряда Фибоначчи
    double V = 0.0; // текущее значение параметра V
    double Vold; // предыдущее значение параметра V
    double V1; //  точное значение золотого сечения
    
    do
    {
        Vold = V;
        f0 = f1;
        f1 = f2; 
        f2 = f0+f1;
        n++;
        V = (double)f2 / (double)f1;
    } 
    while( fabs(V - Vold) >= eps ); // вот тут было неправильно

    V1 = 0.5 * ( 1.0 + sqrt(5) );
    printf("V = %f  V1 = %f  n = %d \n", V, V1, n);  // без форматирования
//    printf("V = %8.3f  V1 = %8.3f  n = %d \n", V, V1, n);  // с форматированием 
}
→ Ссылка