Menu
Coddy logo textTech

Fonksiyonları Argüman Olarak Geçirme

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 61.

İşaretçi fonksiyonların en güçlü kullanımlarından biri, onları diğer fonksiyonlara bağımsız değişken olarak geçirmektir. Bu, kodunu değiştirmeden bir fonksiyona özel davranış eklemenizi sağlar: bazen geri çağırma olarak adlandırılan bir teknik.

İki sayı üzerinde hesaplama yapan bir fonksiyonu düşünün. İşlemi sabit olarak kodlamak yerine, gerçekleştirilecek işlemi tanımlayan bir fonksiyon işaretçisini kabul edebilirsiniz:

typedef int (*Operation)(int, int);

int compute(int a, int b, Operation op) {
    return op(a, b);
}

compute işlevi toplama mı, çıkarma mı yoksa tamamen başka bir işlem mi yaptığını bilmez. Kendisine geçirilen işlevi çağırır:

int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }

int main() {
    printf("%d\n", compute(5, 3, add));       // Çıktı: 8
    printf("%d\n", compute(5, 3, multiply));  // Çıktı: 15
    return 0;
}

Aynı compute işlevinin, hangi işlevi geçirdiğimize bağlı olarak farklı sonuçlar ürettiğine dikkat edin. Bu kalıp, esnek ve yeniden kullanılabilir kod yazmanın temelidir. Yapıyı bir kez yazarsınız ve işlevinizin kullanıcıları ihtiyaç duydukları özel mantığı sağlar.

challenge icon

Görev

Kolay

İki tamsayı ve bir işlem kodu alan, işlemi sayılara sırayla iki kez uygulayan ve son sonucu döndüren bir apply_twice fonksiyonu yazın.

Fonksiyonunuz, hangi işlemin kullanılacağını belirleyen bir işlem kodu alacaktır. İşlem fonksiyonlarını çözümünüzün içinde tanımlamalı ve bunları bir fonksiyon işaretçisi kabul eden yardımcı compute fonksiyonuna geçirmelisiniz.

Not: yalnızca fonksiyonlar gereklidir. Testler doğrudan apply_twice fonksiyonunu çağırıp dönüş değerini kontrol eder; bu nedenle girdi okumayın veya herhangi bir şey yazdırmayın.

Gerekli yapı:

  • İki int parametresi alan ve bir int döndüren bir fonksiyon işaretçisi için Operation adlı bir typedef tanımlayın
  • İki işlem fonksiyonu tanımlayın: add (a + b döndürür) ve multiply (a * b döndürür)
  • İki tamsayı ve bir Operation fonksiyon işaretçisi alan, ardından işlemi çağırmanın sonucunu döndüren bir compute fonksiyonu tanımlayın
  • apply_twice içinde koda göre uygun işlemi seçin, ardından compute fonksiyonunu iki kez kullanın: önce başlangıçtaki sayılarla, sonra sonuç ve ikinci sayıyla tekrar

Mantık:

  1. op_code değerine göre işlem fonksiyonunu seçin (1 = add, 2 = multiply)
  2. Ara sonucu elde etmek için compute(a, b, operation) çağrısını yapın
  3. Sonucu elde etmek için compute(intermediate, b, operation) çağrısını yapın
  4. Sonucu döndürün

Parametreler:

  • a (int): İlk sayı
  • b (int): İkinci sayı
  • op_code (int): İşlem kodu (add için 1, multiply için 2)

Döndürür: İşlemin sırayla iki kez uygulanmasından sonraki sonuç (int)

Örnek: a = 5, b = 3, op_code = 1 (add) için:

  • İlk hesaplama: 5 + 3 = 8
  • İkinci hesaplama: 8 + 3 = 11
  • Döndür: 11

a = 2, b = 4, op_code = 2 (multiply) için:

  • İlk hesaplama: 2 × 4 = 8
  • İkinci hesaplama: 8 × 4 = 32
  • Döndür: 32

Kendin dene

int apply_twice(int a, int b, int op_code) {
    // Kodu buraya yazın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi