Menu
Coddy logo textTech

סיכום – נקודה הניתנת להדפסה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 39 מתוך 61.

challenge icon

אתגר

קל

בואו נשלב את כל התכונות הסטנדרטיות שלמדת על ידי יצירת מבנה Point מלא, שאפשר לנפות בו שגיאות, להציג אותו בצורה נאה ולהשוות אותו לשוויון!

תארגן את הקוד שלך בשני קבצים:

  • point.rs: הגדר מבנה ציבורי בשם Point עם שדות ציבוריים x ו-y (שניהם מסוג i32). המבנה Point שלך צריך לתמוך בשלוש יכולות:
    • הדפסה לצורכי ניפוי שגיאות באמצעות {:?}. גזור את התכונה הזו באופן אוטומטי
    • תצוגה ידידותית למשתמש באמצעות {} בפורמט (x, y): ממש את התכונה באופן ידני באמצעות std::fmt::Display
    • השוואת שוויון באמצעות ==: גזור את PartialEq
  • main.rs: הוסף את מודול point וצור שני מופעים של Point באמצעות הקלטים שסופקו. הדגם את שלוש היכולות על ידי הדפסת הנקודה הראשונה בפורמט ניפוי שגיאות, הדפסת הנקודה השנייה בפורמט תצוגה והשוואה אם שתי הנקודות שוות.

הפלט שלך צריך להציג את שלוש יכולות התכונות בפעולה:

Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}

לדוגמה, עבור הקלטים 3, 5, 3, 5:

Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true

ועבור הקלטים 10, 20, 5, 15:

Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false

תקבל ארבעה קלטים: קואורדינטות ה-x וה-y של הנקודה הראשונה, ולאחר מכן קואורדינטות ה-x וה-y של הנקודה השנייה. נתח כל אחד מהם כ-i32.

נסו בעצמכם

mod point;

use point::Point;

fn main() {
    // קראו ארבעה ערכי קלט: x1, y1, x2, y2
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: i32 = input.trim().parse().expect("Invalid input");

    // TODO: צרו שני מופעים של Point באמצעות ערכי הקלט

    // TODO: הדפיסו את הנקודה הראשונה בפורמט ניפוי שגיאות {:?}
    // פורמט: "Debug: Point { x: ..., y: ... }"

    // TODO: הדפיסו את הנקודה השנייה בפורמט תצוגה {}
    // פורמט: "Display: (..., ...)"

    // TODO: השוו בין שתי הנקודות והדפיסו את התוצאה
    // פורמט: "Equal: true" או "Equal: false"
}

כל השיעורים ביחידה תכנות מונחה עצמים

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