Przekazanie wartości z funkcji do main - ciągły błąd

0

Witam,
posiłkując się tym ćwiczeniem - http://ww2.odu.edu/~agodunov/computing/programs/cpp/ode02.cpp - napisałem programik. Jednak tak jak widać na dole, autorowi zwraca dobre wartości, mnie natomiast same 0.

Myślę że błąd leży w deklaracji funkcji a potem przekazaniu argumentu ale mogę się mylić także jakby ktoś rzucił na to profesjonalnym okiem i pomógł naprawić mi błąd to byłbym wdzięczny.

Gdy chcę zadeklarować funkcję w taki sposób jak autor to dostaję błąd - parameter name omitted, expected ).

Mianowicie chodzi o ten fragment

double rk4_2nd(double(*d1x)(double, double, double), double(*d2x)(double, double, double),double ti, double xi, double vi, double tf, double& xf, double& vf)

Gdy usunąłem & to dostawałem cały czas 0,0...

Kod autora widać na górzę w linku, mój wrzucam poniżej - może jest inna przyczyna niż deklarowanie tej funkcji dlaczego dostaje same zera? Pozdrawiam i proszę o pomoc

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//definition of x'(t) which is f1(t,x,x') = x' by definition (velocity)

double f1(double t, double x, double v)
{
    double d1x;
    d1x = v;
    return d1x;
}

//definition of x''(t)=f2(t,x,x') which is acceleration;

double f2(double t, double x, double v)
{
    double d2x;
    d2x = -1*x;
    return d2x;
}

double rk4_2nd(double(*d1x)(double, double, double), double(*d2x)(double, double, double),double ti, double xi, double vi, double tf, double& xf, double& vf)
{
    double h,t,k1x,k2x,k3x,k4x,k1v,k2v,k3v,k4v;
    double xf, vf;
    
    h=tf-ti;
    t=ti;
    
    k1x = h*d1x(t,xi,vi);
    k1v = h*d2x(t,xi,vi);
    
    k2x = h*d1x((t+h)/2, (xi+k1x)/2, (vi+k1v)/2);
    k2v = h*d2x((t+h)/2, (xi+k1x)/2, (vi+k1v)/2);
    
    k3x = h*d1x((t+h)/2, (xi+k2x)/2, (vi+k2v)/2);
    k3v = h*d2x((t+h)/2, (xi+k2x)/2, (vi+k2v)/2);
    
    k4x = h*d1x(t+h, xi+k3x, vi+k3v);
    k4v = h*d2x(t+h, xi+k3x, vi+k3v);
    
    xf = xi + ((k1x + 2*(k2x+k3x) + k4x)/6);
    vf = vi + ((k1v + 2*(k2v+k3v) + k4v)/6);
    
    return 0;
}


int main()
{
    double ti,xi,vi,xf,vf,tf,dt,tmax;
    ti = 0.0; //initial value for time variable
    xi = 0.0;
    vi = 1.0;
    dt = 0.1;
    tmax = 12.0;
    printf("Please input initial displacement value (IT MUST BE DIFFERENT THAN 0)\n");
    scanf("%lf", &xi);
    printf("Please input initial velocity value\n");
    scanf("%lf", &vi); //scanning for initial value of velocity
    printf("Please input step size of integration (the less the better)\n");
    scanf("%lf", &dt); //scanning for step size of integration (dt)
    printf("Please input the maximum value of t till which the program should work\n");
    scanf("%lf", &tmax); //scanning for the end of integration interval
    while (ti<=tmax)
    {
        tf=ti+dt;
        rk4_2nd(f1, f2, ti, xi, vi, tf, xf, vf);
        printf("%lf\t\t\t\t\t%lf\t\t\t\t\t%lf", tf, xf, vf);
        ti=tf;
        xi=xf;
        vi=vf;
    }
    return 0;
}
1

Kod jest w C++, a Ty próbujesz pisać w C. C nie ma referencji. Zamień te referencje wskaźniki i dostęp do nich również:

  1. double& xfdouble* xf
  2. xf*xf (lub (*xf) jeśli gdzieś to powoduje błędy)
  3. przesłaniasz nazwy (deklarujesz nową zmienną xf wewnątrz funkcji, która przyjmuje parametr nazwany xf)

1 użytkowników online, w tym zalogowanych: 0, gości: 1