29.1 課題 27

cd c を実行した後で( ~/c に移動した後で )、以下の課題を やってみよ。(講義 28 に対する課題も含んでいる。)

課題 27.1

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

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

課題 27.2

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

    #include <stdio.h>
    void test(int);
    main(){
        void (*pf)();
        printf("address of test: %x\n", test);
        pf = test;
        printf("address of pf: %x\n", pf);
        test(2);
        (*pf)(3);
        pf(4);
    }
    void test( int x ){
        printf("number is %d\n", x);
    }

課題 27.3

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

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

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

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

    #include <stdio.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 とする事。 但し、それぞれのモジュールが 分かるようにして送りなさい。



最初のページ 戻る 目次
Hiroyasu Asami