أساسيات البرمجة بلغة السي شارب · الفصل 1 — مقدمة في علم الحاسوبמבוא למדעי המחשב · יסודות התכנות בשפת C#‎⌂📚🏠
الفصل 1

مقدمة في علم الحاسوب

מבוא למדעי המחשב

1.1 المنظومة التكنولوجية – מערכת טכנולוגית

يُعتبر موضوع هندسة الحاسوب أحد أهم المواضيع في عالم التكنولوجيا، حيث أن الحواسيب تتواجد تقريبا في كل مكان في محيطنا ضمن حياتنا اليومية.

المنظومات التكنولوجية تزودنا بحاجة من احتياجاتنا وتعطينا حلا للمسائل المختلفة التي تواجهنا في الحياة، كما أنها تُحسن من جودة حياتنا. أحيانا تحتاج هذه المنظومات التكنولوجية أن تكون مدموجة بحاسوب كي تعطي حلولا لمسائل ومعضلات لا يمكن حلها بدون دمج هذا الحاسوب. لذلك فإن المنظومات المحوسبة هي منظومات تكنولوجية تتواجد فيها وحدة معالجة أو جهاز تحكم.

اذاً، ما هي المنظومة التكنولوجية؟ – מערכת טכנולוגית:

عدد كبير من المركبات (الأجزاء) التي تعمل معاً بترتيب معين لكي تحقق هدف مشترك. لذلك من الممكن تعريف المنظومة التكنولوجية على أنها منظومة من صنع الانسان تم فيها دمج وربط مُركبات (أجزاء) تعمل معاً لكي تزود الانسان باحتياج من احتياجاته. يمكن وصف منظومة تكنولوجية بواسطة:

ادخال – عملية – اخراج.

  1. ادخال (مُدخلات – קלט): الأشياء التي نزودها للمنظومة. (نُدخلها الى المنظومة)
  2. عملية (תהליך): سلسلة من العمليات والاوامر التي يتم تنفيذها بالمنظومة.
  3. إخراج (مُخرجات – פלט): المُنتجات التي تعطينا إياها المنظومة.

إحدى الطرق لوصف منظومة تكنولوجية هي عرض مخطط مربعات بشكل موحد الذي مكنه وصف خصائص المنظومة عن طريق عرض المدخلات والعملية والمُخرجات.

مُدخلاتعمليةمُخرجات

المُدخلات في المنظومات التكنولوجية:

للمنظومات التكنولوجية المُختلفة، أنواع مختلفة من المُدخلات:

مُدخلات معلومات التشغيل. في بداية عمل المنظومة التكنولوجية مطلوب معلومات تحدد الهدف المطلوب من المنظومة: ما هو هدف المنظومة؟ أو ما هي المُخرجات المطلوبة منها؟ هذه هي مُدخلات معلومات التشغيل.

العملية في المنظومات التكنولوجية:

يمكن تحديد أنواع العمليات في المنظومات التكنولوجية حسب المُدخلات التي نزودها للمنظومة حيث ستعالج العمليات هذه المُدخلات.

المُخرجات في المنظومات التكنولوجية:

أنواع المُخرجات التي تُنتجها المنظومة تتعلق بأنواع المُدخلات التي تُزود بها هذه المنظومة وبعمليات المعالجة الخاصة بها. يمكننا ان نذكر نوعان من المُخرجات في النُظم التكنولوجية:

  1. مُخرجات مرغوب بها: مُخرجات نرغب بها من المنظومة والتي بُنيت المنظومة من أجل إخراجها. مثال: المُخرجات المرغوب بها من الغلاية الكهربائية: ماء ساخن. مثال: المُخرجات المرغوب بها من الحاسبة: معلومات عن نتيجة الحساب.
  2. مُخرجات غير مرغوب بها: هي المُخرجات التي لا نرغب بها ولكنها تُنتج كمُخرج إضافي بالمنظومة، ومن المُهم التقليل من هذه المُخرجات أو تبطيلها. مثال: المُخرج غير المرغوب به للغلاية الكهربائية هو: صوت الضجة التي تنتج خلال تسخين الماء. مثال: المُخرج غير المرغوب به للسيارة هو: نفث CO2 الذي يلوث الهواء.

1.2 مبنى الحاسوب – מבנה המחשב

الحاسوب (מחשב) هو منظومة إلكترونية التي تستقبل معطيات، حيث تحلل وتعالج هذه المعطيات وتُخرج لنا معلومات ناتجة عن عملية تحليل ومعالجة هذه المعطيات.

المُعطيات التي يستقبلها الحاسوب تُسمى مُدخلات (קלט / Input). بينما المعلومات التي يُخرجها الحاسوب تُسمى مُخرجات (פלט / Output). المُعالجة التي يتم تنفيذها في الحاسوب تتم بواسطة مجموعة من الأوامر التي تسمى برنامج حاسوب (תוכנית מחשב / computer program).

يمكن تقسيم الحاسوب إلى قسمين:

  1. عتاد الحاسوب. (חומרת המחשב)
  2. برمجيات الحاسوب. (תוכנת המחשב)

العتاد: هي مجموعة الأجزاء والمُركبات الإلكترونية والفيزيائية التي تعمل معاً، وعلى رأسها وحدة المعالجة المركزية (המעבד).

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

عتاد الحاسوب يتكون من 3 وحدات:

  1. الذاكرة (זיכרון / Memory).
  2. وحدة المعالجة المركزية (יחידת עיבוד מרכזית / CPU).
  3. أجهزة ادخال وإخراج (התקני קלט-פלט / I/O).

المُعالج – המעבד:

CPU – Central Processing Unit: هو «مُخ» الحاسوب، ويُسمى أيضا «وحدة المُعالجة المركزية». وهو جهاز من عتاد الحاسوب وظيفته أن يجري العمليات الحسابية والأوامر المُخزنة في ذاكرة الحاسوب، العمليات التي ينفذها المُعالج هي عمليات أساسية مثل: جمع، طرح، مقارنة تفاضل أو مساواة (أكبر، أصغر أو يساوي)، نقل معطيات من مكان لآخر، نسخ والعديد من العمليات الأساسية. المُعالج يعمل كل هذه العمليات بسرعة فائقة، حيث تُمكنه من اجراء الملايين من العمليات الأساسية خلال الثانية الواحدة.

المُعالج يمرر مُعطيات من الذاكرة إلى أجهزة الإدخال والإخراج وبالعكس. في داخل المُعالج يوجد وحدات تخزين وظيفتها تخزين المُعطيات والمعلومات بشكل مؤقت.

الذاكرة – זיכרון:

ذاكرة الحاسوب تُستخدم لتخزين الأوامر والمُعطيات المُختلفة. يُمكن القول أن الذاكرة هي «مخزن» كبير مبني من مجموعة ضخمة من الخانات («خزانات») التي بإمكانها أن تُخزن معلومات أو أوامر وتعليمات. كل خانة تحتوي على معلومات بسيطة.

وحدة المعلومات الأساسية هي الخانة الواحدة (bit) وهي تستطيع أن تحتوي القيمة 0 أو القيمة 1 فقط. كل خلية ذاكرة تتكون من بايت واحد (Byte) ولها عنوان خاص بها. البايت هو 8 خانات أي:

1 Byte = 8 bit

بسبب أن عدد الخانات كبير جدا نستعمل إشارات مُختصرة حسب ما يلي:

210 = kB
220 = MB
230 = GB
240 = TB

يوجد عدة أنواع من الذاكرة نذكر منها: ذاكرة RAM وذاكرة ROM.

  1. ذاكرة RAM (Random Access Memory): هي ذاكرة رئيسية في الحاسوب، مُخصصة لقراءة وكتابة المُعطيات، والبرامج التي تعمل في الحاسوب تُخزن بها. هي ذاكرة سريعة وتكون صغيرة في حجمها نسبة لمساحة التخزين على القرص الصلب. المُعطيات التي تُسجل في هذه الذاكرة قابلة للمحي بشكل تلقائي وذاتي خاصة عندما ينتهي عمل الحاسوب أو إذا مر الكثير من الزمن فيه لم تُستخدم هذه المُعطيات، فإنه يتم حفظ مُعطيات أخرى مكان المُعطيات القديمة.
  2. ذاكرة ROM (Read Only Memory): هي ذاكرة للقراءة منها فقط، البرامج التي في هذه الذاكرة مُخزنة فيه في مرحلة صناعة الحاسوب حيث أنه لا يمكننا تغييرها، ومن مهامها أعادة تشغيل الحاسوب، وهي مسؤولة عن العمليات الأولية التي يقوم بها الحاسوب عند بداية تشغيله. هذه الذاكرة صغيرة في حجمها والمُعطيات التي فيها غير قابلة للمحي في حالة إطفاء الحاسوب وفصله عن الكهرباء.

أجهزة إدخال وإخراج – התקני קלט-פלט:

Input – Output Unit: أجهزة الإدخال والإخراج هي مجموعة أجهزة ومركبات يستخدمها الحاسوب لكي يتواصل مع العالم الخارجي.

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

النواقل – אפיקים:

الوحدات مربوطة بينها بواسطة موصلات كهربائية، التي يكون فيها التوتر الكهربائي في كل موصل (سلك) هو 0 V («0») أو 5 V («1») وهي تقسم لثلاثة مجموعات: ناقل مُعطيات Data Bus، ناقل عناوين Address Bus، وناقل التحكم Control Bus.

ناقل (אפיק): هو مجموعة من الخطوط (أسلاك كهربائية)، وهي المسارات التي تمر منها الإشارات الكهربائية والمُعطيات في الحاسوب.
  1. ناقل معطيات Data Bus: بواسطته يرسل المُعالج أو يستقبل مُعطيات من الذاكرة أو من أجهزة الإدخال والإخراج (قراءة/كتابة). في ناقل المُعطيات يوجد عدة خطوط وعددها مضاعفات الرقم 8 (8, 16, 32, 64...) ومن المعلوم أن المُعطى مكون من 8 خانات ونحتاج أن ننقل مُعطيات في آن واحد بشكل متزامن ومتوازٍ.
  2. ناقل العناوين Address Bus: على ناقل العناوين يحدد المُعالج العنوان الذي سيتوجه اليه في الذاكرة أو من أجهزة الإدخال والإخراج لكي يرسل (يستقبل) معلومات ومُعطيات لعنوان الخلية المطلوبة في هذه الذاكرة أو الأجهزة.
  3. ناقل التحكم Control Bus: بواسطته يُرسل المعالج إشارات للذاكرة أو لأجهزة الادخال والإخراج ليُعلمها أنه يريد أن يقرأ معطى أو أن يكتب معطى معين.

1.3 مقدمة في لغات البرمجة – מבוא לשפות תכנות

يمكن تقسيم البرمجيات (Software) الى ثلاثة أصناف أساسية:

نُظم التشغيل – מערכות הפעלה:

OS = Operating Systems: هي برامج تُدير موارد العتاد والبرمجيات الأخرى في الحاسوب. نظام التشغيل يوفر الشبكة المطلوبة لعمل تطبيقات الحاسوب وبرامجه، كما وتعمل كحلقة وصل بين المستخدم وعتاد الحاسوب والبرامج المختلفة الأخرى. نظام التشغيل هو البرنامج الأول الذي يعمل عند تشغيل الحاسوب وهي التي تمكن المستخدم من استخدام الحاسوب. عملية بدء نظام التشغيل من جديد، التي تحدث عند تشغيل الحاسوب، تسمى عملية إعادة التشغيل (אתחול).

أشهر نظام تشغيل هو Windows ولكن هناك نُظم تشغيل أخرى: DOS, Unix, Linux, Android..

تطبيقات – יישומים:

Applications: هي برامج حاسوب التي تستعمل قدرات الحاسوب كي تُنفذ مهمات مطلوبة للمستخدم. تطبيقات الحاسوب يمكن أن تكون مثلا متصفحات الانترنت، برامج التعامل مع النصوص مثل Word، برامج التعامل مع الصور مثل برنامج الفوتوشوب الخ...

لُغات برمجة – שפות תכנות:

Programming Languages: هي نص لغوي خاص يخضع لقوانين معروفة من أوامر للحاسوب، وبإمكان هذا النص اللغوي الخاص أن يمثل لغة. البرنامج يُكتب بلغة برمجة تُحدد تنفيذ إجراءات خوارزمية.

بمساعدة لغة البرمجة، المُبرمج يستطيع ان ينشئ ملف بواسطة المُحرر (Editor) الذي سيضم الأوامر التي تصف لغويا العمليات التي يريد من الحاسوب أن يُنفذها. الأوامر التي تُكتب حسب قوانين لغة البرمجة لا تكون مفهومة للمعالج بشكل مباشر، لذلك هناك حاجة لترجمة البرنامج المكتوب بلغة البرمجة الى اللغة التي يفهمها المُعالج، الترجمة تتم عن طريق المُترجم (Compiler) بعملية تسمى Compile (הידור)، حيث يترجم الأوامر من لغة عليا الى لغة الآلة التي يفهمها المُعالج.

وأيضا يمكننا تقسيم وتصنيف لغات البرمجة لأصناف والتي سنذكر منها المجموعات التالية:

لُغة برمجة عليا – שפה עילית:

High Level Language: هي لغة تُكتب فيها أوامر البرمجة بواسطة الكلمات المحكية من اللغة البشرية والمفهومة لنا، لذلك لغات البرمجة العليا هي لغات مريحة وسهلة للاستعمال، وتُمكن المُبرمج أن ينفذ الأوامر والبرامج المُركبة بواسطة أوامر فردية وبسيطة.

مثال للغات برمجة عليا: لغة C، لغة C#‎، لغة Java, Pascal ...

مثال لأمر في لغة عليا، مثلا:

if(x>0) printf("x is a positive number");

هذا أمر بلغة C معناه أنه اذا كان المتغير x أكبر من 0 إذاً سيطبع على شاشة الحاسوب (بواسطة الأمر printf) الجملة التالية: x is a positive number

يمكن تقسيم لغات البرمجة العليا لقسمين:

لُغات برمجة إجرائية – תכנות פרוצדורלי:

Procedural programming: برمجة إجرائية هي توجه بالبرمجة يزيد من تجزئة البرنامج (الكود) بواسطة تقسيمه وتحليله الى أقسام وقطع برمجة يُسهل عملية صيانة ومتابعة التطورات على البرنامج. تطبيق هذا التوجه بدأ بسنوات الستينات 60s، في لغات مثل لغة C و Pascal.

في البرمجة الإجرائية يُقسم برنامج الحاسوب الواحد الى مقاطع برمجة عديدة، حيث أن كل واحده من هذه المقاطع تسمى اجراء (פרוצדורה) وهي من نوعين: (روتين فرعي أو دالة). الإجراء أو الدالة يستطيع أن يدعو اجراء آخر لكي يُنفذ أوامر يختص بها هذا الاجراء الآخر. كل اجراء في برنامج إجرائي يعمل مهمة مُحددة ومُعرفة، كجزء من كل الأجزاء التي ستركب البرنامج الكامل.

المُتغيرات في البرنامج الإجرائي هي على الأغلب متغيرات محلية (לוקליים)، أي مُعرفة داخل إجراء وتخدم فقط هذا الإجراء وكل إجراء داخلي له، وأحيانا يتم استعمال متغيرات عامة، والتي يمكن أن تستعمل في كل إجراء داخل البرنامج.

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

لُغات برمجة موجهة كائنات – תכנות מונחה עצמים:

OOP = Object-Oriented Programming: هي لغات برمجة ذات توجه يستعمل الكائنات (עצמים) من أجل برمجة برامج حاسوب. في هذه اللغات أسلوب البرمجة يمتاز بسهولة التجزئة والتبسيط. اللغة تتطرق للعالم على أنه مكون من كائنات لها خصائص وصفات ذات بناء هرمي وترابط بينها. كل كائن برمجي يتبع لفئة (قسم) لها خصائصها وعملياتها والتي تعمل كوحده مغلقة ومُغلفة ومستقلة.

مثال على لغات برمجة موجهة كائنات: Java و C#‎.

لُغة التجميع (أسمبلي) – שפת סף:

Assembly Language: هي لغة البرمجة الأكثر أساسية والأقرب الى لغة الماكنة. في هذه اللغة كل أمر يُترجم لأمر واحد في لغة الماكنة، لذلك البرامج المكتوبة بلغة التجميع هي برامج سريعة أكثر وتُخزن على مساحة أقل من البرامج المكتوبة بلغة عليا. ومثل لغة الآلة، لغة التجميع تعمل بشكل مباشر على خلايا ذاكرة الحاسوب، على وحدات التخزين الداخلية للمعالج وعلى مخارج ومداخل الاستقبال والإخراج، لذلك فانه لكل نوع من المعالجات يوجد لغة تجميع خاصة بها، تتعلق بالمعالج.

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

مثال على أوامر بلغة التجميع: لكي نكتب الأمر البسيط Z = X + Y; علينا بلغة التجميع أن نكتب الأوامر التالية:

mov ax, X;
add ax, Y;
mov Z, ax;

لُغة الآلة – שפת מכונה:

Machine Language: هي اللغة الوحيدة التي يفهمها المعالج ويستطيع تنفيذها، لذلك من الممكن ان نطلق عليها اسم لغة الحاسوب، وهي مبنية من 1 و 0، لذا فهي لغة صعبة للبرمجة والاستعمال من قبل الانسان.

المُبرمج يكتب البرنامج بلغة برمجة عليا وبعد ذلك البرنامج يمر بمرحلة ترجمة للغة الآلة، حيث أن كل أمر بلغة البرمجة العليا يمكن أن يترجم لعدة أوامر بلغة الآلة المكونة من 1 و 0.

مثال لأمر: 1011001110101111

1.4 الخوارزمية ومهمات ومسائل خوارزمية – אלגוריתם

المصطلح خوارزم (أو خوارزمية) هو مصطلح أساسي في البرمجة.

الخوارزمية (אלגוריתם): هي إجراء لتنفيذ مهمة. الخوارزمية مكونة من مجموعة أوامر ذات معنى مفهوم وموحد (بشكل لا يقبل أكثر من وجه)، يمكن تنفيذها لإجراء مهمة، وترتيب تنفيذ هذه الأوامر معروف ومُحدد.

الكلمات المُشدد عليها في التعريف أعلاه هي ثلاثة خصائص مهمة للخوارزمية:

  1. أمر مفهوم ذو معنى وحيد: أي كل تنفيذ لهذا الأمر يجب أن ينتهي بنفس النتيجة، مثلا: «كبّر الرقم بـ 1». مثال لأمر ليس ذو معنى وحيد: «ارفع درجة الحرارة قليلا». لأنه من الممكن أن نرفع درجة الحرارة بدرجة واحدة، أو بدرجتين أو أقل من ذلك، وعندها ستكون نتيجة (قيمة درجة الحرارة الناتجة) مختلفة.
  2. أمر ممكن للتنفيذ: هو أمر يلائم المُنفذ الملائم للأمر والذي يستطيع تنفيذه. مثلا: «اغل لتراً من الماء». أوامر لا يمكن تنفيذها مثلا أن نعطي أمرا للطباخ: «اهبط بالطائرة». حيث أن الطباخ لا يمكنه ان يقود الطائرة ويهبط بها.
  3. أوامر لها ترتيب تنفيذ معروف ومُحدد: ترتيب تنفيذ أوامر الخوارزمية هو حسب ترتيب ظهور هذه الأوامر، إذا لم يُذكر غير ذلك. تنفيذ الخوارزمية ينتهي عندما لا يتبقى أوامر أخرى للتنفيذ.

طريقة الكتابة التي نكتب بها الخوارزمية تسمى كتابة سودوكود (פסאודו-קוד / pseudo-code) وهي طريقة كتابة خوارزم بطريقة مشابهة للغة البرمجة، أي، بكلمات وجمل من لغة البشر الحرة ولكن بطريقة واضحة وذات معنى مُوَّحد وحسب ترتيب معروف ومُحدد.

العملية الموصوفة بواسطة خوارزمية تسمى «أجراء خوارزمي» (תהליך אלגוריתמי).

مسألة خوارزمية (בעיה אלגוריתמית) معطاه هي مسألة يوصف بها نقطة منطلق وموصوف بها الهدف الذي نريد تحقيقه، والذي يمكن أن تُحل بواسطة تشغيل الإجراء الخوارزمي. صياغة الحل تسمى «إيجاد حل خوارزمي» (מציאת פתרון אלגוריתמי).

مثال 1.1
المسألة الخوارزمية هي تحضير القهوة لأربعة أشخاص. سنجد لها حلا خوارزمياً ونكتب لها سودوكود (شبيه الكود).
الحل:

  1. املأ نصف لتر من الماء في غلاية مُخصصة للقهوة.
  2. أشعل نار موقد الغاز.
  3. ضع الغلاية المليئة بالماء على النار.
  4. انتظر حتى يصل الماء الى الغليان وتظهر فقاعات.
  5. أضف ملعقة كبيرة من القهوة الى الماء المغلي في الغلاية.
  6. حرك محتوى الغلاية لمدة دقيقة.
  7. أطفئ نار موقد الغاز.

مهمات ومسائل في الخوارزميات:

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

  1. أبحر من الضفة A الى الضفة B مع الغنمة.
  2. أبحر من الضفة B إلى الضفة A لوحدك.
  3. أبحر من الضفة A إلى الضفة B مع الذئب.
  4. أبحر من الضفة B الى الضفة A مع الغنمة.
  5. أبحر من الضفة A الى الضفة B مع الملفوف.
  6. أبحر من الضفة B الى الضفة A لوحدك.
  7. أبحر من الضفة A الى الضفة B مع الغنمة.

سؤال 1.1: للمثال 1.2 أعلاه يوجد حلول اخرى. اكتب حلاً آخر للمسألة.
مثال 1.3
لديك دلوان من الماء، الدلو A يستطيع أن يحتوي 5 لترات من الماء، والدلو B يستطيع أن يحتوي 3 لترات من الماء. (لا يوجد اشارات تدل على كمية الماء على الدلو). مسموح لك أن تملأ، أن تُفرغ أو أن تنقل الماء بين الدلوين. المطلوب أن نملأ الدلو A بكمية 4 لترات من الماء. أكتب خوارزم لتنفيذ المهمة.
الحل:

  1. املأ الدلو B حتى يمتلئ.
  2. انقل الماء من الدلو B للدلو A.
  3. املأ الدلو B حتى يمتلئ.
  4. انقل الماء من الدلو B للدلو A حتى يمتلئ الدلو A.
  5. فرّغ الدلو A.
  6. انقل الماء من الدلو B للدلو A.
  7. املأ الدلو B حتى يمتلئ.
  8. انقل الماء من الدلو B للدلو A.

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

سطر للتنفيذمحتوى الدلو Aمحتوى الدلو B
1. املأ الدلو B حتى يمتلئ.03
2. انقل الماء من الدلو B للدلو A.30
3. املأ الدلو B حتى يمتلئ.33
4. انقل الماء من الدلو B للدلو A حتى يمتلئ الدلو A.51
5. فرّغ الدلو A.01
6. انقل الماء من الدلو B للدلو A.10
7. املأ الدلو B حتى يمتلئ.13
8. انقل الماء من الدلو B للدلو A.40
سؤال 1.2: ابن جدول تتبع لكي تثبت بواسطته صحة الحل المُقترح للمهمة التي طُلب فيها نقل الغنمة، الملفوف والذئب من ضفة النهر الاولى للأخرى بواسطة القارب.
سؤال 1.3: اكتب خوارزم للمهمة التي يطلب منك فيها أن تجد كم من الأشخاص يتواجدون في غرفة معينة.
سؤال 1.4: معطى صندوقان، فيهما كرات متشابهة، مجموع الكرات في الصندوقين عدد زوجي. عدد الكرات في كل صندوق معلوم لديك أيضا. أكتب خوارزم تستطيع بواسطته أن تحصل على عدد متساوٍ من الكرات في الصندوقين بواسطة نقل كرات من صندوق لآخر.
همام عبد اللطيف وتد — جميع حقوق هذا الكتاب محفوظة للمؤلف. النسخة الإلكترونية منشورة في fahed-lab.com بإذنه، مع تصحيحات وافق عليها. للتواصل مع المؤلف: hammam4112@gmail.com