الدرس الثاني: التفكير الخوارزمي، حل المشكلات، وخرائط التدفق القياسية
يمثل التفكير الخوارزمي العمود الفقري والمهارة الذهنية الأهم في علم الحاسوب والبرمجة الحديثة. قبل الشروع في كتابة سطر برمجي واحد، يتعين على المطور تحليل المشكلة وتفكيكها إلى مدخلات محددة، وعمليات معالجة منطقية، ومخرجات مطلوبة، وصياغة خوارزمية دقيقة ومرتبة زمنياً لا تحتمل اللبس أو الغموض. وتُعد خرائط التدفق (Flowcharts) التمثيل البياني والهندسي الأكثر وضوحاً لتجسيد هذه الخوارزميات؛ حيث توظف أشكالاً هندسية قياسية معتمدة عالمياً كالشكل البيضاوي للبداية والنهاية، ومتوازي الأضلاع لعمليات الإدخال والإخراج، والمستطيل للمعالجة الحسابية، والمعين لاتخاذ القرار والتفرع الشرطي، وخطوط التدفق لبيان مسارات التكرار وحلقات الدوران المنطقية.
1. منهجية حل المشكلات والخوارزميات
المشكلة (Problem): هدف أو ناتج مطلوب الوصول إليه باتباع خطوات محددة وفق معطيات معينة.
- تحديد المشكلة: تعريف المدخلات المتوفرة والمخرجات المستهدفة وعمليات المعالجة.
- إعداد الخوارزمية (Algorithm): خطوات منطقية متسلسلة ومحددة بدقة تنتهي بحل المشكلة (منسوبة للعالم المسلم الخوارزمي).
- رسم خريطة التدفق (Flowchart): تمثيل تخطيطي بالرسم يعتمد على أشكال قياسية.
- كتابة الكود البرمجي (Coding): ترجمة الخريطة إلى لغة برمجة كالبايثون.
- اختبار البرنامج وتصحيح الأخطاء (Debugging): إدخال بيانات معلومة النتائج مسبقاً لاكتشاف أية أخطاء حسابية أو منطقية.
2. الأشكال القياسية لخرائط التدفق
| الشكل الهندسي | الاسم والرمز | الوظيفة البرمجية |
|---|---|---|
| شكل بيضاوي | طرفي (Terminal) | بداية ونهاية خريطة التدفق (Start / End) |
| متوازي أضلاع | إدخال / إخراج (I/O) | إدخال بيانات (Read/Input) أو طباعة (Print/Output) |
| مستطيل | معالجة (Process) | عمليات حسابية (C = A + B) أو إسناد قيم (X = 5) |
| شكل معين | قرار (Decision) | مقارنة شرطية يتفرع منها مساران (Yes / No) |
| الأسهم | خط التدفق (Flow Line) | تحديد اتجاه تسلسل وسريان تنفيذ العمليات |
تمرين خوارزمي 1: حساب مساحة المستطيل
المسألة: اكتب الخوارزمية وصمم خريطة التدفق لحساب مساحة مستطيل (Area) بمعلومية طوله (L) وعرضه (W).
1. البداية (Start) [شكل بيضاوي].
2. اقرأ الطول والعرض: Read L, W [متوازي أضلاع].
3. احسب المساحة: Area = L * W [مستطيل].
4. اطبع المساحة: Print Area [متوازي أضلاع].
5. النهاية (End) [شكل بيضاوي].
تمرين خوارزمي 2: تحديد حالة الطالب (ناجح / راسب)
المسألة: صمم خطوات خوارزمية لتحديد ما إذا كان الطالب ناجحاً إذا كانت درجته (Degree) أكبر من أو تساوي 50.
1. ابدأ (Start).
2. إدخال الدرجة: Input Degree.
3. قرار [معين]: هل Degree >= 50 ؟
• نعم (Yes): اطبع "ناجح" ➔ اذهب للنهاية.
• لا (No): اطبع "راسب" ➔ اذهب للنهاية.
4. توقف (End).
تمرين خوارزمي 3: طباعة الأعداد من 1 إلى 5 (تكرار)
المسألة: صمم خريطة تدفق لطباعة الأعداد من 1 إلى 5 باستخدام حلقة تكرار (Loop).
1. ابدأ (Start).
2. تهيئة العداد: N = 1 [مستطيل].
3. اطبع قيمة N: Print N [متوازي أضلاع].
4. زيادة العداد: N = N + 1 [مستطيل].
5. شرط [معين]: هل N <= 5 ؟
• نعم (Yes): ارجع إلى الخطوة 3.
• لا (No): اذهب إلى النهاية (End).
تمرين خوارزمي 4: إيجاد العدد الأكبر بين عددين
المسألة: صمم خوارزمية تطبع العدد الأكبر بين عددين مختلفين A و B.
1. ابدأ (Start).
2. اقرأ العددين: Input A, B.
3. شرط: هل A > B ؟
• نعم: Print "A is Greater".
• لا: Print "B is Greater".
4. نهاية (End).
تمرين خوارزمي 5: حساب مجموع الأعداد الفردية
المسألة: تتبع قيمة المتغير Sum عند انتهاء الحلقة: Sum=0, i=1; طالما i<=5: Sum=Sum+i, i=i+2.
• الدورة 1: i = 1 ⇐ Sum = 0 + 1 = 1 ⇐ i تصبح 3.
• الدورة 2: i = 3 ⇐ Sum = 1 + 3 = 4 ⇐ i تصبح 5.
• الدورة 3: i = 5 ⇐ Sum = 4 + 5 = 9 ⇐ i تصبح 7.
• عند i = 7 الشرط خاطئ فتتوقف الحلقة. القيمة النهائية لـ
Sum = 9.
تمرين خوارزمي 6: كشف وتصحيح الخطأ المنطقي
المسألة: مبرمج كتب خوارزمية لحساب متوسط 3 أعداد بالمعادلة: Avg = X + Y + Z / 3. أين الخطأ؟ وكيف يصحح؟
• الخطأ: ترتيب أسبقية العمليات؛ الحاسوب يقسم Z على 3 أولاً ثم يجمع الناتج مع X و Y.
• التصحيح: استخدام الأقواس لجمع الأعداد أولاً:
Avg = (X + Y + Z) / 3.
تمرين خوارزمي 7: تمييز العدد الزوجي والفردي
المسألة: ما المعيار الرياضي المستخدم داخل رمز المعين (القرار) لفحص ما إذا كان العدد الصحيح N زوجياً أم فردياً؟
• نستخدم عملية باقي القسمة (Modulus):
N % 2 == 0.• إذا كان الباقي صفراً (True) فالعدد زوجي (Even)، وإذا كان 1 (False) فالعدد فردي (Odd).
تمرين خوارزمي 8: تفادي الحلقة اللانهائية (Infinite Loop)
المسألة: إذا نسي المبرمج كتابة خطوة زيادة العداد i = i + 1 داخل حلقة التكرار، فما الأثر البرمجي؟
• تظل قيمة العداد ثابتة عند قيمتها الأولية، ويظل شرط الحلقة محققاً دائماً (True).
• يدخل البرنامج في حلقة لا نهائية (Infinite Loop) لا تتوقف، مما يؤدي لاستهلاك الذاكرة والمعالج وتجمد التطبيق.
اضغط على أي بطاقة لاكتشاف المعنى الدقيق، واضغط على أيقونة الصوت للاستماع للنطق:
اضغط على الإجابة لتتحقق من فهمك وتكتشف التفسير النموذجي فورياً: