Menu
Coddy logo textTech

מבנים כפרמטרים של פונקציה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 24 מתוך 66.

עכשיו, כשאתה יודע ליצור ולשנות מבנים, בוא נחקור איך להשתמש בהם עם פונקציות. כמו כל סוג נתונים אחר ב-Rust, אפשר להעביר מופעים של מבנים לפונקציות ולהחזיר אותם מפונקציות.

כדי להעביר מבנה לפונקציה, פשוט כוללים אותו כפרמטר בהגדרת הפונקציה:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

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

אפשר גם להחזיר מבנים מפונקציות באמצעות ציון סוג המבנה כסוג ההחזרה:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

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

challenge icon

אתגר

קל

תקבלו ארבעה קלטים: רוחב של מלבן (כמספר שלם), גובה של מלבן (כמספר שלם), אורך צלע של ריבוע (כמספר שלם) ומספר בחירה (1 או 2). הגדירו מבנה Rectangle עם שני שדות: width: i32 ו-height: i32. צרו שתי פונקציות: אחת שמקבלת Rectangle ומחשבת את השטח שלו, ואחרת שמקבלת אורך צלע ומחזירה Rectangle שמייצג ריבוע. חשבו והדפיסו את השטח המתאים בהתאם לקלט הבחירה.

דרישות:

  • הגדירו מבנה Rectangle עם השדות: width: i32 ו-height: i32
  • צרו פונקציה calculate_area שמקבלת Rectangle כפרמטר ומחזירה i32 (השטח)
  • צרו פונקציה create_square שמקבלת i32 (אורך צלע) כפרמטר ומחזירה Rectangle שבו הרוחב והגובה שווים
  • קראו את הקלט הראשון והמירו אותו ל-i32 עבור רוחב המלבן
  • קראו את הקלט השני והמירו אותו ל-i32 עבור גובה המלבן
  • צרו מופע של Rectangle עם המידות האלה
  • קראו את הקלט השלישי והמירו אותו ל-i32 עבור אורך צלע הריבוע
  • קראו את הקלט הרביעי והמירו אותו ל-i32 עבור הבחירה (1 או 2)
  • אם הבחירה היא 1: חשבו והדפיסו את שטח המלבן
  • אם הבחירה היא 2: צרו ריבוע באמצעות create_square, ואז חשבו והדפיסו את השטח שלו

קלט:

  • שורה ראשונה: רוחב המלבן כמספר שלם (לדוגמה, 8)
  • שורה שנייה: גובה המלבן כמספר שלם (לדוגמה, 5)
  • שורה שלישית: אורך צלע הריבוע כמספר שלם (לדוגמה, 6)
  • שורה רביעית: בחירה כמספר שלם, 1 או 2 (לדוגמה, 1)

פלט:

  • אם הבחירה היא 1: Rectangle area: [area]
  • אם הבחירה היא 2: Square area: [area]

נסו בעצמכם

use std::io;

// TODO: הגדירו כאן את המבנה Rectangle


// TODO: הגדירו כאן את הפונקציה calculate_area


// TODO: הגדירו כאן את הפונקציה create_square


fn main() {
    // קראו את רוחב המלבן
    let mut width_input = String::new();
    io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: i32 = width_input.trim().parse().expect("Invalid input");
    
    // קראו את גובה המלבן
    let mut height_input = String::new();
    io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: i32 = height_input.trim().parse().expect("Invalid input");
    
    // קראו את אורך צלע הריבוע
    let mut side_input = String::new();
    io::stdin().read_line(&mut side_input).expect("Failed to read line");
    let side: i32 = side_input.trim().parse().expect("Invalid input");
    
    // קראו את הבחירה
    let mut choice_input = String::new();
    io::stdin().read_line(&mut choice_input).expect("Failed to read line");
    let choice: i32 = choice_input.trim().parse().expect("Invalid input");
    
    // TODO: כתבו את הקוד שלכם למטה
    // צרו מופע של Rectangle, בדקו את הבחירה וחשבו את השטח המתאים
    
    
    // הדפיסו את התוצאה בהתאם לבחירה
    // השתמשו ב: println!("Rectangle area: {}", area); או println!("Square area: {}", area);
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Rust אונליין