Menu
Coddy logo textTech

Recapitulação: Dispatch de Calculadora

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 37 de 61.

challenge icon

Desafio

Fácil

Crie uma calculadora usando uma tabela de despacho. 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. Cria um typedef chamado Operation para um ponteiro de função que recebe dois parâmetros int e retorna um int
  2. Define 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. Em main, cria uma tabela de despacho: um array de 4 ponteiros de função Operation, em que o índice 0 é add, o índice 1 é sub, o índice 2 é mul e o índice 3 é divide
  4. Lê três entradas: dois inteiros e um código de operação (0-3)
  5. Usa o código de operação como índice na tabela de despacho e chama a função apropriada
  6. Imprime 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 na tabela de despacho; então, calculamos 10 - 3 = 7.

O ponto principal aqui é usar a indexação de array para selecionar a função: não são necessárias instruções if ou switch. Sua tabela de despacho deve ser semelhante a:

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 a 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;
    
    // Imprimir o resultado
    printf("%d\n", result);
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online