Menu
Coddy logo textTech

Recapitulação: Dispatch de Calculadora

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 37 de 61.

challenge icon

Desafio

Fácil

Construa uma calculadora usando uma tabela de despacho (dispatch table). Você criará um array de ponteiros de função que mapeia códigos de operação para suas funções correspondentes e, em seguida, o usará para realizar cálculos.

Escreva um programa que:

  1. Crie um typedef chamado Operation para um ponteiro de função que recebe dois parâmetros int e retorna um int
  2. Defina quatro funções aritméticas:
    • add — retorna a + b
    • sub — retorna a - b
    • mul — retorna a * b
    • divide — retorna a / b (divisão inteira)
  3. No main, crie uma tabela de despacho: um array de 4 ponteiros de função Operation, onde o índice 0 é add, o índice 1 é sub, o índice 2 é mul e o índice 3 é divide
  4. Leia três entradas: dois inteiros e um código de operação (0-3)
  5. Use o código de operação para indexar a tabela de despacho e chamar a função apropriada
  6. Imprima o resultado

Você receberá três entradas: o primeiro número, o segundo número e o código de operação (0 para add, 1 para sub, 2 para mul, 3 para divide).

Sua saída deve ser um único inteiro — o resultado da operação:

7

Neste exemplo com as entradas 10, 3, 1: o código de operação 1 seleciona sub da tabela de despacho, então calculamos 10 - 3 = 7.

A chave aqui é usar a indexação do array para selecionar a função — sem a necessidade de comandos if ou switch. Sua tabela de despacho deve se parecer com:

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

Em seguida, chame a função usando: ops[code](a, b)

Experimente você mesmo

#include <stdio.h>

// TODO: Crie um typedef chamado 'Operation' para um ponteiro de função
// que recebe dois parâmetros int e retorna um int


// TODO: Defina as quatro funções aritméticas: add, sub, mul, divide


int main() {
    // Ler entrada
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Crie a tabela de despacho (array de 4 ponteiros de função Operation)
    // Operation ops[4] = { ... };
    
    // TODO: Use o código da operação para chamar a função apropriada
    // e armazene o resultado
    int result;
    
    // Exibir o resultado
    printf("%d\n", result);
    
    return 0;
}

Todas as lições de Object Oriented Programming