Menu
Coddy logo textTech

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

Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 37 из 61.

challenge icon

Задание

Легко

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

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

  1. Создает typedef с именем Operation для указателя на функцию, которая принимает два параметра типа int и возвращает int
  2. Определяет четыре арифметические функции:
    • 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. Считывает три входных значения: два целых числа и код операции (0-3)
  5. Использует код операции для индексации в таблице переходов и вызова соответствующей функции
  6. Выводит результат

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

Ваш вывод должен представлять собой одно целое число — результат операции:

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: Создайте 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;
}

Все уроки раздела Object Oriented Programming