الخوارزميات والبرمجة بلغة بايثون

2. الخوارزميات

الكفاءات المستهدفة

  • يدرك المتعلم مفهوم الخوارزمية.
  • القدرة على التفكير لحل المشكلات.
  • يتمكن من كتابة برامج للحاسوب.

أصل كلمة خوارزمية

كلمة خوارزمية مشتقة من اسم العالم الفارسي محمد بن موسى الخوارزمي (780م إلى 840م)، وقد برع هذا العالم في علم الرياضيات والفلك، ووضع مبادئ علم الجبر، وألف كتاب الجبر والمقابلة، واشتغل على جداول الضرب والقسمة والحساب العشري وحساب الظل.

أطلق هذا الاسم "الخوارزميات" Algorithmes، وظل متداولًا في أوروبا إلى أن حمل مدلولًا جديدًا مرتبطًا بالبرمجة.

تعريف الخوارزمية:

هي مجموعة من الخطوات الرياضية والمنطقية المتسلسلة والمحدودة، اللازمة لحل مسألة ما والوصول إلى نتائج محددة اعتبارًا من معطيات ابتدائية.

خصائص الخوارزمية السليمة:

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

الهيكل العام للخوارزمية:

يشمل الهيكل العام للخوارزمية ثلاث أجزاء أساسية، وهي كالآتي:

Image

جزء En-tête

يحتوي هذا الجزء على اسم الخوارزمية الذي يحدد نسبةً للمسألة المراد حلها.

جزء التصريحات Déclarations

يتم في هذا الجزء حجز مكان في الذاكرة لقائمة المتغيرات وقائمة الثوابت التي تستعمل في جزء التعليمات من الخوارزمية.

جزء التعليمات Instructions

يتضمن هذا الجزء ثلاث مراحل أساسية هي:

  • المرحلة الأولى "المدخلات": يتم فيها التحضير لحل المسألة وذلك بإدخال المعطيات اللازمة لتنفيذها.
  • المرحلة الثانية "المعالجة": تتم فيها عملية التنفيذ باستعمال معطيات (مدخلات) المرحلة الأولى، وتحتوي هذه المرحلة على مجموعة من التعليمات اللازمة لحل المسألة.
  • المرحلة الثالثة "المخرجات": تعرض فيها النتائج المطلوبة.
الكلمات المحجوزة Mots clés

هي كلمات تتخلل الأجزاء الأساسية الثلاث للهيكل العام للخوارزمية، يمكن كتابتها بأحرف لاتينية كبيرة أو صغيرة دون تفرقة، ولدينا من خلال الهيكل العام الكلمات المحجوزة الآتية:

  • Algorithme: نكتب أمام هذه الكلمة اسم الخوارزمية (identificateur)، ويخضع هذا الأخير لقواعد معينة نشير إليها في العنصر الموالي.

  • Variable: نكتب هذه الكلمة للتصريح عن المتغيرات.

  • المتغير: هو عنصر يمكن لمحتواه أن يتغير أثناء تنفيذ الخوارزمية.

  • الثابت: هو العنصر الذي لا يتغير محتواه أثناء تنفيذ الخوارزمية.

  • Constante: نكتب هذه الكلمة للتصريح عن الثوابت.

  • Début و Fin: كل من الكلمتين تمثلان بداية ونهاية الخوارزمية، وتوجد بينهما المراحل الثلاث لجزء التعليمات من الخوارزمية.

ملاحظة

توجد كلمات محجوزة أخرى يمكن مصادفتها في مختلف أنواع الخوارزميات.

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

  • يمكن لاسم المعرف أن يحتوي على رموز حرفية وعددية من A إلى Z، ومن a إلى z، ومن 0 إلى 9، كما يمكن استعمال الرمز _ (tiret du huit) فقط.
  • لا يمكن للاسم أن يحتوي على فراغ (مسافة).
  • يجب أن تبدأ التسمية بحرف.
  • لا يمكن استعمال أي معرف غير مصرح به في جزء التصريحات.
  • عدم استعمال أي كلمة من الكلمات المحجوزة في التسمية.
  • لتسهيل قراءة وكتابة الخوارزمية، يستحسن استعمال أسماء معرفات ذات دلالة، مثل: Largeur_rect عوض LR.
ملاحظة: اصطلاحًا، يستحسن كتابة معرفات الثوابت بالأحرف الكبيرة (Majuscules).

أنواع البيانات Types de données

  • النوع: هو المجال الذي تنتمي إليه البيانات سواء كانت معطيات (مدخلات) أو نتائج (مخرجات)، متغيرة كانت أو ثابتة.

يمكننا استعمال عدة أنواع من البيانات في الخوارزمية، نذكر منها الأنواع الأساسية الآتية:

  • Entier (الأعداد الصحيحة).
  • Réel (الأعداد الحقيقية).
  • Caractère (الحروف والرموز).
  • Chaines de caractères (الكلمات).
  • Booléen (منطقي): هذا النوع يتضمن إحدى القيمتين صحيح أو خطأ.

أمثلة:

  1. كل من اللقب والاسم يصنفان إلى النوع "chaine de caractères".
  2. العدد 3.3 يصنف إلى النوع "Réel".

التصريح عن المتغيرات والثوابت:

  • التصريح عن الثوابت: يتم التصريح عن الثوابت كما يلي:

Const ou Constante <Identificateur> = <Valeur>

  • Const أو Constante هما كلمتان محجوزتان تسمحان بالتصريح عن الثوابت.
  • Identificateur هو اسم المعرف الذي يطلق على الثابت.
  • Valeur هي القيمة التي تعطى للثابت.

أمثلة:

Constante
PI = 3.14
B = Vrai
Prénom = "Zahra"
  • التصريح عن المتغيرات: يتم التصريح عنها كما يلي:

Var ou Variable <Identificateur> : <Type>

  • Var ou Variable هما كلمتان محجوزتان تسمحان بالتصريح عن المتغيرات.
  • Identificateur هو اسم المعرف الذي يطلق على المتغير.
  • Type هو نوع المتغير.

أمثلة:

Variable
Nom, Prénom : chaine de caractères
x, y, z : réel

العمليات الحسابية

الصيغةالرمزالعملية الحسابية
A = X + Y+الجمع
A = 5 - 3-الطرح
A = 2 * B*الضرب
A = X / Y/القسمة
A = C ^ 2^الأس
A = 7 * ( M - N )( )الأقواس

عمليات المقارنة

المعنىالعملية
يساوي=
يختلف<>
أصغر من<
أصغر من أو يساوي<=
أكبر من>
أكبر من أو يساوي>=

أولوية العمليات الحسابية: عند إنجاز عملية حسابية يجب احترام الأولويات التالية:

    1. الأقواس ( )
    1. الأس
    1. الضرب * والقسمة /: يتم تنفيذ عمليات الضرب والقسمة بدءًا من اليسار إلى اليمين.
    1. الجمع + والطرح -: يتم تنفيذ عمليات الجمع والطرح بدءًا من اليسار إلى اليمين.

التعليمات الأساسية للغة الخوارزمية:

التعليمة: هي أمر يسمح للجهاز بتحديد العملية المراد إنجازها.

يمكن التعبير عن مسار حل مسألة ما لكتابة خوارزمية بواسطة التعليمات الخمسة الآتية:

  1. تعليمة الإسناد.
  2. تعليمة القراءة (أو إدخال المعطيات).
  3. تعليمة الكتابة (أو إظهار النتائج).
  4. التعليمة الشرطية.
  5. التعليمة التكرارية.
1. تعليمة الإسناد Instruction d'affectation

تسمح بإسناد قيمة محددة أو نتيجة صيغة إلى متغير ما في الخانة الذاكرة (case mémoire) المحجوزة له.

الشكل النظامي (Syntaxe):

Nom de variable ← Expression
  • Nom de variable يمثل اسم المعرف (Identificateur).
  • Expression قد تكون قيمة ثابتة أو نتيجة دالة أو اسم متغير آخر، كما يمكن أن تكون نتيجة لعبارة حسابية.

المعنى: المتغير يأخذ قيمة الصيغة.

مثال:

Surface_rect ← largeur * longueur
PI ← 3.14
2. تعليمة القراءة Instruction de lecture

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

الشكل النظامي (Syntaxe):

Lire(Nom de variable)

المعنى: هذه التعليمة أمر يطلب أخذ القيمة المعطاة بواسطة لوحة المفاتيح ووضعها في الخانة الذاكرة المحجوزة للمتغير.

أمثلة:

  • Lire(N): معناه ضع القيمة المعطاة من لوحة المفاتيح في الخانة الذاكرة المحجوزة لـ N.
  • Lire(a, b, c): معناه ضع القيم المعطاة من لوحة المفاتيح في الخانات الذاكرة المحجوزة لـ a، b و c على الترتيب.
3. تعليمة الكتابة Instruction d'écriture

تسمح بإظهار قيمة معينة على الشاشة.

الشكل النظامي (Syntaxe):

Ecrire("Expression")

المعنى: هذه التعليمة أمر بإظهار الصيغة المحصورة بين المزدوجتين على الشاشة.

أمثلة:

Ecrire("Entrez la valeur de S")

هذه التعليمة تسمح بإظهار الصيغة الآتية على الشاشة: Entrez la valeur de S

Ecrire("2")
Ecrire(5 - 3)

هاتان التعليمتان تسمحان بإظهار 2 على الشاشة.

4. التعليمة الشرطية Instruction conditionnelle

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

أ. التعليمة الشرطية البسيطة:

إذا تحقق الشرط تنفذ التعليمة.

الشكل النظامي:

Si <Condition> alors
    <Instructions>

المعنى: تنفذ مجموعة التعليمات <Instructions> إذا تحقق الشرط <Condition>.

ب. التعليمة الشرطية الاختيارية:

إذا تحقق الشرط تنفذ مجموعة من التعليمات، وإلا تنفذ مجموعة أخرى من التعليمات.

الشكل النظامي:

Si <Condition> alors
    <liste d'instructions 1>
Sinon
    <liste d'instructions 2>
FinSi

Image

Suite de l'algorithme

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

Algorithme Elève_admis
Variable
    Moyenne : réel
Début
    Lire(Moyenne)
    Si Moyenne >= 10 Alors
        Ecrire("L'élève est admis")
    Sinon
        Ecrire("L'élève est ajourné")
    FinSi
Fin

Image

5. التعليمة التكرارية Instruction répétitive

يستعمل هذا النوع لتكرار تنفيذ مجموعة من التعليمات، يرتبط هذا التكرار بتحقق شرط معين، ومادام هذا الشرط محققًا يعاد تنفيذ مجموعة من التعليمات. هناك نوعان من التعليمات التكرارية:

  • التعليمة التكرارية Tant que
  • التعليمة التكرارية Pour

Image

أ. التعليمة التكرارية Tant que

في حالة عدم معرفة عدد التكرارات لتنفيذ التعليمات وارتباط التكرار بتحقيق شرط معين نستعمل الحلقة Tant que.

الشكل النظامي:

Tant que <Condition> faire
    <Liste d'instructions>
Fin tant que

المعنى: مادام الشرط محققًا يكرر تنفيذ مجموعة من التعليمات إلى غاية عدم تحققه.

ملاحظة

الحد الأدنى للتكرارات هو "1".

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

Algorithme Somme_100valeurs
Variable
    S, i : entier
Début
    S ← 0
    i ← 1
    Tant que i <= 100 faire
        S ← S + i
        i ← i + 1
    Fin tant que
    Ecrire("la somme des valeurs de 1 à 100 est : ", S)
Fin

Image

Image

ب. التعليمة التكرارية Pour

عند معرفة عدد التكرارات في تنفيذ التعليمات نستعمل التعليمة "Pour" بعداد "Compteur" التي تتوقف عند وصول العداد إلى قيمته النهائية.

الشكل النظامي:

Pour <Nom de variable> de <valeur initiale> à <valeur finale> faire
    <Liste d'instructions>

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

شرح طريقة عمل التعليمة التكرارية Pour:

  • إعطاء القيمة الابتدائية للعداد (valeur initiale).
  • زيادة قيمة العداد بخطوة بعد كل تنفيذ لمجموعة التعليمات.
  • مراقبة شرط التوقف (أي وصول العداد إلى قيمته النهائية).

Image

مثال: كتابة خوارزمية تسمح بإظهار على الشاشة مضاعفات العدد 5 المحصورة بين 1 و 100.

Algorithme Multiples_de_5
Variable
    i, Multiple : entier
Début
    Pour i de 1 à 20 Faire
        Multiple ← i * 5
        Ecrire(Multiple, " est multiple de 5")
    Fin faire
Fin

Image

تطبيقات

  1. اكتب خوارزمية لقراءة عددين وإيجاد حاصل جمعهما؟
  2. اكتب خوارزمية لطباعة المعدل السنوي (بفرض أننا نملك معدل كل فصل)؟
  3. اكتب خوارزمية الحل لطباعة الأعداد المحصورة بين 1 و 11.
  4. اكتب الخوارزمية لقراءة ثلاثة أعداد (A, B, C) ومعرفة العدد الأكبر بينها.
  5. اكتب الخوارزمية لقراءة عدد وطباعة كلمة Positive إذا كانت قيمة العدد أكبر من أو تساوي صفر، وكلمة Négative إذا كان العدد أقل من الصفر؟
  6. اكتب الخوارزمية لقراءة الأضواء الثلاثية (feu tricolores) (أحمر, أخضر, برتقالي).
  7. اكتب الخوارزمية لطباعة جدول الضرب للعدد 7.