Menu
Coddy logo textTech

Repaso: Dispatch de calculadora

Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 37 de 61.

challenge icon

Desafío

Fácil

Construye una calculadora utilizando una tabla de despacho (dispatch table). Crearás un arreglo de punteros a funciones que mapea códigos de operación a sus funciones correspondientes, y luego lo usarás para realizar cálculos.

Escribe un programa que:

  1. Cree un typedef llamado Operation para un puntero a función que reciba dos parámetros int y devuelva un int
  2. Defina cuatro funciones aritméticas:
    • add — devuelve a + b
    • sub — devuelve a - b
    • mul — devuelve a * b
    • divide — devuelve a / b (división entera)
  3. En main, cree una tabla de despacho: un arreglo de 4 punteros a funciones de tipo Operation, donde el índice 0 es add, el índice 1 es sub, el índice 2 es mul y el índice 3 es divide
  4. Lea tres entradas: dos enteros y un código de operación (0-3)
  5. Use el código de operación para indexar en la tabla de despacho y llamar a la función apropiada
  6. Imprima el resultado

Recibirás tres entradas: el primer número, el segundo número y el código de operación (0 para add, 1 para sub, 2 para mul, 3 para divide).

Tu salida debe ser un único número entero—el resultado de la operación:

7

En este ejemplo con las entradas 10, 3, 1: el código de operación 1 selecciona sub de la tabla de despacho, por lo que calculamos 10 - 3 = 7.

La clave aquí es usar la indexación del arreglo para seleccionar la función—no se necesitan sentencias if o switch. Tu tabla de despacho debería verse así:

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

Luego llama a la función usando: ops[code](a, b)

Pruébalo tú mismo

#include <stdio.h>

// TODO: Crear un typedef llamado 'Operation' para un puntero de función
// que tome dos parámetros int y devuelva un int


// TODO: Definir las cuatro funciones aritméticas: add, sub, mul, divide


int main() {
    // Leer entrada
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Crear la tabla de despacho (array de 4 punteros de función Operation)
    // Operation ops[4] = { ... };
    
    // TODO: Usar el código de operación para llamar a la función apropiada
    // y almacenar el resultado
    int result;
    
    // Mostrar el resultado
    printf("%d\n", result);
    
    return 0;
}

Todas las lecciones de Object Oriented Programming