next up previous contents
Next: B.7 プログラミング課題 Up: B.6 漸化式のプログラミング Previous: B.6.1.0.1 注意

B.6.2 $ F$ がベクトル値の場合

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


next up previous contents
Next: B.7 プログラミング課題 Up: B.6 漸化式のプログラミング Previous: B.6.1.0.1 注意
Masashi Katsurada
平成18年4月28日