المهارات الرقمية12 فصل أول

الثاني عشر خطة جديدة

icon

 

حل المسألة (Problem Solving)

منذ ما يقارب 12 عاما في المدرسة ومصطلح "حل المسائل " يتردد على مسامعنا، سواء كانت مسائل الرياضيات والعلوم، أو مسائل مرتبطة بباقي المباحث المدرسية. فما هي المسألة؟ وما المراد ب حل المسألة؟

يمكن تعريف المسألة : بأنها الهدف او الناتج المراد الوصول إليه من خلال إتباع مجموعة من الخطوات. وقد تتطلب هذه الخطوات القيام بعمليات حسابية (الجمع،الطرح،القسمة،الضرب،...) أو عمليات منطقية (المقارنة،صواب،خطأ، ...).

وكما تعلمنا،فإنّ المسألة لها ناتج صحيح واحد متفق عليه،إلا أن لها عدة طرق في الحل،أي يمكن التوصل الى الناتج من خلال أكثر من طريقة صحيحة. إلا أن هناك طرق تعتبر أفضل من غيرها إعتمادا على :

  • الوقت المستغرق في حل المسألة (كلما قل الوقت كلما كانت الطريقة ذات فاعلية أكبر)
  • استخدام الموارد المتاحة (كلما قلّ إستخدام الموارد كلما كانت الطريقة أكثر فاعلية)

واختيار الطريقة الأفضل يعتمد على كفاءة الشخص الذي يقوم بحل المسألة ومدى فهمه لها.

 

خطوات حل المسألة

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

 

 

 

 

 

 

 

 

 

وفيما يلي شرحًا توضيحيًا لكل خطوة من هذه الخطوات:

 

 

الخطوة الأولى: فهم المسألة وتحليلها.

الخطوة الأولى: فهم المسألة وتحليلها.

طالما تردد على مسامعنا مقولة  "أن فهم السؤال أكثر من ثلثي الإجابة" ، لذا تعتبر خطوة فهم المسألة وتحليلها الخطوة الرئيسة الأولى عند القيام بحل أي مسألة. و يمكن فهم المسألة   من خلال :

  • قراءة المسألة جيدا وفهمها على النحو الصحيح.
  • وضع المعطيات الموجودة في المسألة وترتيبها بالشكل الواضح قبل البدء بالحل.

ومن ثم  تكون مخرجات هذه الخطوة كل مما يلي :

  • المدخلات
  • المخرجات
  • طرائق المعالجة المختلفة

 

مثال:

المسألة: ما هو حاصل ضرب العدد A في العدد B ؟

تحليل المسألة:

المدخلات : العدد  A  و العدد  B

المخرجات : حاصل ضرب العددين ويرمز له بالرمز  C

طريقة المعالجة :    C= A*B

 

الخطوة الثانية: كتابة الخوارزمية.

والآن، بعد أن قمنا بتحليل المسألة وفهمها وتحديد كل من المدخلات والمخرجات الخاصة بالمسألة، بالإضافة الى طريقة معالجة المسألة، حان الوقت لتمثيل المسألة من خلال طريقة منظمة ومنطقية ألا وهي الخوارزمية.

هناك طريقتان لكتابة الخوارزمية للمثال أعلاه هما:

أولاً: الخوارزمية شبه الرمزية (Pseudocode): وهي طريقة للتعبير عن الخوارزمية من خلال لغة وسيطة تشبه لغة البرمجة في طريقة كتابتها إلا انها لا تلنزم بقواعد البرمجة المرتبطة باللغة والتي يجب اتباعها عند كتابة كود البرمجة.

والمثال التالي يمثل حلًا للمثال أعلاه من خلال كتابة الخوارزمية شبه الرمزية:

 

 

 

 

ثانيًا:مخطط سير العمليات (Flowchart): وهي عبارة عن طريقة تمثيل رسومي لخطوات الخوارزمية من خلال استخدام الأشكال الهندسية المُتعارَف عليها، بالإضافة الى مجموعة من الأسهم والخطوط التي تُحدِّد سَيْر الخوارزمية.

ويمثل الشكل التالي حل المثال أعلاه (حاصل ضرب عددين) من خلال كتابة مخطط سير العمليات:

ولنتذكر سويا  الأشكال الهندسية الأساسية المُتعارَف عليها عند كتابة مخطط سير العمليات من خلال الجدول التالي:

إضافة الى بعض الرموز القياسية الإضافية التي ممكن استخدامها عند رسم مخطط سير العمليات والتي يمكن التعرف عليها من خلال الجدول التالي:

 

 

الخطوة الثالثة: كتابة البرنامج باستخدام إحدى لغات البرمجة.

بعد الانتهاء من من تمثيل الخوارزمية بالشكل الذي نريد،تأتي مرحلة تحويل هذه الخطوات الى جمل برمجية حقيقية باستخدا احدى لغات البرمجة التي تعرفنا عليها مثل لغة جافا (Java) ولغة البرمجة سي + + (C++) ولغة البرمجة بايثون (Python).

وحسب مثال حاصل ضرب عددين الذي طرحناه،فإن ترجمة الخوارزمية الى جمل برمجية من خلال لغة البرمجة بايثون (Python) التي تعلمناها في الصف الحادي عشر سوف تكون كما في الشكل التالي:

 

 

 

الخطوة الرابعة: تنفيذ البرنامج واختبار صِِحََّته.

بعد الانتهاء من كتابة البرنامج،ننتقل الى مرحلة تشغيل البرنامج وتنفيذه لغايات التحقق من صحته.وفي هذه المرحلة لا بدّ من القيام بغدخال مدخلات (معطيات) مختلفة تحاول أن تغطي جميع الحالات التي ممكن أن يخدمها البرنامج ومراقبة أن البرنامج يعمل بصورة صحيحة ويُعطي النتائج المتوقعة منه.

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

وبالعودة الى مثالنا السابق،دعنا نقم باختباره من خلال إدخال المعطيات التالية:

أولاً: أنفذ البرنامج من خلال إدخال العدد 4 والعدد 5، تكون النتيجة كما يلي:

 

 

ثانياً: أنفذ البرنامج من خلال إدخال العدد -3 والعدد 7، تكون النتيجة كما يلي:

 

 

ثالثًا: أنفذ البرنامج من خلال إدخال عددين سالبين هما العدد -20 والعدد -13، تكون النتيجة كما يلي:

 

 

الخطوة الخامسة: التوثيق.

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

وتشمل عملية التوثيق :

  • كتابة تقرير يوضج تفاصيل البرنامج  خطوة بخطوة من حيث مبدأ عمله و كيفية تشغيله.
  • إضافة جمل التعليقات داخل كود البرنامج  وذلك للتسهيل لمن يقرأ البرنامج مستقبلا لغايات فهمه أو التعديل والتطوير عليه.
  • توثيق خارجي من خلال توفير ما يسمى بدليل المستخدم

ويظهر الشكل التالي مثالًا يبين عملية التوثيق للبرنامج الذي يقوم بايجاد ناتج حاصل ضرب عددين:

 

 

 

 

 

 

 

الخوارزمية للجمل الشرطية:

إن المقصود بالجمل الشرطية تلك الجمل التي يتم وضع شروط تحدد متى يمكن تنفيذ الكود،ولقد تعرفنا على انواعها سابقا بالتفصيل ،

و لنتذكر صيغتها العامة من خلال الشكل التالي:

إذن،للجمل الشرطية دور كبير في عملية إتخاذ

القرار وتنفيذ الأوامر، اذ أن تنفيذ الأمر يعتمد على تحقيق الشرط من عدمه.

 

 

 

 

 

 

وفي عالم الخوارزميات فإن الشكل   المعيني  هو المستخدم في مخطط سير العمليات لتمثيل أنّ هناك قرار يجب إتخاذه اعتماداً على شرط معين  وعليه يمكن تنفيذ الأوامر .

وكما نرى فإن شكل المعين يستقبل مدخلاً من المرحلة السابقة، ويطبق الشرط على هذا المدخل ، فإن كان المدخل يحقق الشرط (الشرط صحيح ويمثل نعم) ،فسوف يتم تنفيذ أمر أو مجموعة من الاوامر.

أما في حال كان المدخل لا يحقق الشرط،(الشرط غير صحيح ويمثل لا )،فسوف يتم تنفيذ مجموعة أوامر أخرى.

 

والشكل التالي يمثل خوارزمية تعمل على تحديد فيما إذا كان العدد موجبًا أو سالبًا:

ولنتتبع الخوارزمية من خلال المثال التالي:

1.إبدأ

2.أدخل قيمة X ولتكن هنا العدد 4

3.والآن،هل الرقم 4 اكبر او يساوي صفر؟

4. الإجابة : نعم ، إذن تحقق الشرط

5. والان يتم طباعة عبارة (عدد موجب)

 

ملاحظة: إن مخطط سير العمليات الذي يحتوي على قراركما في الشكل الذي في الأعلى يطلق عليه اسم (مخطط سير عمليات تفرعي ).

 

مثال:

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

أُُطبِِّق خطوات حََلِِّ المسألة على المسألة الآتية:

أُُدخِِل عددًًا صحيحًًا، وليكن X، ثم أتاكد  إذا كان هذا العدد يقبل القسمة على العدد (2)  والعدد (3)  معًًا من خلال مراعاة الشروط التالية:

1.إذا كان العدد X يقبل القسمة على العدد 2 والعدد 3، فإنَّني أطبع العبارة الآتية:

."Divisible by 2 and 3, then it’s divisible by 6"

2.إذا كان العدد X يقبل القسمة على العدد 2 فقط، فإنَّني أطبع العبارة الآتية:

."Divisible by 2 only"

3.إذا كان العدد X يقبل القسمة على العدد 3 فقط، فإنَّني أطبع العبارة الآتية:

."Divisible by 3 only"

4.إذا كان العدد X لا يقبل القسمة على أيٍّ من العدد 2 والعدد 3، فإنَّني أطبع العبارة الآتية:

."Not divisible by 2 and not divisible by 3, then not divisible by 6"

 

الحل:

لتنذكر أن خطوات حل المسألة (5) خطوات هنّ:

 

 

 

الخطوة الأولى:  فهم المسألة وتحليها:

الهدف من المسألة هو معرفة اذا ما كان العدد التي سوف يتم إدخاله يقبل القسمة على العدد (6) من خلال التحقق من قابليته للقسمة على كل من العدد (2) والعدد (3) في نفس الوقت، ومن ثم طباعة الجملة التي تعبر عن كل حالة تنطبق على العدد الذي تم إدخاله.

المدخلات: العدد X

المخرجات: احدى العبارات التي  تحقق أحد الشروط و تعتمد على قيمة X التي تم إدخالها

 

الخطوة الثانية:  كتابة الخوارزمية:

كما تعلمنا سابقًا يمكن كتابة الخوارزمية من خلال طريقتين:

أ.الخوارزمية شبه الرمزية (pesucode)    

ب.مخطط سير العمليات (Flowchart)

 

أولاً: الخوارزمية شبه الرمزية (pesucode)

. 1أبدأ.

. 2أُدخِل قيمة .X

. 3أختبر: هل تقبل قيمة X القسمة على العدد 2؟ إذا كانت الإجابة )نعم(، فإنَّني أذهب إلى

الخطوة رقم  (4) ، وإذا كانت الإجابة )لا(، فإنَّني أذهب إلى الخطوة رقم (7).

. 4أختبر: هل تقبل قيمة X القسمة على العدد 3؟ إذا كانت الإجابة )نعم(، فإنَّني أذهب إلى

الخطوة رقم (5) ، وإذا كانت الإجابة )لا(، فإنَّني أذهب إلى الخطوة رقم (6)

. 5أطبع العبارة الآتية: " Divisible by 2 and 3, then it’s divisible by 6 "، ثم أذهب إلى الخطوة

رقم (10)

. 6أطبع العبارة الآتية: " Divisible by 2 only "، ثم أذهب إلى الخطوة رقم (10)

. 7أختبر: هل تقبل قيمة X القسمة على العدد 3؟ إذا كانت الإجابة )نعم(، فإنَّني أذهب إلى

الخطوة رقم (8) ، وإذا كانت الإجابة )لا(، فإنَّني أذهب إلى الخطوة رقم (9)

8.أطبع العبارة الآتية: " Divisible by 3 only "ثم أذهب إلى الخطوة رقم (10)

9.أطبع العبارة الآتية: " not divisible by 2 and not divisible by 3, then not divisible by 6 "، ثم أذهب إلى الخطوة رقم (10)

10.أتوقف

 

ب.مخطط سير العمليات (Flowchart)

يبين الشكل التالي مخطط سير العمليات للمسألة التي تهدف للتحقق من قابلية قسمة عدد على العدد 6 من خلال التحقق من قابلية قسمته على العدد (2) والعدد (3) معًا:

 

 

 

 

 

 

 

 

 

 

 

 

 

الخطوة الثالثة:  كتابة البرنامج

والآن ،سوف نقوم بتحويل مخطط سير العمليات الى برنامج مكتوب بإحدى لغات الحاسوب، ونظرا لكوننا تعلمنا لغة بايثون (Python) فسوف نكتب البرنامج بهذه اللغة كما يلي:

X = int(input("Enter a number: "))

if X % 2 == 0:

     if X % 3 == 0:

          print("Divisible by 2 and 3, then it’s divisible by 6")

     else:

         print("Divisible by 2 only")

else:

    if X % 3 == 0:

         print("Divisible by 3 only")

    else:

         print("Not divisible by 2 and not divisible by 3, then not divisible by 6")

 

 

الخطوة الرابعة:  تنفيذ البرنامج

والأن،سوف ننفذ البرنامج من خلال محرر بايثون للتأكد من صحة البرنامج من خلال إدخال العدد (9) والنتيجة كما يلي:

 

 

 

 

 

 

 

والآن ،لنقم بإدخال الرقم (12) ،ولنرى نتيجة التنفيذ:

 

 

والآن لنقم بإدخال الرقم (16) ولنرى نتيجة التنفيذ:

 

 

 

 

الخوارزمية لجمل التكرار:

سبق وأن تعلمنا في الصفوف السابقة عن مفهوم الحلقات والذي يقصد به عملية تكرار تنفيذ مجموعة من اﻷوامر في البرنامج ، حيث يتم إ ستخدام الحلقات ( Loops لجعل الكود يعاد تنفيذه ضمن شروط معينة.

وتعرفنا الى أنواع من هذه الحلقات في

لغة البرمجة بايثون (python) والتي تم تصنيفها الى :

 

 

 

 

 

والشكل التالي يبين مخطط سير العمليات لجملة التكرار:

 

 

 

 

 

 

 

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

وحتى نستطيف فهم الأمر بشكل أوضح، لنقم بحل المثال التالي:

مثال:

 

أحلل المسألة الآتية باستخدام خطوات حل المسألة:

على المستخدم إدخال مجموعة من الأعداد،ثم تصنيفها إلى أعداد موجبة وأعداد سالبة والتوقف عن عملية الإدخال عند إدخال العدد (0).

الحل:

الخطوة الأولى:  فهم المسألة وتحليها:

تحديد المسألة:ان المسألة المطلول حلها هنا تتضمن عملية تكرار إدخال مجموعة من الارقام، وفي كل مره يدخل رقم يجب معرفته هل هو سالب أو موجب (والعملية تتم كما تعلمنا من خلال المثال السابق،من خلال مقارنته مع الرقم صفر). وتتوقف عملية إدخال الأرقام عند إدخال المستخدم للرقم (0).

المدخلات: مجموعة من الاعداد، ولأن العملية سوف تتكرر،إذن نحتاج الى تعريف متغير واحد فقط وليكن اسمه (Num) نستخدمه في كل مرة نريد فيها إدخال عدد جديد.

المخرجات:

1.إذا كان العدد موجبًا (أكبر من 0) ، نطبع العدد الذي تم إدخاله ونطبع كلمة (موجب)

2. إذا كان العدد سالبًا (أصغر من 0) ، نطبع العدد الذي تم إدخاله ونطبع كلمة (سالب)

 

الخطوة الثانية:كتابة الخوارزمية

أ.الخوارزمية شبه الرمزية

. 1أبدأ.

. 2أُدخِل قيمة .Num

. 3هل Num=0 ؟ إذا كانت الإجابة )نعم(، فإنَّني أذهب إلى الخطوة رقم (8)،و إذا

كانت الإجابة )لا(، فإنَّني أذهب إلى الخطوة رقم (4)

. 4هل 0< Num ؟ إذا كانت الإجابة )نعم(،فإنَّني أذهب إلى الخطوة رقم (5)، وإذا

كانت الإجابة )لا(، فإنَّني أذهب إلى الخطوة رقم (6)

  5. أطبع العدد، ثم أطبع كلمة )موجب(،ثم أذهب إلى الخطوة رقم (7)

. 6أطبع العدد، ثم أطبع كلمة )سالب(، ثم أذهب إلى الخطوة رقم (7)

. 7أذهب إلى الخطوة رقم (2)

. 8أتوقَّف.

ب.مخطط سير العمليات(Flowchart)

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

 

 

 

 

 

 

 

 

 

 

 

 

 

Jo Academy Logo