#include #include int main (void) { int i; float g, L, angle, theta, x, u, xminus, uminus, xplus, uplus, dxdt, dudt, t; /* 変数を宣言する */ FILE *fp; g = 9.8; /* 定数を代入する */ printf ("Length [m], angle [deg.]?\n"); scanf ("%f,%f", &L, &angle); /* 条件を入力する */ theta = 3.14159 / 180.0 * angle; x = L * theta; /* 初期値を計算する */ u = 0.0; fp = fopen ("output.txt", "w"); /* ファイルを開く */ fprintf (fp, "%9.3f %9.3f\n", 0.0, angle); /* 結果をファイルに出力する */ for (i=1; i<=1000; i++) /* 同じ処理を1000回繰り返す */ { dxdt = u; /* 時間微分を計算する */ theta = x / L; /* 角度を計算する */ dudt = - g * sin (theta); /* 時間微分を計算する */ if (i == 1) /* 次の時刻の値を計算する */ { xplus = x + 0.01 * dxdt; /* 初回だけ計算方法を変える */ uplus = u + 0.01 * dudt; }else{ xplus = xminus + 2. * 0.01 * dxdt; uplus = uminus + 2. * 0.01 * dudt; } xminus = x; /* 次の時刻に進むために */ uminus = u; /* xをx^-に代入する */ x = xplus; /* 次の時刻に進むために */ u = uplus; /* x^+をxに代入する */ t = 0.01 * i; /* 経過時間を計算する */ theta = x / L; /* 角度を計算する */ angle = 180.0 / 3.14159 * theta; fprintf (fp, "%9.3f %9.3f\n", t, angle); /* 結果をファイルに出力する */ } fclose (fp); /* ファイルを閉じる */ return 0; }