がベクトル値の場合も、実数値の場合と基本的には変わらないが、初心
者がよく犯す間違いがあるので、特に説明する。(実数値とベクトル値でプロ
グラムの書き方を変えねばならないのは、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;
}
|