Ortalama hesabı
- Rust kursu
- Başlangıç
- Ders 113/115
- 7 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
Some(toplam / notlar.len() ____)
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) |