がベクトル値の場合も、実数値の場合と基本的には変わらないが、初心 者がよく犯す間違いがあるので、特に説明する。(実数値とベクトル値でプロ グラムの書き方を変えねばならないのは、C 言語がベクトルを基本的なデータ として扱えないためであるとも言える。実際、C++ 言語でベクトルを扱うクラ ス・ライブラリィを適当に作れば、前小節のような感じでプログラミングでき る。)
まず、間違いのあるプログラムから。
間違いのあるプログラム |
#include <stdio.h> #define N 100 int main() { int j; double a, b, F(double, double), G(double, double); printf("a[0], b[0]: "); scanf("%lf %lf", &a, &b); for (j = 0; j < N; j++) { /* ここに間違いがある!真似をしてはダメ!! */ a = F(a, b); b = G(a, b); printf("(a[%d],b[%d])=(%g,%g)\n", j+1, j+1, a, b); } return 0; } double F(double x, double y) { return x / 2 + y / 3 + 1.0; } double G(double x, double y) { return - x / 3 + y / 2 - 0.5; } |
正しくするには、例えば
正しいプログラム |
#include <stdio.h> #define N 100 int main() { int j; double a, b, newa, newb, F(double, double), G(double, double); printf("a[0], b[0]: "); scanf("%lf %lf", &a, &b); for (j = 0; j < N; j++) { newa = F(a, b); newb = G(a, b); a = newa; b = newb; printf("(a[%d],b[%d])=(%g,%g)\n", j+1, j+1, a, b); } return 0; } double F(double x, double y) { return x / 2 + y / 3 + 1.0; } double G(double x, double y) { return - x / 3 + y / 2 - 0.5; } |