Menu
Coddy logo textTech

Riepilogo: dispatch della calcolatrice

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 37 di 61.

challenge icon

Sfida

Facile

Crea una calcolatrice usando una tabella di dispatch. Creerai un array di puntatori a funzione che associa i codici delle operazioni alle rispettive funzioni, quindi lo userai per eseguire i calcoli.

Scrivi un programma che:

  1. Crei un typedef chiamato Operation per un puntatore a funzione che accetta due parametri int e restituisce un int
  2. Definisca quattro funzioni aritmetiche:
    • add: restituisce a + b
    • sub: restituisce a - b
    • mul: restituisce a * b
    • divide: restituisce a / b (divisione intera)
  3. In main, crei una tabella di dispatch: un array di 4 puntatori a funzione Operation, dove l'indice 0 corrisponde a add, l'indice 1 a sub, l'indice 2 a mul e l'indice 3 a divide
  4. Legga tre input: due interi e un codice operazione (0-3)
  5. Usi il codice operazione come indice nella tabella di dispatch e chiami la funzione appropriata
  6. Stampi il risultato

Riceverai tre input: il primo numero, il secondo numero e il codice operazione (0 per add, 1 per sub, 2 per mul, 3 per divide).

L'output dovrà essere un singolo intero: il risultato dell'operazione:

7

In questo esempio, con gli input 10, 3, 1: il codice operazione 1 seleziona sub dalla tabella di dispatch, quindi calcoliamo 10 - 3 = 7.

Il punto chiave è usare l'indicizzazione dell'array per selezionare la funzione: non servono istruzioni if o switch. La tua tabella di dispatch dovrebbe essere simile a:

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

Poi chiama la funzione usando: ops[code](a, b)

Provalo tu

#include <stdio.h>

// TODO: Crea un typedef chiamato 'Operation' per un puntatore a funzione
// che accetta due parametri int e restituisce un int


// TODO: Definisci le quattro funzioni aritmetiche: add, sub, mul, divide


int main() {
    // Leggi l'input
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Crea la tabella di dispatch (un array di 4 puntatori a funzione Operation)
    // Operation ops[4] = { ... };
    
    // TODO: Usa il codice dell'operazione per chiamare la funzione appropriata
    // e memorizza il risultato
    int result;
    
    // Stampa il risultato
    printf("%d\n", result);
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online