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

ملخص - التعداد Shape

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

challenge icon

التحدي

سهل

لنَبْنِ حاسبةً هندسيةً تستخدم enum لتمثيل أشكال مختلفة، بحيث يخزّن كل شكل أبعاده الخاصة. سيُوضّح تعداد Shape الخاص بك كيف يمكن لنوع واحد أن يحتوي على هياكل بيانات مختلفة ويوفّر سلوكًا موحّدًا من خلال الأساليب.

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

  • shape.rs: عرّف تعداد Shape عامًا باستخدام متغيرين:
    • Circle: يحتوي على قيمة f64 واحدة تمثّل نصف القطر (صياغة tuple)
    • Rectangle: يحتوي على حقول مسمّاة: width (f64) وheight (f64)
    نفّذ أسلوب area يستخدم مطابقة الأنماط لحساب المساحة الصحيحة استنادًا إلى المتغير. بالنسبة إلى الدوائر، استخدم 3.14159 باعتبارها قيمة π.
  • main.rs: أدرِج وحدة shape الخاصة بك، وأنشئ مثيلًا واحدًا من كل متغير من متغيرات الشكل باستخدام المدخلات المُعطاة، واطبع مساحة كل شكل.

يجب أن يُرجع أسلوب area قيمة من النوع f64. عند إجراء المطابقة، فكّك كل متغير لاستخراج أبعاده وطبّق الصيغة المناسبة:

  • مساحة الدائرة: π × radius²
  • مساحة المستطيل: width × height

يجب أن يعرض الناتج مساحة كل شكل في سطر مستقل، مع منزلة عشرية واحدة بالضبط:

Circle area: {area}
Rectangle area: {area}

على سبيل المثال، إذا كان نصف قطر الدائرة 5.0 وكان للمستطيل عرض 4.0 وارتفاع 6.0، فسيكون الناتج:

Circle area: 78.5
Rectangle area: 24.0

ستتلقى ثلاثة مدخلات: نصف قطر الدائرة، وعرض المستطيل، وارتفاع المستطيل.

جرّب بنفسك

mod shape;

use shape::Shape;

fn main() {
    // قراءة المدخلات
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: أنشئ شكل Circle باستخدام radius
    
    // TODO: أنشئ شكل Rectangle باستخدام width و height
    
    // TODO: اطبع مساحة كل شكل بمنزلة عشرية واحدة
    // Format: "Circle area: {area}" and "Rectangle area: {area}"
}

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

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