CodeBlanks Logo Icon CodeBlanks

Ortalama hesabı

Vec'ten ortalama hesaplayan fonksiyonu yazar ve test edersin.

Bitirme görevi: ortalama

Bir not listesinin ortalamasını hesaplayan fonksiyon yazacaksın. Boş liste için ortalama tanımsızdır; bunu dürüstçe ifade etmek için Option<f64> döndür:

fn ortalama(notlar: &[f64]) -> Option<f64> {
    if notlar.is_empty() {
        return None;
    }
    let mut toplam = 0.0;
    for n in notlar {
        toplam += n;
    }
    Some(toplam / notlar.len() as f64)
}

notlar.len() bir usize'dır; f64 ile bölmek için as f64 ile çevrilir.

Yineleyiciyle kısa yazım

Aynı hesap yineleyici yöntemleriyle tek satıra iner:

let toplam: f64 = notlar.iter().sum();
let en_yuksek = notlar.iter().cloned().fold(f64::MIN, f64::max);

Ortalamayı yazdırırken {:.1} biçimi tek ondalık basamak gösterir. Sonucu match ile ele alıp boş liste için anlamlı bir mesaj ver.

Uygulama Not ortalaması

Yukarıdaki ortalama fonksiyonunu yaz. [72.5, 88.0, 91.5] ve boş bir dilim için sonucu match ile işle: Ortalama: 84.0 ({:.1}) ya da Not yok yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn ortalama(notlar: &[f64]) -> Option<f64> {
    if notlar.is_empty() {
        return None;
    }
    let mut toplam = 0.0;
    for n in notlar {
        toplam += n;
    }
    Some(toplam / notlar.len() as f64)
}

fn main() {
    let dolu = vec![72.5, 88.0, 91.5];
    let bos: Vec<f64> = Vec::new();
    for liste in [&dolu, &bos] {
        match ortalama(liste) {
            Some(o) => println!("Ortalama: {:.1}", o),
            None => println!("Not yok"),
        }
    }
}

Beklenen çıktı

Ortalama: 84.0
Not yok

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boş listede <code>toplam / 0.0</code> hesaplansaydı sonuç ne olurdu?

  • 0.0
  • Derleme hatası
  • NaN (0.0 / 0.0) Doğru cevap
  • Panic

Açıklama: Ondalıklı bölmede sıfıra bölme panic vermez; NaN üretir ve sessizce yayılır. Option bu tuzağı önler.

2 Türü çevir

Soru
Some(toplam / notlar.len() ____)
Cevap
Some(toplam / notlar.len() as f64)

Açıklama: usize değeri f64 ile bölmek için as f64 ile çevrilir.

3 Girdi ve ortalama sonucu

Kavram Anlamı
[72.5, 88.0, 91.5] Some(84.0)
[] None
[10.0] Some(10.0)
[1.0, 2.0] Some(1.5)

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma