كما سبق واتفقنا، لبلوغ الهدف:هناك أكثر من مسار وأكثر من طريقة.وتماما في عالم الحاسوب،هناك عدة طرق للقيام بانجاز مهمة معينة،أو حل مشكلة محددة.ونظرا لوجود أكثر من طريقة، هذا يعني وجود أكثر من خوارزمية حل.إلا أن كل خوارزمية لها مجموعة من نقاط القوة، ومجموعة من نقاط الضعف، وهذا ما يجعلنا نختار أو نفضل خوارزمية على أخرى اعتماداً على أداء الخوارزمية بما يتوافق مع متطلباتنا.
إنّ ما سبق كله يصب في ما يسمى تصميم الخوارزميات، وهي إحدى الخطوات الأساسية في تطوير الخوارزمية والتي من خلالها يتم تحديد الخوارزمية الافضل اعتماداً على مجموعة من المعايير والعوامل والتي سوف نتعرف عليها هنا.
عواملُ اختيارِ الخوارزميّةِ الأفضلِ
عند اختيارك كمبرمج لخوارزمية معينة للقيام بحل مشكلة، يجب ان تكون على دراية كاملة بالمشكلة والظروف والمعايير المرتبطة بها، إضافة الى مراعاة الموارد المتوفرة لديك،حيث ان معرفتك بهذه الأمورلها أثر كبير في أداء النظام وسرعته والذي بناء عليه يمكن رفع كفاءة النظام أثناء حل المشكلة.
واضافة الى ما سبق،هناك مجموعة من العوامل التي يجب مراعاتها أثناء اختيار الخوارزمية منها:
أمثلة للمقارنة بين الخوارزميات
إن اختيارك للخوارزمية الصحيحة يعتمد على مقارنة الخوارزميات تبعا للعوامل الاربعة التي شرحناها،وفيما يلي مثال توضيحي:
المشكلة (1): تصنيف الأعداد الفردية والزوجية
لو طلب منك إعداد خوازمية تقوم بقراءة أي عدد ومن ثم معرفة إذا ما كان هذا العدد زوجي ام فردي ومن ثم طباعة عبارة:
العدد زوجي،في حال كان العدد المدخل زوجياً
العدد فردي، في حال كان العدد فردياً
هناك أكثر من طريقة للقيام بهذا الامر
الطريقة الاولى (الخوارزمية أ):
الطريقة الثانية (الخوارزمية ب):
كما تلاحظ:
كلا الخوارزميتين تتفقان في طريقة أخذ المدخلات وإخراج النتائج،إلا أنها تختلف في آلية التحقق، حيث:
الخوارزمية الأولى تعتمد فكرة القسمة والتحقق من باقي القسمة
بينما الخوارزمية الثانية تعتمد فحص رقم الآحاد من أي عدد يتم إدخاله ومقارنته مع مجموعة محددة من الاعداد الفردية والزوجية.
إذن دعنا نطبق المعايير السابقة لإختيار الخوارزمية الأفضل:
مما سبق،نرى ان الخوارزمية (أ) تفوقت في معيارين على الخوارزمية (ب)، بينما تعادلوا في المعياريين الآخرين،وعليه نستطيع أن نختار الخوارزمية (أ) لحل المشكلة لدينا.
المشكلة (2): إيجاد الوسط الحسابي لمجموعة من الأعداد
حسب خطوات كتابة الخوارزمية التي تعلمناها في الدرس السابق،فإن عملية تمثيل الخوارزمية يسبقها ثلاث عمليات رئيسة هي:
1.عملية تحديد المشكلة 2.عملية تجزئة المشكلة 3.عملية تصميم الخوارزمية (مسار التحكم)
والآن،لنطبق هذه الخطوات على المشكلة التي لدينا قبل الشروع بكتابة الخوارزمية
أولاً: عملية تحديد المشكلة
ملاحظة: المتوسط الحسابي لمجموعة أعداد،هو حاصل جمع مجموعة الأعداد مقسوماً على عدد الأعداد لدينا
ثانياً: تجزئة المشكلة
حت نقوم بحل المشكلة،سوف نعمل على تقسيمها الى خطوات أصغر على النحو التالي:
ثالثاً: مسار التحكم
كما تعلمنا في الدرس السابق،فإن خطوة مسار التحكم تحتوي على ثلاثة عناصر هم:
1.التتابع 2.الاختيار 3.التكرار
والآن،بعد ان انتهينا من الخطوات الثلاث ،دعنا نقوم باقتراح أكثر من خوارزمية لحل المشكلة التي لدينا، ومن ثم مقارنة هذه الخوارزميات حسب المعايير التي تعلمناها سابقاً ومعرفة أيهما أفضل .
الخوارزمية الأولى:
ولنحاول تطبيق مثال عليها:
1.ادخل مجموعة الاعداد المراد ايجاد الوسط الحسابي لها
مجموعة الأعداد هي : (10،20،30 )
2.قم بجمع الاعداد مع بعضها
المجموع هو 10+20+30 = 60
3.قم بعد الأعداد التي قمت بإدخالها
عدد الأعداد = 3
4.قم بحساب المتوسط من خلال قسمة المجموع على العدد
المتوسط هو: 60/3 =20
5.قم بإظهار المخرجات التي لديك
المخرجات : المتوسط هو 20
الخوارزمية الثانية:
ولنحاول تطبيق نفس المثال السابق عليها:
1.ادخل مجموعة الاعداد المراد ايجاد الوسط الحسابي لها
مجموعة الأعداد هي : (10،20،30 )
2.قم بجمع الاعداد مع بعضها باستخدام حلقة:
المجموع في البداية يكون = 0
نقوم بادخال اول رقم 10 ونضيفه الى المجموع
المجموع= 0+ 10 =10
نقوم بادخال اول رقم 20 ونضيفه الى المجموع
المجموع= 10+ 20 =30
نقوم بادخال اول رقم 30 ونضيفه الى المجموع
المجموع= 30+ 30 =60
3.قم بعد الأعداد التي قمت بإدخالها
عدد الأعداد = 3
4.قم بحساب المتوسط من خلال قسمة المجموع على العدد
المتوسط هو: 60/3 =20
5.قم بإظهار المخرجات التي لديك
المخرجات : المتوسط هو 20
والأن دعنا نقوم بمقارنة كل من الخوارزمية إ والخوارزمية ب لمعرفة أيها أفضل في حل المشكلة التي لدينا
نستنتج:
أن الخوارزمية () هي أسرع وأسهل في التنفيذ في حال وجود مجموعة صغيرة من الأعداد
أما
الخوارزمية (ب): فهي أفضل في حال وجود مجموعة كبيرة من الأعداد، إلا أنها أبطأ
المتغيرِ البرمجيِّ
ما هو المتغير البرمجي؟
المتغير هو مكان يتم حجزه في الذاكرة لغايات حفظ ما بداخله من بيانات يمكن تغييرها. مثل (س) في مثالنا الاول(الأعداد الزوجية والفردية).
وكل متغير له ثلاث مكونات أساسية هي:
اسم المتغير : هو الاسم الذي نطلقه على المتغير لتمييزه عن غيره من المتغيرات (س،ص،X,Y) . وكل متغير يكون له اسم فريد يميزه عن غيره.ومن خلال هذا الاسم يمكن الوصول الى المتغير سواء لقراءة ما بداخله،او للكتابة عليه وتغيير قيمته.
ويعتمد المبرمجون كثيرا على اسم المتغير في عمليات البرمجة وكتابلة الكود.
قيمة المتغير: البيانات التي تم تخزينها داخل المتغير.فمثلا لتخزين معدل طالب حصل على 95 ،يكون اسم المتغير معدل وقيمة المتغير 95.
ويتم تعيين قيمة المتغير من خلال الطرق التالية:
1.أعطاء قيمة ثابتة اللمتغير من خلال استخدام إشارة المساواة، مثل:
س=10
المعدل =98
الطول =178.5
2.أو من خلال عملية الإدخال،حيث كل لغة برمجة لها صيغة معينة للإدخال،مثل:
أدخل المعدل
INPUT average
READ name
ويتم استدعاء قيمة المتغير(معرفة ما تم تخزينه) من خلال عدة طرق،مثلاً:
1.الطباعة:
اطبع average
PRINT name
2.توظيفه في عمليات حسابية
X= X+ average
Z= Z * Y
وأخيراً،يمكن تغيير قيمة المتغير أيضا من خلال:
1.استخدام اشارة المساواة مثلا
قيمة X التي تم إدخالها هي 50
لتغيير قيمة بدل X بدل 50 الى 90 ، كل ما علينا هو كتابة العبارة التالية:
X=90 حيث يتم حذف القيمة الوالى ويخزن مكانها القيمة الجديدة.
2.من خلال العمليات الحسابية على المتغير مثلا
X=X+20
القيمة الأولى ل X تساوي 50 ، بعد تنفيذ العملية الحسابية تصبح قيمة X هي 70
3.من خلال عمليات إعادة الادخال او التعليمات البرمجية،مثلا
Read X هنا قيمة X سوف تتغير حسب القيمة التي سوف يقرأها البرنامج
نوع المتغير: نوعية البيانات التي يُسمح بتخزينها داخل المتغيرمثل: أرقام صحيحة،نصوص،أرقام عشرية،قيم منطقية (صح ،خطأ). وفيما يلي جدول يُظهر أكثر أنواع البيانات التي يتم إستخدامها في البرامج:
تختلف لغات البرمجة في تعاملها مع أنواع البيانات للمتغيرات،فبعض لغات البرمجة مثل (python,javascript,php) لا تطلب منك تحديد نوع المتغير أثناء تعريفه،وإنما تقوم اللغة نفسها بتحددي نوع المتغير حسب القيمة المخزنة بداخله.
ولغات برمجية أخرى مثل (C,Java) تجبرك على تحديد نوع المتغير منذ بداية تعريفه وقبل تخزين البيانات بداخله.
تتبعُ الخوارزميّةِ (Tracking Algorithm)
والان بعد ان قمنا بكتابة الخوارزمية، لا بد من التأكد من قيامها بعملها بالشكل الصحيح ويتم ذلك من خلال ما يسمى يعملية تتبع الخوارزمية والتي يقصد بها:
1.تنفيذ كل خطوة من خطوات الخوارزمية وتحليلها حسب تسلسل كتابتها في الخوارزمية.
2.فهم كل خطوة في الخوارزمية وكيفية قيامها بعملها
3.تحديد سلوك كل خطوة وكيفية تاثيرها على النتيجة النهائية
4.اكتشاف أي خطا أو مشكلات ممكن أن تكون في الخوارزمية
وتساعد عملية تتبع الخوارزمية في :