Menu
Coddy logo textTech

Şekil Alanı Hesaplayıcı

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

challenge icon

Görev

Kolay

Bu son meydan okuma, tek bir koleksiyonda depolanan farklı şekillerin toplam alanını hesaplamak üzere trait’leri, trait nesnelerini ve polimorfizmi bir araya getirerek pratik bir problemi çözer.

Trait nesnelerinin ve polimorfizmin gücünü gösteren bir şekil alanı hesaplayıcısı oluşturalım! Farklı şekillerin, yani dairelerin ve karelerin, tek bir koleksiyonda birlikte depolanabildiği ve toplam alanlarının birleşik bir arayüz aracılığıyla hesaplanabildiği bir sistem oluşturacaksın.

Kodunu üç dosyaya ayıracaksın:

  • shape.rs: Bir Shape döndüren area metoduna sahip f64 trait’ini tanımla. Bu trait, tüm şekillerin yerine getirmesi gereken sözleşmeyi oluşturur.
  • shapes.rs: Trait’ini uygulayan iki struct oluştur. Bir Circle bir radius (f64), bir Square ise bir side (f64) değerine sahiptir. Her struct, uygun alan formülüyle Shape trait’ini uygulamalıdır. Daireler için π değeri olarak 3.14159 kullan.
  • main.rs: Her iki modülü içe aktar ve bir total_area kabul edip tüm alanların toplamını döndüren Vec<Box<dyn Shape>> fonksiyonunu oluştur. Sağlanan girdileri kullanarak bir daire ve bir kare oluştur, bunları trait nesnelerinden oluşan bir vektörde depola, toplam alanı hesapla ve sonucu yazdır.

Alan formülleri şunlardır:

  • Daire: 3.14159 × radius × radius
  • Kare: side × side

Çıktın tüm şekillerin toplam alanını göstermelidir:

Total area: {total}

Örneğin, 2.0 (daire yarıçapı) ve 3.0 (kare kenarı) girdileriyle:

Total area: 21.56636

Bunun nedeni şudur: Daire alanı = 3.14159 × 2² = 12.56636, Kare alanı = 3² = 9, Toplam = 21.56636

1.0 ve 4.0 girdileriyle:

Total area: 19.14159

İki girdi alacaksın: dairenin yarıçapı ve karenin kenar uzunluğu (ikisini de f64 olarak ayrıştır).

Kendin dene

mod shape;
mod shapes;

use shape::Shape;
use shapes::{Circle, Square};

// TODO: total_area fonksiyonunu uygula
// Bir Vec<Box<dyn Shape>> kabul etmeli ve tüm alanların toplamını f64 olarak döndürmeli
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Tüm şekil alanlarının toplamını hesapla ve döndür
    0.0
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let radius: f64 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let side: f64 = input2.trim().parse().expect("Invalid number");

    // TODO: Verilen yarıçapla bir Circle oluştur
    // TODO: Verilen kenarla bir Square oluştur
    // TODO: Her iki şekli bir Vec<Box<dyn Shape>> içinde sakla
    // TODO: total_area'yı çağır ve sonucu şu formatta yazdır: "Total area: {total}"
}

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

Kendi başına pratik yap: Online Rust derleyicisi