Menu
Coddy logo textTech

まとめ:計算機のディスパッチ

CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 37/61。

challenge icon

チャレンジ

簡単

ディスパッチテーブルを使用して電卓を作成します。演算コードを対応する関数にマッピングする関数ポインタの配列を作成し、それを使って計算を実行します。

次のプログラムを作成してください。

  1. 2つの int パラメータを受け取り、int を返す関数ポインタ用に、Operation という名前の typedef を作成する
  2. 4つの arithmetic 関数を定義する:
    • add:a + b を returns
    • sub:a - b を returns
    • mul:a * b を returns
    • divide:a / b を returns(整数除算)
  3. main 内で dispatch table を作成する:4つの Operation 関数ポインタの array で、インデックス 0 は add、インデックス 1 は sub、インデックス 2 は mul、インデックス 3 は divide とする
  4. 3つの入力、つまり2つの整数と operation code(0-3)を読み取る
  5. operation code を使用して dispatch table をインデックス指定し、appropriate 関数を call する
  6. result を出力する

3つの入力、すなわちfirst numbersecond number、およびoperation code(add は 0、sub は 1、mul は 2、divide は 3)を受け取ります。

Output は単一の整数、つまり operation の result である必要があります。

7

入力が 10、3、1 のこの例では、operation code 1 によって dispatch table から sub が選択されるため、10 - 3 = 7 を計算します。

ここで重要なのは、array indexing を使用して function を選択することです。ifswitch ステートメントは不要です。dispatch table は次のようになります。

Operation ops[4] = {add, sub, mul, divide};

次のように function を call します:ops[code](a, b)

自分で試してみよう

#include <stdio.h>

// TODO: 関数ポインタ用の 'Operation' という typedef を作成する
// 2つの int パラメータを取り、int を返す


// TODO: 4つの算術関数を定義する: add, sub, mul, divide


int main() {
    // 入力を読み取る
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: ディスパッチテーブル(4つの Operation 関数ポインタの配列)を作成する
    // Operation ops[4] = { ... };
    
    // TODO: 操作コードを使って適切な関数を呼び出す
    // そして結果を格納する
    int result;
    
    // 結果を出力する
    printf("%d\n", result);
    
    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ