Menu
Coddy logo textTech

Repaso: Dispatch de calculadora

Parte de la sección Programación Orientada a Objetos 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. Crearás un arreglo de punteros a funciones que asigna códigos de operación a sus funciones correspondientes y luego lo utilizarás para realizar cálculos.

Escribe un programa que:

  1. Cree un typedef llamado Operation para un puntero a función que recibe dos parámetros int y devuelve 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 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. Utilice el código de operación para indexar la tabla de despacho y llamar a la función correspondiente
  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 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, así que calculamos 10 - 3 = 7.

La clave aquí es utilizar la indexación de arreglos para seleccionar la función: no se necesitan sentencias if ni switch. Tu tabla de despacho debería verse así:

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

Después, llama a la función utilizando: ops[code](a, b)

Pruébalo tú mismo

#include <stdio.h>

// TODO: Crea un typedef llamado 'Operation' para un puntero a función
// que toma dos parámetros int y devuelve un int


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


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

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online