C 言語の fopen(), flose(), fprintf(), fscanf() を使うことでファイル入出力ができる。 「簡単なファイル入出力」 を見よ。
toi2.c |
/* * toi2.c --- euler1ex1.c (Euler method for Malthusian model) */ #include <stdio.h> #include <stdlib.h> double k = 1.0; int main(void) { int i, N; double t, x, dt; double f(double, double), x0; double Tmax; FILE *of; if ((of = fopen("euler1ex1.data", "w")) == NULL) { fprintf(stderr, "cannot open euler1ex1.data"); exit(1); } // 初期値 x0 = 1.0; // 最終時刻 Tmax = 1.0; // 時間刻み printf("# N: "); scanf("%d", &N); fprintf(of, "# N = %d\n", N); dt = Tmax / N; // 初期値 t = 0.0; x = x0; printf("# t x\n"); fprintf(of, "# t x\n"); printf("%f %f\n", t, x); fprintf(of, "%f %f\n", t, x); // Euler 法 for (i = 0; i < N; i++) { x += dt * f(x, t); t = (i + 1) * dt; printf("%f %f\n", t, x); fprintf(of, "%f %f\n", t, x); } fclose(of); return 0; } double f(double x, double t) { return k * x; } |
C++言語の場合は、 ifstream, ofstream, », « などを使ってファイル入出力ができる。 「簡単なファイル入出力」 を見よ。
toi2.cpp |
/* * toi2.cpp --- euler1ex1.c (Euler method for Malthusian model) */ #include <iostream> #include <fstream> using namespace std; double k = 1.0; int main(void) { int i, N; double t, x, dt; double f(double, double), x0; double Tmax; ofstream ofs("euler1ex1.data"); if (!ofs) { cerr << "cannot open euler1ex1.data" << endl; exit(1); } // 初期値 x0 = 1.0; // 最終時刻 Tmax = 1.0; // 時間刻み cout << "# N: "; cin >> N; ofs << "# N = " << N << endl; dt = Tmax / N; // 初期値 t = 0.0; x = x0; cout << "# t x" << endl; ofs << "# t x" << endl; cout << fixed; cout << t << " " << x << endl; ofs << fixed; ofs << t << " " << x << endl; // Euler 法 for (i = 0; i < N; i++) { x += dt * f(x, t); t = (i + 1) * dt; cout << t << " " << x << endl; ofs << t << " " << x << endl; } ofs.close(); return 0; } double f(double x, double t) { return k * x; } |