Menu
Coddy logo textTech

Zusammenfassung: Calculator Dispatch

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 37 von 61.

challenge icon

Aufgabe

Einfach

Erstellen Sie einen Taschenrechner mithilfe einer Dispatch-Tabelle. Sie erstellen ein Array von Funktionszeigern, das Operationscodes ihren entsprechenden Funktionen zuordnet, und verwenden dieses dann zur Durchführung von Berechnungen.

Schreiben Sie ein Programm, das:

  1. Einen typedef namens Operation für einen Funktionszeiger erstellt, der zwei int-Parameter entgegennimmt und ein int zurückgibt
  2. Vier arithmetische Funktionen definiert:
    • add — gibt a + b zurück
    • sub — gibt a - b zurück
    • mul — gibt a * b zurück
    • divide — gibt a / b zurück (Ganzzahldivision)
  3. In main eine Dispatch-Tabelle erstellt: ein Array aus 4 Operation-Funktionszeigern, wobei Index 0 add, Index 1 sub, Index 2 mul und Index 3 divide ist
  4. Drei Eingaben liest: zwei Ganzzahlen und einen Operationscode (0-3)
  5. Den Operationscode verwendet, um in die Dispatch-Tabelle zu indizieren und die entsprechende Funktion aufzurufen
  6. Das Ergebnis ausgibt

Sie erhalten drei Eingaben: die erste Zahl, die zweite Zahl und den Operationscode (0 für add, 1 für sub, 2 für mul, 3 für divide).

Ihre Ausgabe sollte eine einzelne Ganzzahl sein – das Ergebnis der Operation:

7

In diesem Beispiel mit den Eingaben 10, 3, 1: Der Operationscode 1 wählt sub aus der Dispatch-Tabelle aus, also berechnen wir 10 - 3 = 7.

Der Schlüssel hierbei ist die Verwendung der Array-Indizierung zur Auswahl der Funktion – es sind keine if- oder switch-Anweisungen erforderlich. Ihre Dispatch-Tabelle sollte wie folgt aussehen:

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

Rufen Sie die Funktion dann auf mit: ops[code](a, b)

Probier es selbst

#include <stdio.h>

// TODO: Erstelle einen Typedef namens 'Operation' für einen Funktionszeiger,
// der zwei int-Parameter entgegennimmt und einen int zurückgibt


// TODO: Definiere die vier arithmetischen Funktionen: add, sub, mul, divide


int main() {
    // Eingabe lesen
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Erstelle die Dispatch-Tabelle (Array aus 4 Operation-Funktionszeigern)
    // Operation ops[4] = { ... };
    
    // TODO: Verwende den Operationscode, um die entsprechende Funktion aufzurufen
    // und speichere das Ergebnis
    int result;
    
    // Ergebnis ausgeben
    printf("%d\n", result);
    
    return 0;
}

Alle Lektionen in Object Oriented Programming