could someone translate this from c to c++, thanks #include <stdio.h> #include <
ID: 3608794 • Letter: C
Question
could someone translate this from c to c++, thanks#include <stdio.h>
#include <math.h>
int
main()
{
int s; /* switch */
double gamma;
double omega;
double tend, dt, t; /* control parameter */
int nt; /* number of steps */
int i; /*loop control*/
void euler (double*, double*, double, double,double, double);
void cromer (double*, double*, double, double,double, double);
void midpoint (double*, double*, double, double,double, double);
FILE *feuler;
FILE *fcromer;
FILE *fmidpoint;
double x, v; /* calculatings */
printf(" *driven dumpedoscillator* ");
printf(" Enter Omega: ");
scanf("%le", &omega);
printf("Enter Gamma: ");
scanf("%le", &gamma);
printf(" Enter the time forevaluation: ");
scanf("%le", &tend);
printf(" Enter the number ofintervals: ");
scanf("%d", &nt);
dt = tend / nt; /* determine dt */
tend = dt * nt; /* make sure, tend fits(rounding of dt) */
/* printf(" Enter desired method: (1)Euler (2) Euler-Cromer"); */
/* printf(" (3) Midpoint "); */
/* scanf("%d", &s); */
for (s=1; s<=3; s++) {
x=0;
v=0;
if (s==1)
feuler= fopen ("euler.out","w");
else if (s==2)
fcromer= fopen ("cromer.out", "w");
else if (s==3)
fmidpoint= fopen ("midpoint.out", "w");
else printf("not a valid option! ");
for (i=0; i <= nt; i++) {
t = i * dt;
if (s==1){
euler ( &x, &v,gamma, omega, t, dt);
/* printf("%2.4f %2.6f %2.6f ", t, x, v); */
fprintf(feuler,"%2.4f %2.6f %2.6f ", t, x, v);
} else if (s==2){
cromer ( &x, &v,gamma, omega, t, dt);
/* printf("%2.4f %2.6f %2.6f ", t, x, v); */
fprintf(fcromer,"%2.4f %2.6f %2.6f ", t, x, v);
} else if (s==3){
midpoint ( &x, &v,gamma, omega, t, dt);
/* printf("%2.4f %2.6f %2.6f ", t, x, v); */
fprintf(fmidpoint,"%2.4f %2.6f %2.6f ", t, x, v);
} else {
printf (" illegalinput! ");
}
}
if (s==1)
fclose (feuler);
else if (s==2)
fclose (fcromer);
else if (s==3)
fclose (fmidpoint);
}
}
/* Acceleration: */
double accell (double x, double gamma, double v, double omega,double t)
{
return( - x - gamma * v + sin( omega * t ));
}
/* Euler: */
void
euler (double *x, double *v, double gamma, double omega, double t,double dt)
{
double accell (double, double, double, double,double);
double xn=*x, vn=*v;
*v = vn + dt * accell( xn, vn, gamma, omega,t);
*x = xn + dt*vn;
}
/* Euler Cromer */
void
cromer (double *x, double *v, double gamma, double omega, double t,double dt)
{
double accell (double, double, double, double,double);
double xn=*x, vn=*v;
*v = vn + dt * accell ( xn, vn, gamma, omega,t);
*x = xn + dt * *v;
}
/* Midpoint Method */
void
midpoint (double *x, double *v, double gamma, double omega, doublet, double dt)
{
double accell (double, double, double, double,double);
double xn=*x, vn=*v;
*v = vn + dt * accell ( xn, vn, gamma, omega,t);
*x = xn + 0.5 * dt * (*v + vn);
}
Explanation / Answer
#include #include using namespace std;intmain(){int s; /* switch */double gamma;double omega;double tend, dt, t; /* control parameter */int nt; /* number of steps */int i; /*loop control*/void euler (double*, double*, double, double, double, double);void cromer (double*, double*, double, double, double, double);void midpoint (double*, double*, double, double, double, double);FILE *feuler;FILE *fcromer;FILE *fmidpoint;double x, v; /* calculatings */coutRelated Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.