مراجعة: مصفوفة من الـ Structs
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 62 من 63.
التحدي
سهلقم بإنشاء برنامج بلغة C يدير نظام مخزون منتجات باستخدام مصفوفة من الهياكل (structs). يجب أن يقوم برنامجك بما يلي:
- تعريف
structباسمProductبالأعضاء التالية:- مصفوفة أحرف
nameبحجم 30 - رقم عشري
price - عدد صحيح
stock
- مصفوفة أحرف
- كتابة دالة باسم
findMostExpensiveتقوم بما يلي:- تستقبل مصفوفة من
struct Productوعدداً صحيحاًsizeكمعاملات - تعيد عدداً صحيحاً يمثل فهرس (index) المنتج صاحب السعر الأعلى
- تستخدم حلقة تكرار (loop) للمرور عبر جميع المنتجات ومقارنة أسعارها
- تعيد فهرس أول منتج يتم العثور عليه بالسعر الأقصى
- تستقبل مصفوفة من
- كتابة دالة باسم
calculateTotalValueتقوم بما يلي:- تستقبل مصفوفة من
struct Productوعدداً صحيحاًsizeكمعاملات - تعيد رقماً عشرياً يمثل القيمة الإجمالية للمخزون
- تحسب القيمة الإجمالية عن طريق جمع (السعر × المخزون) لكل منتج
- تستقبل مصفوفة من
- كتابة دالة باسم
findLowStockتقوم بما يلي:- تستقبل مصفوفة من
struct Product، وعدداً صحيحاًsize، وعدداً صحيحاًthresholdكمعاملات - تعيد عدداً صحيحاً يمثل عدد المنتجات التي يقل مخزونها عن العتبة (threshold)
- تستخدم حلقة تكرار لعد المنتجات التي يكون فيها المخزون أقل من قيمة العتبة
- تستقبل مصفوفة من
- في الدالة الرئيسية (main function):
- إنشاء مصفوفة من 3
struct Productباسمinventory - قراءة المدخلات لكل منتج بهذا الترتيب: name، و price، و stock
- ملء المصفوفة ببيانات المدخلات
- طباعة معلومات كل منتج بهذا التنسيق الدقيق:
Product [index]: [name] - Price: [price], Stock: [stock] - استدعاء دالة
findMostExpensiveوطباعة النتيجة بهذا التنسيق الدقيق:Most expensive product: [name] - استدعاء دالة
calculateTotalValueوطباعة النتيجة بمنزلتين عشريتين بالضبط بهذا التنسيق الدقيق:Total inventory value: [total_value] - قراءة عدد صحيح يمثل عتبة المخزون المنخفض (low stock threshold)
- استدعاء دالة
findLowStockمع العتبة وطباعة النتيجة بهذا التنسيق الدقيق:Products with low stock: [count] - التحقق مما إذا كان المنتج الأغلى ثمناً لديه مخزون أكبر من 10:
- إذا كانت الإجابة نعم: اطبع
Most expensive product is well stocked - إذا كانت الإجابة لا: اطبع
Most expensive product needs restocking
- إذا كانت الإجابة نعم: اطبع
- إنشاء مصفوفة من 3
يختبر هذا التحدي قدرتك على التعامل مع مصفوفات الهياكل (arrays of structs)، وتنفيذ الدوال التي تعالج مصفوفات الهياكل، وإجراء حسابات ومقارنات متنوعة على البيانات المهيكلة. ستتدرب على فهرسة المصفوفات مع الهياكل، وتصميم الدوال لمعالجة البيانات، والجمع بين عمليات متعددة لتحليل معلومات المخزون.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
// TODO: قم بتعريف هيكل المنتج (Product struct) هنا
// TODO: قم بتنفيذ دالة findMostExpensive هنا
// TODO: قم بتنفيذ دالة calculateTotalValue هنا
// TODO: قم بتنفيذ دالة findLowStock هنا
int main() {
// إنشاء مصفوفة من 3 منتجات
struct Product inventory[3];
// قراءة المدخلات لكل منتج
for (int i = 0; i < 3; i++) {
scanf("%s", inventory[i].name);
scanf("%f", &inventory[i].price);
scanf("%d", &inventory[i].stock);
}
// TODO: طباعة معلومات كل منتج
// TODO: البحث عن المنتج الأغلى سعراً وطباعته
// TODO: حساب وطباعة القيمة الإجمالية للمخزون
// قراءة حد المخزون المنخفض
int threshold;
scanf("%d", &threshold);
// TODO: البحث عن المنتجات ذات المخزون المنخفض وطباعتها
// TODO: التحقق مما إذا كان المنتج الأغلى سعراً متوفراً بمخزون جيد
return 0;
}جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية