next up previous contents
Next: 30. 終りに Up: 29. C++とクラス Previous: 29.4 クラス

29.5 課題 27

cd c を実行した後で( ~/c に移動した後で )、以下の課題を やってみよ。

課題 27.1

プログラムのコマンドラインオプションに指定したオプションが -F のように - と英字(大小を区別)で指定できる場合、 オプションを全て表示するプログラムを作成せよ。

    > a.out -F -l -x -Y
    option F
    option l
    option x
    option Y

課題 27.2

次のプログラムを実行してみよ。

    #include <iostream.h>
    void test(int);
    main(){
        void (*pf)(int);
        cout << "address of test: " << (void*)test << endl;
        pf = test;
        cout << "address of pf: " << (void*)pf << endl;
        test(2);
        (*pf)(3);
        pf(4);
    }
    void test( int x ){
        cout << "number is " << x << endl;
    }
(上では関数ポインタのアドレスを出力するために、キャストを用いている。)

課題 27.3

画面に点を表示するライブラリを作ってみよう。 例えば以下のようなものである。

   ^
   |
   |                                   *
   |                                   *
   |                                   *
   |                                  *
   |                                 *
   |                               *
   |                           *
   |                      *
   |               *
   |        *
   | *
   +------------------------------------------>

これを呼び出すプログラムは以下の通りである。但し、 ライブラリ側ではどのような関数が渡されて来るかは 分からないものとし、実際の点を示す関数 func() は 自分で考えよ。

下のプログラムに対して、 draw()関数を含む別のモジュールを作成せよ。また、 draw()関数は、描画する x,y 方向の広さと、描画する 関数のアドレスを渡すものとする。

    #include <iostream.h>
    #include "draw.h"
    int func( int );
    main(){
        int max_x = 40; int max_y = 20;
        draw( max_x, max_y, func );
    }
    int func( int x ){
        /* 関数は自分で考えよ */
        /* 例 return x*x; */
    }

draw() 内部では、$x=0$ から $x=39$ まで funx(x) を 呼び出し、それが $y=0$ から $y=19$ までに入っていれば、 適当な配列にその位置を記憶させ、ループで回し、最後に 画面に出力して終了すれば良いだろう。

作成したプログラムをメイルで creport まで送りなさい。題は、kadai27 とする事。 但し、それぞれのモジュールが 分かるようにして送りなさい。



Noriyo Kanayama