Menu
Coddy logo textTech

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

CoddyのCジャーニー「Object Oriented Programming」セクションの一部 — レッスン 37/61。

challenge icon

チャレンジ

簡単

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

以下のプログラムを作成してください:

  1. 2つの int 型パラメータを受け取り、int 型を返す関数ポインタの typedefOperation を作成します。
  2. 4つの算術関数を定義します:
    • add — a + b を返します
    • sub — a - b を返します
    • mul — a * b を返します
    • divide — a / b を返します(整数除算)
  3. main 関数内で、ディスパッチテーブルを作成します。これは4つの Operation 関数ポインタの配列で、インデックス0は add、インデックス1は sub、インデックス2は mul、インデックス3は divide とします。
  4. 3つの入力(2つの整数と、0から3の演算コード)を読み取ります。
  5. 演算コードを使用してディスパッチテーブルのインデックスを参照し、適切な関数を呼び出します。
  6. 結果を出力します。

入力として、最初の数値2番目の数値、および演算コード(0は add、1は sub、2は mul、3は divide)の3つを受け取ります。

出力は、演算結果である1つの整数にする必要があります:

7

入力が 10, 3, 1 の例では、演算コード 1 がディスパッチテーブルから sub を選択するため、10 - 3 = 7 を計算します。

ここでのポイントは、関数の選択に配列のインデックスを使用することです。if 文や switch 文は必要ありません。ディスパッチテーブルは以下のようになります:

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

その後、次のように関数を呼び出します:ops[code](a, b)

自分で試してみよう

#include <stdio.h>

// TODO: 2つのint型パラメータを受け取り、int型を返す
// 関数ポインタのtypedef 'Operation' を作成してください


// 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;
}

Object Oriented Programmingのすべてのレッスン