Menu
Coddy logo textTech

Daire Uygulaması

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

challenge icon

Görev

Kolay

Temel Shape yapısını (struct) içine alan ve kendi çizim ve alan mantığını sağlayan somut bir şekil olan Circle yapısını uygulayarak Shape Drawer projesini oluşturmaya devam edelim.

Önceki dersteki temel üzerine inşa ederek, projenizi şu dosyalarla genişleteceksiniz:

  • shape.h: DrawFunc ve AreaFunc fonksiyon göstericisi (function pointer) türlerini içeren önceki dersteki temel Shape arayüzünüzü koruyun.
  • circle.h: Circle yapınızı burada tanımlayın. Bir daire, Shape yapısını ilk üyesi olarak içine alır (yukarı doğru dönüştürme - upcasting için ilk üye kuralını etkinleştirir) ve double türünde bir radius alanı ekler. Bir yarıçap alan ve değer olarak bir Circle döndüren create_circle yapıcı (constructor) fonksiyonunu bildirin.
  • circle.c: Daireye özgü davranışı burada uygulayın:
    • draw_circleDrawing Circle with radius: X.XX yazdırır (yarıçap 2 ondalık basamakla gösterilir)
    • area_circle — π × radius² değerini döndürür (π için 3.14159 kullanın)
    • create_circle — bir Circle başlatır, içindeki Shape'in fonksiyon göstericilerini draw_circle ve area_circle fonksiyonlarına işaret edecek şekilde bağlar, yarıçapı ayarlar ve daireyi döndürür
  • main.c: Her şeyi bir araya getirin. Girdi olarak bir yarıçap değeri okuyun, yapıcınızı kullanarak bir daire oluşturun, ardından içindeki Shape'in fonksiyon göstericileri aracılığıyla hem draw hem de area fonksiyonlarını çağırın. Alanı 2 ondalık basamakla yazdırın.

Programınız bir girdi alacaktır: bir radius değeri (kayan noktalı sayı olarak).

Girdi 5.0 olduğunda örnek çıktı:

Drawing Circle with radius: 5.00
Area: 78.54

Girdi 3.5 olduğunda örnek çıktı:

Drawing Circle with radius: 3.50
Area: 38.48

Buradaki temel nokta, Circle yapısının ilk üyesi olarak bir Shape içermesidir, böylece fonksiyon göstericilerine circle.base.draw ve circle.base.area (veya iç içe geçmiş üyeye ne isim verdiyseniz) üzerinden erişebilirsiniz. Bu fonksiyonları çağırırken, Shape üyesine bir gösterici (pointer) geçirin. Tüm başlık dosyalarında include guard kullanmayı unutmayın.

Kendin dene

#include <stdio.h>
#include "shape.h"
#include "circle.h"

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: create_circle kullanarak bir Circle oluşturun
    
    // TODO: Gömülü Shape'in fonksiyon göstericisi aracılığıyla draw'u çağırın
    
    // TODO: Gömülü Shape'in fonksiyon göstericisi aracılığıyla area'yı çağırın
    // ve 2 ondalık basamakla yazdırın: "Area: %.2f\n"
    
    return 0;
}

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