Menu
Coddy logo textTech

Şekil Alanı Hesaplayıcı

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

challenge icon

Görev

Kolay

Bu final meydan okuması; tek bir koleksiyonda saklanan farklı şekillerin toplam alanını hesaplamak gibi pratik bir problemi çözmek için trait'leri, trait nesnelerini ve polimorfizmi bir araya getiriyor.

Trait nesnelerinin ve polimorfizmin gücünü gösteren bir şekil alanı hesaplayıcısı oluşturalım! Farklı şekillerin (daireler ve kareler) tek bir koleksiyonda birlikte saklanabildiği ve toplam alanlarının birleşik bir arayüz üzerinden hesaplandığı bir sistem oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • shape.rs: Bir f64 döndüren area metoduna sahip Shape trait'ini tanımlayın. Bu trait, tüm şekillerin yerine getirmesi gereken sözleşmeyi belirler.
  • shapes.rs: Trait'inizi uygulayan iki struct oluşturun. Bir Circle (daire) radius (f64) değerine, bir Square (kare) ise side (f64) değerine sahiptir. Her struct, Shape trait'ini uygun alan formülüyle uygulamalıdır. Daireler için π olarak 3.14159 kullanın.
  • main.rs: Her iki modülü de dahil edin ve bir Vec<Box<dyn Shape>> kabul eden ve tüm alanların toplamını döndüren bir total_area fonksiyonu oluşturun. Sağlanan girdileri kullanarak bir daire ve bir kare oluşturun, bunları bir trait nesnesi vektöründe saklayın, toplam alanı hesaplayın ve sonucu yazdırın.

Alan formülleri şunlardır:

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

Çıktınız 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: Daire alanı = 3.14159 × 2² = 12.56636, Kare alanı = 3² = 9, Toplam = 21.56636

Ve 1.0 ile 4.0 girdileriyle:

Total area: 19.14159

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

Kendin dene

mod shape;
mod shapes;

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

// TODO: total_area fonksiyonunu uygulayın
// Bir Vec<Box<dyn Shape>> kabul etmeli ve tüm alanların toplamını f64 olarak döndürmelidir
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Tüm şekil alanlarının toplamını hesaplayın ve döndürün
    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ıçap ile bir Circle oluşturun
    // TODO: Verilen kenar uzunluğu ile bir Square oluşturun
    // TODO: Her iki şekli bir Vec<Box<dyn Shape>> içinde saklayın
    // TODO: total_area fonksiyonunu çağırın ve sonucu şu formatta yazdırın: "Total area: {total}"
}

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