📘 شرح الدرس الوحدة 1: حل المشكلات وتصميم الخوارزميات · الدرس 1 من 17
الدرس 1
📋 في الخطة: الوحدة 1. تقسيم المشكلات · ⏱ 1 نظري + 4 عملي

تقسيم المشكلات وتحليل المتطلبات

قبل أن نكتب الكود نفهم المشكلة ونحلّلها، ثم نقسّمها إلى مهام صغيرة يسهل حلّها.

classHello { print("Hi");} Write onceRun anywhere
بعد هذا الدرس ستستطيع أن:
  • تحدّد المدخلات والمعالجة والمخرجات لأي مسألة.
  • تستخرج القيود والحالات الحدّية من نص المسألة.
  • تفكّك مشكلة كبيرة إلى مهام صغيرة في شجرة.
  • تطبّق خطوات منهجية لحل المسائل البرمجية.

١ما هي المشكلة البرمجية؟

البرمجة ليست كتابة أوامر فقط؛ إنها حلّ مشكلات بمساعدة الحاسب. أي برنامج تراه حولك، من آلة حاسبة إلى تطبيق بنك، بدأ بمشكلة يريد أحدهم حلّها.

قبل أن نكتب سطرًا واحدًا من الكود نحتاج أن نفهم المشكلة جيدًا، ثم نقسّمها إلى أجزاء صغيرة. هذا ما يفعله المبرمج المحترف قبل أن يفتح بيئة التطوير.

كل برنامج تقريبًا يمرّ بثلاث مراحل:

📥 المدخلات Inputالبيانات التي يعطيها المستخدم للبرنامج، مثل الدرجات أو المبلغ.
⚙️ المعالجة Processingالعمليات التي يجريها البرنامج على البيانات: حساب، مقارنة، ترتيب.
📤 المخرجات Outputالنتيجة التي يعرضها البرنامج للمستخدم.

٢تحليل متطلبات المشكلة

تحليل المتطلبات يعني أن تقرأ نصّ المسألة وتستخرج منه إجابات أسئلة محددة:

  1. ما المطلوب بالضبط؟ ما الذي يجب أن يظهر في النهاية؟ (المخرجات)
  2. ما المعطيات؟ ما البيانات التي سيدخلها المستخدم أو الموجودة مسبقًا؟ (المدخلات)
  3. ما العلاقة بينهما؟ ما القانون أو الخطوات التي تحوّل المدخلات إلى مخرجات؟ (المعالجة)
  4. ما الشروط والقيود؟ هل هناك قيم غير مسموحة؟ مثل قسمة على صفر أو درجة سالبة.

مثال: مسألة الزكاة

«اكتب برنامجًا يطلب من المستخدم إدخال مبلغ من المال، ثم يحسب الزكاة الواجبة فيه بنسبة 2.5% ويطبعها.»

📥 المدخلات Inputالمبلغ (رقم عشري) يدخله المستخدم.
⚙️ المعالجة Processingالزكاة = المبلغ × 2.5 ÷ 100
📤 المخرجات Outputقيمة الزكاة.

مثال: مسألة الخصم

«اكتب برنامجًا يقرأ مبلغ المشتريات، فإذا كان 1000 ريال فأكثر يحصل العميل على خصم 10%، ثم يطبع مبلغ الخصم والمبلغ بعد الخصم. وإذا أُدخل مبلغ صفر أو أقل يطبع: قيمة المشتريات خاطئة.»

العنصرالتحليل
المدخلاتمبلغ المشتريات sales
المخرجاتمبلغ الخصم، والمبلغ بعد الخصم، أو رسالة خطأ
المعالجةإذا كان المبلغ ≥ 1000: الخصم = المبلغ × 0.10، وإلا الخصم = 0. ثم المبلغ بعد الخصم = المبلغ − الخصم
القيودالمبلغ يجب أن يكون أكبر من صفر
✍️ نشاط: حلّل مسألة تحويل درجة الحرارة
«اكتب برنامجًا يقرأ درجة الحرارة بالمئوي ويحوّلها إلى فهرنهايت.» حدّد المدخلات والمعالجة والمخرجات.
إجابة مقترحة:
📥 المدخلات Inputدرجة الحرارة بالمئوي c.
⚙️ المعالجة Processingf = c * 1.8 + 32
📤 المخرجات Outputدرجة الحرارة بالفهرنهايت f.

٣تفكيك المشكلة الكبيرة إلى مهام صغيرة

التفكيك (Decomposition) هو تقسيم مشكلة كبيرة إلى مشكلات أصغر، كل واحدة منها سهلة الفهم والحل. ثم نقسّم الأجزاء الكبيرة مرة أخرى حتى نصل إلى مهام بسيطة يمكن كتابتها بخطوات قليلة.

مثال من الحياة: «تنظيم رحلة» مشكلة كبيرة، لكنها تصبح سهلة عندما نقسّمها:

  • تنظيم رحلة
    • تحديد الوجهة
    • الحجز
      • حجز الطيران
      • حجز الفندق
    • التجهيز
      • تجهيز الحقيبة
      • تجهيز المستندات

مثال برمجي: نظام نتائج الطلاب

المطلوب: برنامج يقرأ درجات طالب في ثلاثة اختبارات ويطبع مجموعه ومعدله وتقديره. نفككه هكذا:

  • نظام نتائج الطالب
    • قراءة البيانات
      • قراءة اسم الطالب
      • قراءة الدرجات الثلاث
    • الحسابات
      • حساب المجموع
      • حساب المعدل
    • تحديد التقدير
      • مقارنة المعدل بحدود التقديرات
    • عرض النتيجة
      • طباعة المجموع والمعدل والتقدير

كل مهمة في المستوى الأخير بسيطة جدًا، ويمكن أن تصبح سطرًا أو بضعة أسطر من الكود. وهذا ما سنراه الآن.

من التفكيك إلى الكود

هذا البرنامج بجافا يطابق المخطط تمامًا: كل تعليق يمثل مهمة من المهام السابقة. لا تقلق من تفاصيل الكتابة الآن، ستتعلمها في الدروس القادمة. اضغط ▶ شغّل هنا وأدخل ثلاث درجات.

Main.java
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);    }}
Output – JavaApplication (run)×
run:
ادخل ثلاث درجات:
90
85
80
المجموع: 255.0
المعدل: 85.0
التقدير: جيد جدًا
BUILD SUCCESSFUL (total time: 0 seconds)

٤خطوات منهجية لحل أي مسألة

استخدم هذه الخطوات الخمس مع كل مسألة في هذا المقرر، وستلاحظ أن الحل يصبح أسهل:

الخطوةالسؤال الذي تجيب عنهمثال: مسألة الخصم
1. افهمما المطلوب؟ ما المعطيات؟المطلوب الخصم والمبلغ بعده، والمعطى مبلغ المشتريات
2. حلّلما المدخلات والمعالجة والمخرجات والقيود؟جدول التحليل في القسم ٢
3. فكّكما المهام الصغيرة؟قراءة المبلغ، التحقق منه، حساب الخصم، الطباعة
4. صمّمما خطوات الحل بالترتيب؟الخوارزمية (الدرس القادم)
5. نفّذ واختبرهل يعمل البرنامج مع قيم مختلفة؟جرّب 500 و1000 و0 و−50
✍️ نشاط: فكّك مسألة «فاتورة الكهرباء»
«برنامج يقرأ رقم العداد السابق والحالي، ويحسب الاستهلاك، ثم يحسب قيمة الفاتورة بسعر 0.18 ريال لكل كيلوواط حتى 6000، و0.30 لما زاد عن ذلك، ثم يطبع الاستهلاك والقيمة.» ارسم شجرة التفكيك.
إجابة مقترحة:
  • فاتورة الكهرباء
    • قراءة البيانات
      • قراءة القراءة السابقة
      • قراءة القراءة الحالية
    • حساب الاستهلاك
      • الاستهلاك = الحالية − السابقة
      • التحقق أن الاستهلاك ليس سالبًا
    • حساب القيمة
      • إذا كان الاستهلاك ≤ 6000: القيمة = الاستهلاك × 0.18
      • وإلا: 6000 × 0.18 + (الاستهلاك − 6000) × 0.30
    • عرض النتيجة
      • طباعة الاستهلاك والقيمة

توقّع وتحقّق

في مسألة «احسب مساحة مستطيل بعد قراءة طوله وعرضه»، ما المدخلات؟

المدخلات هي البيانات التي يعطيها المستخدم: الطول والعرض. والمساحة مخرجات.

ما المقصود بتفكيك المشكلة؟

التفكيك تقسيم المشكلة الكبيرة إلى مهام صغيرة واضحة.

برنامج يقسم عددين. أي حالة حدّية يجب أن ينتبه لها المحلل؟

القسمة على صفر غير ممكنة، فهي قيد يجب معالجته.

في أي مرحلة يقع «حساب المعدل = المجموع ÷ 3»؟

الحساب عملية يجريها البرنامج على البيانات، فهو معالجة.

الخلاصة

انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←