Çözüm
/// Verilen vektörün büyüklüğünü hesaplayın. fn magnitude(vector: &[f64; 3]) -> f64 { let mut mag_squared = 0.0; for coord in vector { mag_squared += coord * coord; } mag_squared.sqrt() } /// Vektörün büyüklüğünü, yönünü değiştirmeden 1.0'a değiştirin. fn normalize(vector: &mut [f64; 3]) { let mag = magnitude(vector); for item in vector { *item /= mag; } } fn main() { println!("Birim vektörünün büyüklüğü: {}", magnitude(&[0.0, 1.0, 0.0])); let mut v = [1.0, 2.0, 9.0]; println!("{v:?} vektörünün büyüklüğü: {}", magnitude(&v)); normalize(&mut v); println!("Normalize edildikten sonra {v:?} vektörünün büyüklüğü: {}", magnitude(&v)); }
-
normalizefonksiyonunda her bir elemanı değiştirmek için*item /= magyapabildiğimize dikkat edin. Bunun sebebi, bir diziye değiştirilebilir (mutable) referans kullanarak döngü de dönmemizdir; bu dafordöngüsünün her elemana değiştirilebilir (mutable) referanslar vermesini sağlar. -
Burada dilim (slice) referansları almak da mümkündür, örneğin,
fn magnitude(vector: &[f64]) -> f64. Bu, çalışma zamanı uzunluğu kontrolü pahasına fonksiyonu daha genel hâle getirir.