Menu
Coddy logo textTech

Özet: Hesap Makinesi Yönlendirme

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 37 / 61.

challenge icon

Görev

Kolay

Bir sevk tablosu (dispatch table) kullanarak bir hesap makinesi oluşturun. İşlem kodlarını ilgili fonksiyonlarıyla eşleştiren bir fonksiyon göstericileri (function pointers) dizisi oluşturacak ve ardından bunu hesaplamalar yapmak için kullanacaksınız.

Şunları yapan bir program yazın:

  1. İki int parametresi alan ve bir int döndüren bir fonksiyon göstericisi için Operation adında bir typedef oluşturur
  2. Dört aritmetik fonksiyon tanımlar:
    • add — a + b döndürür
    • sub — a - b döndürür
    • mul — a * b döndürür
    • divide — a / b döndürür (tamsayı bölmesi)
  3. main içinde bir sevk tablosu oluşturur: İndeks 0'ın add, indeks 1'in sub, indeks 2'in mul ve indeks 3'ün divide olduğu 4 Operation fonksiyon göstericisinden oluşan bir dizi
  4. Üç girdi okur: iki tamsayı ve bir işlem kodu (0-3)
  5. İşlem kodunu sevk tablosunda indeksleme yapmak ve uygun fonksiyonu çağırmak için kullanır
  6. Sonucu yazdırır

Üç girdi alacaksınız: birinci sayı, ikinci sayı ve işlem kodu (add için 0, sub için 1, mul için 2, divide için 3).

Çıktınız tek bir tamsayı — işlemin sonucu — olmalıdır:

7

10, 3, 1 girdilerinin olduğu bu örnekte: işlem kodu 1, sevk tablosundan sub fonksiyonunu seçer, böylece 10 - 3 = 7 hesaplarız.

Buradaki kilit nokta, fonksiyonu seçmek için dizi indekslemeyi kullanmaktır — if veya switch ifadelerine gerek yoktur. Sevk tablonuz şuna benzemelidir:

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

Ardından fonksiyonu şu şekilde çağırın: ops[code](a, b)

Kendin dene

#include <stdio.h>

// TODO: İki adet int parametre alan ve bir int döndüren
// 'Operation' adında bir fonksiyon göstericisi (function pointer) için typedef oluşturun


// TODO: Dört aritmetik fonksiyonu tanımlayın: add, sub, mul, divide


int main() {
    // Girdiyi oku
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: Gönderim tablosunu (4 Operation fonksiyon göstericisinden oluşan dizi) oluşturun
    // Operation ops[4] = { ... };
    
    // TODO: Uygun fonksiyonu çağırmak için işlem kodunu kullanın
    // ve sonucu saklayın
    int result;
    
    // Sonucu yazdır
    printf("%d\n", result);
    
    return 0;
}

Object Oriented Programming bölümündeki tüm dersler