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

تنفيذ الدائرة

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

challenge icon

التحدي

سهل

لنواصل بناء مشروع "Shape Drawer" من خلال تنفيذ Circle — وهو شكل ملموس يدمج هيكل Shape الأساسي ويوفر منطق الرسم والمساحة الخاص به.

بناءً على الأساس الذي وضعناه في الدرس السابق، ستقوم بتوسيع مشروعك بهذه الملفات:

  • shape.h: احتفظ بواجهة Shape الأساسية من الدرس السابق مع أنواع مؤشرات الدوال DrawFunc و AreaFunc.
  • circle.h: قم بتعريف هيكل Circle هنا. تدمج الدائرة Shape كـ عضو أول (مما يسمح بتطبيق قاعدة العضو الأول للتحويل التصاعدي "upcasting") وتضيف حقل radius من نوع double. قم بالتصريح عن دالة منشئ create_circle تأخذ نصف القطر وتعيد Circle بالقيمة.
  • circle.c: قم بتنفيذ السلوك الخاص بالدائرة هنا:
    • draw_circle — يطبع Drawing Circle with radius: X.XX (يظهر نصف القطر بمنزلتين عشريتين)
    • area_circle — يعيد π × radius² (استخدم 3.14159 لـ π)
    • create_circle — يقوم بتهيئة Circle، وربط مؤشرات دوال Shape المدمجة لتشير إلى draw_circle و area_circle، وتعيين نصف القطر، وإعادة الدائرة
  • main.c: اجمع كل شيء معاً. اقرأ قيمة نصف القطر كمدخل، وأنشئ دائرة باستخدام المنشئ الخاص بك، ثم استدعِ كلاً من draw و area من خلال مؤشرات دوال Shape المدمجة. اطبع المساحة بمنزلتين عشريتين.

سيتلقى برنامجك مدخلاً واحداً: قيمة radius (كعدد بفاصلة عائمة).

مثال على المخرجات عندما يكون المدخل 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

مثال على المخرجات عندما يكون المدخل 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

الفكرة الأساسية هي أن Circle يحتوي على Shape كعضو أول، لذا يمكنك الوصول إلى مؤشرات الدوال من خلال circle.base.draw و circle.base.area (أو أي اسم تطلقه على العضو المدمج). عند استدعاء هذه الدوال، مرر مؤشراً إلى عضو Shape. تذكر استخدام حراس التضمين (include guards) في جميع ملفات الرأس.

جرّب بنفسك

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: إنشاء دائرة باستخدام create_circle
    
    // TODO: استدعاء draw من خلال مؤشر الدالة الخاص بـ Shape المضمنة
    
    // TODO: استدعاء area من خلال مؤشر الدالة الخاص بـ Shape المضمنة
    // وطباعتها بمنزلتين عشريتين: "Area: %.2f\n"
    
    return 0;
}

جميع دروس Object Oriented Programming