Menu
Coddy logo textTech

סיכום – נקודת ציון

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

challenge icon

אתגר

קל

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

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

  • point.rs: הגדירו מבנה גנרי ציבורי Point<T> עם שני שדות ציבוריים: x ו-y, שניהם מסוג T. ממשו מתודות עבור הנקודה שלכם:
    • פונקציה משויכת new שיוצרת נקודה מקואורדינטות x ו-y
    • מתודה translate שמקבלת ערכי dx ו-dy ומחזירה Point חדשה שהקואורדינטות שלה הוזזו בכמויות האלה (הדבר מחייב את T לתמוך בחיבור ובהעתקה, לכן השתמשו באילוץ T: std::ops::Add<Output = T> + Copy)
  • main.rs: צרפו את מודול הנקודה שלכם והדגימו כיצד אותו מבנה גנרי עובד בצורה חלקה עם סוגים מספריים שונים.

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

  1. יצירת נקודה של מספרים שלמים באמצעות שתי הקלטות הראשונות (שנותחו כ-i32)
  2. הזזתה באמצעות הקלטות השלישית והרביעית (גם הן i32)
  3. יצירת נקודה של מספרים בנקודה צפה באמצעות ההקלטות החמישית והשישית (שנותחו כ-f64)
  4. הצגת כל שלוש הנקודות

הפלט שלכם צריך להיות בפורמט הזה:

Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})

לדוגמה, עבור הקלטות 3, 5, 2, -1, 1.5 ו-2.5:

Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)

שימו לב כיצד Point::new(3, 5) יוצרת Point<i32>, בעוד Point::new(1.5, 2.5) יוצרת Point<f64>: אותה הגדרת מבנה מתאימה לשניהם!

תקבלו שש הקלטות: שני מספרים שלמים עבור הנקודה הראשונה, שני מספרים שלמים עבור ההזזה, ושני מספרים עשרוניים עבור הנקודה השנייה.

נסו בעצמכם

mod point;

use point::Point;

fn main() {
    // קרא את הקלטים
    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 dx: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let dy: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: f64 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: f64 = input.trim().parse().expect("Invalid input");
    
    // TODO: צור נקודה עם קואורדינטות של מספרים שלמים באמצעות x1 ו־y1
    
    // TODO: הזז את הנקודה בעלת הקואורדינטות השלמות ב־dx וב־dy
    
    // TODO: צור נקודה עם קואורדינטות של מספרים עשרוניים באמצעות x2 ו־y2
    
    // TODO: הדפס את התוצאות בפורמט הנדרש:
    // println!("Integer point: ({}, {})", ...);
    // println!("After translation: ({}, {})", ...);
    // println!("Float point: ({}, {})", ...);
}

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

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