مراجعة: تمارين على Typedef و Enum
جزء من قسم Logic & Flow في رحلة C على Coddy. الدرس 60 من 63.
التحدي
سهلقم بإنشاء برنامج بلغة C يجمع بين enum و typedef لبناء آلة حاسبة بسيطة للأشكال الهندسية. يجب أن يقوم برنامجك بما يلي:
- تعريف
enumباسمShapeTypeمع الثوابت التالية بهذا الترتيب تماماً:CIRCLERECTANGLETRIANGLE
- استخدام
typedefلإنشاء اسم مستعار للنوع (type alias) باسمShapeلـenum ShapeType - كتابة دالة باسم
calculateAreaتقوم بما يلي:- تأخذ بارامتر من نوع
Shapeباسمshape - تأخذ بارامترين من نوع
floatباسمdimension1وdimension2 - تعيد قيمة من نوع
floatتمثل المساحة المحسوبة - تستخدم جملة
switchلحساب المساحة بناءً على نوع الشكل:- لـ
CIRCLE: المساحة = 3.14159 * dimension1 * dimension1 (حيث dimension1 هو نصف القطر) - لـ
RECTANGLE: المساحة = dimension1 * dimension2 (الطول × العرض) - لـ
TRIANGLE: المساحة = 0.5 * dimension1 * dimension2 (0.5 × القاعدة × الارتفاع)
- لـ
- تأخذ بارامتر من نوع
- كتابة دالة باسم
printShapeInfoتقوم بما يلي:- تأخذ بارامتر من نوع
Shapeباسمshape - لا تعيد أي قيمة (void)
- تستخدم جملة
switchلطباعة معلومات الشكل:- لـ
CIRCLE: اطبعShape: Circle - لـ
RECTANGLE: اطبعShape: Rectangle - لـ
TRIANGLE: اطبعShape: Triangle
- لـ
- تأخذ بارامتر من نوع
- في الدالة الرئيسية (main function):
- التصريح عن متغير من نوع
ShapeباسمselectedShape - التصريح عن متغيرين من نوع
floatباسمdim1وdim2 - قراءة ثلاث قيم من المدخلات: عدد صحيح يمثل اختيار الشكل (0، 1، أو 2)، وقيمتان من نوع float للأبعاد
- تعيين قيمة enum المقابلة لـ
selectedShapeبناءً على المدخلات - تعيين قيم الأبعاد لـ
dim1وdim2 - استدعاء الدالة
printShapeInfoمعselectedShape - طباعة الأبعاد بهذا التنسيق تماماً:
Dimensions: [dim1] [dim2] - حساب المساحة عن طريق استدعاء الدالة
calculateArea - طباعة المساحة المحسوبة بمنزلتين عشريتين بالضبط بهذا التنسيق تماماً:
Area: [area] - تحديد وطباعة فئة الشكل بناءً على المساحة المحسوبة:
- إذا كانت المساحة أقل من 10.0: اطبع
Category: Small - إذا كانت المساحة بين 10.0 و 50.0 (شاملة): اطبع
Category: Medium - إذا كانت المساحة أكبر من 50.0: اطبع
Category: Large
- إذا كانت المساحة أقل من 10.0: اطبع
- التصريح عن متغير من نوع
يوضح هذا التحدي المزيج القوي بين enum و typedef اللذين يعملان معاً. ينشئ typedef اسم نوع نظيفاً وقابلاً للقراءة Shape بدلاً من كتابة enum ShapeType بشكل متكرر. تجعل ثوابت enum جمل switch توثق نفسها بنفسها، مما يوضح بوضوح ما يمثله كل حالة. ستتدرب على تعريف كلا المفهومين، واستخدامهما في بارامترات الدوال، وتنفيذ المنطق الذي يعتمد على قيم enum.
جرّب بنفسك
#include <stdio.h>
// TODO: قم بتعريف enum ShapeType و typedef هنا
// TODO: قم بتنفيذ دالة calculateArea هنا
// TODO: قم بتنفيذ دالة printShapeInfo هنا
int main() {
// قراءة المدخلات
int shapeChoice;
float dim1, dim2;
scanf("%d", &shapeChoice);
scanf("%f", &dim1);
scanf("%f", &dim2);
// TODO: اكتب الكود الخاص بك أدناه
// قم بتعريف متغير selectedShape وتعيينه بناءً على shapeChoice
// استدعاء دالة printShapeInfo
// طباعة الأبعاد
// حساب وطباعة المساحة
// تحديد وطباعة الفئة
return 0;
}جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف7الهياكل (structs)
ما هو الـ Struct؟الإعلان عن Structإنشاء متغيرات Structالوصول إلى أعضاء الـ Structتهيئة الـ Structsمراجعة: Struct بيانات الطالب10Enums و Typedef
enum للثوابت المسماةالتصريح عن Enums واستخدامهااستخدام Enums في جمل Switchاستخدام typedef لأسماء مستعارة للأنواعاستخدام typedef مع Structsمراجعة: تمارين على Typedef و Enum2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت