 
 
 
 
 
 
 
  
 がベクトル値の場合
 がベクトル値の場合
 がベクトル値の場合も、実数値の場合と基本的には変わらないが、初心
者がよく犯す間違いがあるので、特に説明する。(実数値とベクトル値でプロ
グラムの書き方を変えねばならないのは、C 言語がベクトルを基本的なデータ
として扱えないためであるとも言える。実際、C++ 言語でベクトルを扱うクラ
ス・ライブラリィを適当に作れば、前小節のような感じでプログラミングでき
る。)
 がベクトル値の場合も、実数値の場合と基本的には変わらないが、初心
者がよく犯す間違いがあるので、特に説明する。(実数値とベクトル値でプロ
グラムの書き方を変えねばならないのは、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;
}
 | 
 
 
 
 
 
 
