Menu
CoddyTech

Revisão: Despacho da 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 para funções que associa códigos de operação às 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 para 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 para funções 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 números inteiros e um código de operação (0-3)
  5. Usa o código de operação para indexar a tabela de despacho e chamar 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 número 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 segredo 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 assim:

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() {
    // Leia 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;
    
    // Exiba 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