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

مراجعة - Coordinate Point

جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 28 من 61.

challenge icon

التحدي

سهل

لنبنِ نظام إحداثيات مرنًا يعمل مع أي نوع رقمي! ستنشئ بنية Point ‏generic يمكنها تمثيل المواضع باستخدام أعداد integer للألعاب القائمة على الشبكات أو أعداد floating للرسومات الدقيقة: كل ذلك من تعريف واحد.

ستنظّم الشيفرة الخاصة بك عبر ملفين:

  • point.rs: Define بنية Point<T> ‏generic وpublic تحتوي على حقلين public: x وy، وكلاهما من النوع T. Implement ‏methods لنقطتك:
    • دالة newassociated تنشئ نقطة من إحداثيي x وy
    • دالة translate تأخذ قيمتي dx وdy وتُرجع Point جديدة مع إزاحة الإحداثيات بمقدار تلك القيم (يتطلب هذا أن يكون T قادرًا على supportaddition وcopying، لذا استخدم القيد T: std::ops::Add<Output = T> + Copy)
  • main.rs: أدرِج وحدة النقطة الخاصة بك ووضّح كيف تعمل البنية generic نفسها بسلاسة مع أنواع رقمية مختلفة.

في ملفك الرئيسي، اعرض بنية Pointgeneric الخاصة بك من خلال:

  1. إنشاء نقطة integer باستخدام أول مدخلين (بعد تحليلهما كـ i32)
  2. إزاحتها باستخدام المدخلين الثالث والرابع (وهما أيضًا i32)
  3. إنشاء نقطة floating باستخدام المدخلين الخامس والسادس (بعد تحليلهما كـ f64)
  4. عرض النقاط الثلاث جميعها

يجب أن يتبع الناتج هذا format:

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>: يتكيف تعريف البنية نفسه مع كليهما!

ستتلقى ستة inputs: عددين صحيحين للنقطة الأولى، وعددين صحيحين للإزاحة، وعددين عشريين للنقطة الثانية.

جرّب بنفسك

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: Create an integer point using x1 and y1
    
    // TODO: Translate the integer point by dx and dy
    
    // TODO: إنشاء نقطة فاصلة عائمة باستخدام x2 و y2
    
    // TODO: طباعة النتائج بالتنسيق المطلوب:
    // println!("Integer point: ({}, {})", ...);
    // println!("After translation: ({}, {})", ...);
    // println!("Float point: ({}, {})", ...);
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Rust عبر الإنترنت