تقسيم المشكلات
قبل أن نكتب الكود نفهم المشكلة ونحلّلها، ثم نقسّمها إلى مهام صغيرة يسهل حلّها.
- تحدّد المدخلات والمعالجة والمخرجات لأي مسألة.
- تستخرج القيود والحالات الحدّية من نص المسألة.
- تفكّك مشكلة كبيرة إلى مهام صغيرة في شجرة.
- تطبّق خطوات منهجية لحل المسائل البرمجية.
١ما هي المشكلة البرمجية؟
البرمجة ليست كتابة أوامر فقط؛ إنها حلّ مشكلات بمساعدة الحاسب. أي برنامج تراه حولك، من آلة حاسبة إلى تطبيق بنك، بدأ بمشكلة يريد أحدهم حلّها.
قبل أن نكتب سطرًا واحدًا من الكود نحتاج أن نفهم المشكلة جيدًا، ثم نقسّمها إلى أجزاء صغيرة. هذا ما يفعله المبرمج المحترف قبل أن يفتح بيئة التطوير.
كل برنامج تقريبًا يمرّ بثلاث مراحل:
٢تحليل متطلبات المشكلة
تحليل المتطلبات يعني أن تقرأ نصّ المسألة وتستخرج منه إجابات أسئلة محددة:
- ما المطلوب بالضبط؟ ما الذي يجب أن يظهر في النهاية؟ (المخرجات)
- ما المعطيات؟ ما البيانات التي سيدخلها المستخدم أو الموجودة مسبقًا؟ (المدخلات)
- ما العلاقة بينهما؟ ما القانون أو الخطوات التي تحوّل المدخلات إلى مخرجات؟ (المعالجة)
- ما الشروط والقيود؟ هل هناك قيم غير مسموحة؟ مثل قسمة على صفر أو درجة سالبة.
مثال: مسألة الزكاة
«اكتب برنامجًا يطلب من المستخدم إدخال مبلغ من المال، ثم يحسب الزكاة الواجبة فيه بنسبة 2.5% ويطبعها.»
مثال: مسألة الخصم
«اكتب برنامجًا يقرأ مبلغ المشتريات، فإذا كان 1000 ريال فأكثر يحصل العميل على خصم 10%، ثم يطبع مبلغ الخصم والمبلغ بعد الخصم. وإذا أُدخل مبلغ صفر أو أقل يطبع: قيمة المشتريات خاطئة.»
| العنصر | التحليل |
|---|---|
| المدخلات | مبلغ المشتريات sales |
| المخرجات | مبلغ الخصم، والمبلغ بعد الخصم، أو رسالة خطأ |
| المعالجة | إذا كان المبلغ ≥ 1000: الخصم = المبلغ × 0.10، وإلا الخصم = 0. ثم المبلغ بعد الخصم = المبلغ − الخصم |
| القيود | المبلغ يجب أن يكون أكبر من صفر |
✍️ نشاط: حلّل مسألة تحويل درجة الحرارة
c.f = c * 1.8 + 32f.٣تفكيك المشكلة الكبيرة إلى مهام صغيرة
التفكيك (Decomposition) هو تقسيم مشكلة كبيرة إلى مشكلات أصغر، كل واحدة منها سهلة الفهم والحل. ثم نقسّم الأجزاء الكبيرة مرة أخرى حتى نصل إلى مهام بسيطة يمكن كتابتها بخطوات قليلة.
مثال من الحياة: «تنظيم رحلة» مشكلة كبيرة، لكنها تصبح سهلة عندما نقسّمها:
- تنظيم رحلة
- تحديد الوجهة
- الحجز
- حجز الطيران
- حجز الفندق
- التجهيز
- تجهيز الحقيبة
- تجهيز المستندات
مثال برمجي: نظام نتائج الطلاب
المطلوب: برنامج يقرأ درجات طالب في ثلاثة اختبارات ويطبع مجموعه ومعدله وتقديره. نفككه هكذا:
- نظام نتائج الطالب
- قراءة البيانات
- قراءة اسم الطالب
- قراءة الدرجات الثلاث
- الحسابات
- حساب المجموع
- حساب المعدل
- تحديد التقدير
- مقارنة المعدل بحدود التقديرات
- عرض النتيجة
- طباعة المجموع والمعدل والتقدير
- قراءة البيانات
كل مهمة في المستوى الأخير بسيطة جدًا، ويمكن أن تصبح سطرًا أو بضعة أسطر من الكود. وهذا ما سنراه الآن.
من التفكيك إلى الكود
هذا البرنامج بجافا يطابق المخطط تمامًا: كل تعليق يمثل مهمة من المهام السابقة. لا تقلق من تفاصيل الكتابة الآن، ستتعلمها في الدروس القادمة. اضغط ▶ شغّل هنا وأدخل ثلاث درجات.
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // قراءة البيانات System.out.println("ادخل ثلاث درجات:"); double a = in.nextDouble(); double b = in.nextDouble(); double c = in.nextDouble(); // الحسابات double sum = a + b + c; double avg = sum / 3; // تحديد التقدير String grade; if (avg >= 90) grade = "ممتاز"; else if (avg >= 80) grade = "جيد جدًا"; else if (avg >= 70) grade = "جيد"; else if (avg >= 60) grade = "مقبول"; else grade = "راسب"; // عرض النتيجة System.out.println("المجموع: " + sum); System.out.println("المعدل: " + avg); System.out.println("التقدير: " + grade); }}
٤خطوات منهجية لحل أي مسألة
استخدم هذه الخطوات الخمس مع كل مسألة في هذا المقرر، وستلاحظ أن الحل يصبح أسهل:
| الخطوة | السؤال الذي تجيب عنه | مثال: مسألة الخصم |
|---|---|---|
| 1. افهم | ما المطلوب؟ ما المعطيات؟ | المطلوب الخصم والمبلغ بعده، والمعطى مبلغ المشتريات |
| 2. حلّل | ما المدخلات والمعالجة والمخرجات والقيود؟ | جدول التحليل في القسم ٢ |
| 3. فكّك | ما المهام الصغيرة؟ | قراءة المبلغ، التحقق منه، حساب الخصم، الطباعة |
| 4. صمّم | ما خطوات الحل بالترتيب؟ | الخوارزمية (الدرس القادم) |
| 5. نفّذ واختبر | هل يعمل البرنامج مع قيم مختلفة؟ | جرّب 500 و1000 و0 و−50 |
✍️ نشاط: فكّك مسألة «فاتورة الكهرباء»
- فاتورة الكهرباء
- قراءة البيانات
- قراءة القراءة السابقة
- قراءة القراءة الحالية
- حساب الاستهلاك
- الاستهلاك = الحالية − السابقة
- التحقق أن الاستهلاك ليس سالبًا
- حساب القيمة
- إذا كان الاستهلاك ≤ 6000: القيمة = الاستهلاك × 0.18
- وإلا: 6000 × 0.18 + (الاستهلاك − 6000) × 0.30
- عرض النتيجة
- طباعة الاستهلاك والقيمة
- قراءة البيانات
توقّع وتحقّق
في مسألة «احسب مساحة مستطيل بعد قراءة طوله وعرضه»، ما المدخلات؟
ما المقصود بتفكيك المشكلة؟
برنامج يقسم عددين. أي حالة حدّية يجب أن ينتبه لها المحلل؟
في أي مرحلة يقع «حساب المعدل = المجموع ÷ 3»؟
الخلاصة
- البرمجة حلّ مشكلات، والفهم يسبق الكود.
- كل برنامج: مدخلات ← معالجة ← مخرجات.
- تحليل المتطلبات يحدد المطلوب والمعطيات والعلاقة بينهما والقيود.
- التفكيك يقسّم المشكلة إلى مهام صغيرة يمكن حلّها واختبارها منفصلة.
- اختبر الحلّ بقيم عادية وقيم حدّية.