Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - Coordinate Point

جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 28 من 61.

challenge icon

التحدي

سهل

لنقم ببناء نظام إحداثيات مرن يعمل مع أي نوع عددي! ستقوم بإنشاء هيكل Point عام (generic) يمكنه تمثيل المواقع باستخدام الأعداد الصحيحة للألعاب القائمة على الشبكة أو الأعداد العشرية للرسومات الدقيقة — كل ذلك من تعريف واحد فقط.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • point.rs: قم بتعريف هيكل Point<T> عام وعام (public) مع حقلين عامين: x و y، وكلاهما من النوع T. قم بتنفيذ دوال لهيكلك:

    • دالة مرتبطة (associated function) باسم new تقوم بإنشاء نقطة من إحداثيات x و y.
    • دالة (method) باسم translate تأخذ قيم dx و dy وتعيد Point جديدة مع إزاحة الإحداثيات بتلك القيم (يتطلب هذا أن يدعم T الجمع والنسخ، لذا استخدم القيد T: std::ops::Add<Output = T> + Copy).
  • main.rs: قم باستيراد وحدة point الخاصة بك وأظهر كيف يعمل نفس الهيكل العام بسلاسة مع أنواع عددية مختلفة.

في ملفك الرئيسي، استعرض هيكل Point العام الخاص بك من خلال:

  1. إنشاء نقطة أعداد صحيحة باستخدام أول مدخلين (يتم تحليلهما كـ i32).
  2. إزاحتها (translating) باستخدام المدخلين الثالث والرابع (أيضاً 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: ({}, {})", ...);
}

جميع دروس Object Oriented Programming