Rust/פלט והצללה/תרגילים

תרגיל 1 - שימוש בתכונות המיוחדות של println!() עריכה

הגדירו משתנה בשם x ואתחלו אותו עם ערך כלשהו. קראו לפונקציה println!() ושלחו לה את המשתנה פעם אחת בלבד. הדפיסו את המשתנה בשלוש דרכים שונות: בשימוש בסוגריים מסולסלים בלבד, בשימוש בסוגריים מסולסלים ובמספר הסידורי של המשתנה ובשימוש בסוגריים מסולסלים ובערך מפתח אותו תגדירו.

תרגיל 2 - ניסיון הדפסת ערכי זבל עריכה

בשיעור הקודם אמרנו שבשפת ראסט לא ניתן לגשת לערכי זבל בזיכרון. הגדירו משתנה לא מאותחל ונסו להדפיס את ערך הזבל שבו. מה קיבלתם?

תרגיל 3 - אורך החיים של משתנה והצללה עריכה

לפניכם קטע קוד בשפת ראסט. לפני שתריצו אותו, חשבו: מה יודפס בכל אחת מן ארבע ההדפסות של x? הריצו את הקוד ובדקו אם צדקתם.

fn main() {
	let x = 5;
	{
		println!("{}", x);
		let x = 2.5;
		println!("{}", x);
	}
	println!("{}", x);
	let x = 8;
	println!("{}", x);
}

תרגיל 4 - מקום ההצהרה על קבועים עריכה

נסו להריץ את קטע הקוד הבא. האם לדעתכם תתקבל שגיאת קומפליציה? מה ניתן ללמוד על קבועים מדוגמה זו?

fn main() {
	let x = NUM1;
	println!("{}", x);
	const NUM1: i32 = 22;
}

תרגיל 5 - אורך החיים של קבועים (בלוקים) עריכה

מתכנת מתחיל כתב בנמרצות קטע קוד בשפת ראסט. הוא הוסיף לקוד הערות כדי לוודא שכל מי שיקרא אותו, יצליח להבין אותו. האם לדעתכם קטע הקוד הבא ירוץ כמתוכנן או שהמתכנת יתקל בשגיאת קומפילציה? האם המתכנת יתקל בכלל בבעיה אחרת? הריצו את הקוד ובדקו אם צדקתם.

fn main() {
	const NUM1: i32 = 5;
	{
		println!("{}", NUM1); // print 5
		const NUM1: f64 = 0.3; // change NUM1 to 0.3
		println!("{}", NUM1); // print 0.3
	}
	println!("{}", NUM1); // print 5
}

תרגיל 6 - אובדן מידע בעת ביצוע הסבה עריכה

הריצו את הקוד הבא. חשבו מה יהיה הערך של x בסיום הקוד ובדקו אם צדקתם.

fn main()
{
	let mut x = 5.8;
	let y = x as i64;
	x = y as f64;
	println!("x is {}", x);
}

תרגיל 7 - הסבת משתנים חסרי סימן למשתנים מטיפוס מספר שלם עריכה

זוכרים שהערך המקסימלי של משתנים חסרי סימן (unsigned) גדול כמעט פי שתיים מן הערך המקסימלי של משתנים מטיפוס מספר שלם? נסו לבדוק מה קורה כשאתם מבצעים הסבה של משתנה חסר סימן שאינו נכלל בטווח הערכים של מספר שלם. למשל, בדקו מה קורה כאשר מסבים משתנה מטיפוס u8 עם התחלתי 200 למשתנה מטיפוס i8 (שהערך המקסימלי שלו הוא 127). נסו לבצע הסבה למספר משתנים וודאו שהצלחתם לזהות את האלגוריתם.

Rust