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

تنفيذ المستطيل

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

challenge icon

التحدي

سهل

لنواصل بناء مشروع Shape Drawer من خلال تنفيذ Rectangle: وهو شكل ملموس آخر يضم بنية Shape الأساسية، تمامًا كما فعلنا مع Circle.

بالاعتماد على مشروعك الحالي، ستضيف وظائف المستطيل عبر هذه الملفات:

  • shape.h: احتفظ بواجهة Shape الأساسية مع نوعَي مؤشرات الدوال DrawFunc وAreaFunc من الدروس السابقة.
  • circle.h وcircle.c: احتفظ بتنفيذ Circle من الدرس السابق.
  • rectangle.h: عرّف بنية Rectangle هنا. يضم المستطيل Shape باعتباره first member ويضيف حقلي width وheight (وكلاهما من النوع double). صرّح عن دالة مُنشئ باسم create_rectangle تأخذ معاملي العرض والارتفاع وتُرجع قيمة من النوع Rectangle.
  • rectangle.c: نفّذ السلوك الخاص بالمستطيل:
    • draw_rectangle: تطبع Drawing Rectangle with width: X.XX and height: X.XX (مع عرض كلتا القيمتين بمنزلتين عشريتين)
    • area_rectangle: تُرجع حاصل ضرب العرض × الارتفاع
    • create_rectangle: تهيّئ قيمة من النوع Rectangle، وتربط مؤشرات الدوال في Shape المضمّنة بدوال المستطيل، وتضبط الأبعاد، ثم تُرجع المستطيل
  • main.c: اعرض عمل الشكلين من خلال الواجهة نفسها. اقرأ مُدخلين: العرض والارتفاع لمستطيل. أنشئ مستطيلًا باستخدام المُنشئ، ثم استدعِ كلًا من draw وarea من خلال مؤشرات الدوال في Shape المضمّنة. اطبع المساحة بمنزلتين عشريتين.

سيستقبل برنامجك مُدخلين: قيمتي width وheight (كأعداد ذات فاصلة عائمة).

ناتج مثالي عندما تكون المُدخلات 4.0 و3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

ناتج مثالي عندما تكون المُدخلات 7.5 و2.5:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

تمامًا كما هو الحال مع Circle، يضم Rectangle بنية Shape باعتبارها أول member فيه، مما يتيح لك الوصول إلى مؤشرات الدوال من خلال هذا العضو المضمّن. هذا النمط المتسق هو ما يتيح تعدد الأشكال: إذ يمكن التعامل مع كلا الشكلين بطريقة موحّدة من خلال واجهة Shape الخاصة بهما. تذكّر استخدام حواجز التضمين في جميع ملفات الترويسة.

جرّب بنفسك

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: أنشئ مستطيلاً باستخدام create_rectangle(width, height)
    
    // TODO: استدعِ draw من خلال مؤشر الدالة الخاص بـ Shape المضمّن
    
    // TODO: استدعِ area من خلال مؤشر الدالة الخاص بـ Shape المضمّن
    // TODO: اطبع المساحة بمنزلتين عشريتين: "Area: %.2f\n"
    
    return 0;
}

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

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