Menu
Coddy logo textTech

Şekil Kapsayıcısı

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

challenge icon

Görev

Kolay

Şekil Çizici projesini büyük finale taşıyalım! Daireler ve Dikdörtgenlerden oluşan karışık bir koleksiyonu barındıran bir şekil konteyneri oluşturacak, ardından toplam alanı hesaplamak için bunlar üzerinde döngü kuracaksınız — bu, polimorfizmin gerçek gücünü gösterecek.

Şimdiye kadar oluşturduğunuz her şeyin üzerine inşa ederek, tamamlanmış projeniz şunları içerecektir:

  • shape.h ve shape.c: Temel Shape arayüzünüz ve process_shape fonksiyonu.
  • circle.h ve circle.c: Yapıcısı ve alan hesaplamasıyla birlikte Circle uygulamanız.
  • rectangle.h ve rectangle.c: Yapıcısı ve alan hesaplamasıyla birlikte Rectangle uygulamanız.
  • main.c: Sihrin gerçekleştiği yer burasıdır. Herhangi bir şekil türünü tutabilen bir Shape* işaretçi dizisi oluşturacaksınız. Bunu Daireler ve Dikdörtgenlerin bir karışımıyla doldurun, ardından tüm şekillerin toplam alanını hesaplamak ve görüntülemek için dizi üzerinde döngü kurun.

Programınız şu girdileri alacaktır:

  1. Oluşturulacak şekil sayısı
  2. Her şekil için: bir tür göstergesi (daire için c, dikdörtgen için r) ve ardından boyutları

Konteynerinizdeki her şekil için çizim çıktısını yazdırın. Tüm şekilleri işledikten sonra, toplam alanı Total Area: X.XX formatında 2 ondalık basamakla yazdırın.

3, ardından c 5.0, r 4.0 3.0, c 2.0 girdileriyle örnek:

Drawing Circle with radius: 5.00
Drawing Rectangle with width: 4.00 and height: 3.00
Drawing Circle with radius: 2.00
Total Area: 103.11

2, ardından r 6.0 4.0, r 3.0 2.0 girdileriyle örnek:

Drawing Rectangle with width: 6.00 and height: 4.00
Drawing Rectangle with width: 3.00 and height: 2.00
Total Area: 30.00

Buradaki temel nokta, dizinizin Shape* işaretçilerini saklamasıdır — her bir öğenin aslında bir Daire mi yoksa Dikdörtgen mi olduğuyla ilgilenmez. Her bir işaretçi üzerinden draw ve area fonksiyonlarını çağırdığınızda, her şeklin nasıl oluşturulduğuna bağlı olarak doğru uygulama otomatik olarak yürütülür. İşte polimorfizm budur: tek bir döngü, tek bir arayüz, birden fazla davranış.

Dizide, somut şekillerinizin gömülü Shape üyelerine ait işaretçileri saklamanız gerekeceğini unutmayın. Daire alanı hesaplamalarında π için 3.14159 kullanın.

Önemli — şekil türü karakterini okumak: scanf("%d", &n) ile şekil sayısını okuduktan sonra, tür karakterini okumak için yapılan her sonraki çağrı, giriş tamponunda kalan yeni satır karakterini atlamalıdır. Bunu yapmak için format dizesinde başta bir boşluk kullanın:

scanf(" %c", &type);  // %c'den önceki boşluğa dikkat edin

Baştaki boşluk olmadan, scanf amaçlanan c veya r yerine önceki girişten kalan yeni satır karakterini okuyacak, bu da şekil türü kontrolünüzün sessizce başarısız olmasına ve çıktı üretilmemesine neden olacaktır.

Kendin dene

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

int main() {
    // TODO: Şekil sayısını oku
    // TODO: Daireler, dikdörtgenler ve Shape* işaretçileri için diziler ayır
    // TODO: Her bir şekil üzerinde döngü kur, türünü ve boyutlarını oku,
    //       şekli oluştur ve shapes dizisindeki tabanına bir işaretçi sakla
    // TODO: shapes dizisi üzerinde döngü kur, her bir şekil için draw fonksiyonunu çağır,
    //       ve toplam alanı biriktir
    // TODO: Toplam alanı şu formatta yazdır: Total Area: X.XX
    // TODO: Ayrılan belleği serbest bırak
    return 0;
}

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