Menu
Coddy logo textTech

Итоги: Диспетчеризация калькулятора

Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 37 из 61.

challenge icon

Задание

Легко

Создайте калькулятор с помощью таблицы dispatch. Вы создадите массив указателей на функции, который сопоставляет коды операций с соответствующими функциями, а затем используете его для выполнения вычислений.

Напишите программу, которая:

  1. Создаёт typedef с именем Operation для указателя на функцию, которая принимает два параметра int и возвращает int
  2. Определяет четыре арифметические функции:
    • add: возвращает a + b
    • sub: возвращает a - b
    • mul: возвращает a * b
    • divide: возвращает a / b (целочисленное деление)
  3. В main создаёт таблицу dispatch: массив из 4 указателей на функции Operation, где индекс 0 — это add, индекс 1 — это sub, индекс 2 — это mul, а индекс 3 — это divide
  4. Считывает три входных значения: два целых числа и код операции (0-3)
  5. Использует код операции для обращения по индексу к таблице dispatch и вызова соответствующей функции
  6. Выводит результат

Вы получите три входных значения: первое число, второе число и код операции (0 для add, 1 для sub, 2 для mul, 3 для divide).

Ваша программа должна вывести одно целое число: результат операции:

7

В этом примере с входными значениями 10, 3, 1 код операции 1 выбирает sub из таблицы dispatch, поэтому мы вычисляем 10 - 3 = 7.

Главная идея заключается в использовании индексации массива для выбора функции: операторы if или switch не нужны. Ваша таблица dispatch должна выглядеть так:

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

Затем вызовите функцию с помощью: ops[code](a, b)

Попробуйте сами

#include <stdio.h>

// TODO: Создайте typedef с именем 'Operation' для указателя на функцию
// который принимает два параметра int и возвращает int


// TODO: Определите четыре арифметические функции: 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