الدرس الأول: مقدمة إلى حل المشكلات ومفهوم الخوارزمية
أهلاً بك أيها المتربص الطموح في عالم المعلوماتية! نبدأ رحلتنا نحو إتقان فن التفكير المنطقي والهيكلي، وهو الأساس الذي تبنى عليه جميع أنظمة البرمجيات المعقدة. هذه الوحدة، "إعداد الخوارزميات البسيطة"، ليست مجرد مقدمة، بل هي اللبنة الأولى والجوهرية لتعميق فهمك لكيفية عمل الحواسيب وحل المشكلات الكبيرة.
ملاحظة هامة: هذه الوحدة هي إحدى الوحدات المشتركة الأساسية والمقررة لجميع التخصصات الثلاثة في المعلوماتية: إدارة المعلوماتية (Informatique de Gestion)، قواعد البيانات (Bases de Données)، والبرمجة (Programmation). هذا يؤكد على أهميتها المحورية كأساس لا غنى عنه.
1. حل المشكلات: الفن والعلم وراء بناء الأنظمة
الحاسوب في جوهره آلة لحل المشكلات. لكن الفرق بين المبرمج المبتدئ والمحترف يكمن في كيفية مقاربة المشكلة. التحدي الأول في حل المشكلات هو أن العديد من المشكلات البرمجية الحقيقية ليست معقدة في جوهرها، بل في حجم البيانات أو عدد العمليات المطلوبة. فمثلاً، فرز 10 أرقام يدوياً سهل، لكن فرز مليون رقم يتطلب خوارزمية ذكية.
مثال تحليلي (متقدم):
تخيل أن لديك قائمة بأسماء طلاب وتريد البحث عن اسم معين.
- الطريقة البدائية: البحث من أول القائمة حتى تجد الاسم (بحث خطي).
- التفكير الخوارزمي المتقدم: إذا كانت القائمة مرتبة أبجديًا، يمكننا استخدام "البحث الثنائي" (Binary Search) الذي يلغي نصف القائمة في كل خطوة، مما يقلل عدد الخطوات بشكل هائل. هذا يوضح كيف أن اختيار الخوارزمية المناسبة يحدث فرقًا هائلاً في الأداء.
2. مفهوم الخوارزمية: الجذور التاريخية والتعريف الدقيق
أصل الكلمة وتطورها
كلمة "خوارزمية" (Algorithm) هي تكريم للعالم الفذ أبو جعفر محمد بن موسى الخوارزمي. هذا العالم، الذي عاش في بغداد بين عامي 780م و 847م، وضع مبادئ علم الجبر وكان لفكره المنظم والممنهج في حل المسائل الرياضية دور كبير في نشأة مفهوم الخوارزميات. تطور المصطلح بمرور القرون ليحمل مدلولًا أوسع وأكثر ارتباطًا بالبرمجة.
تعريف الخوارزمية (التعمق في المفهوم)
"مجموعة من الخطوات الرياضية والمنطقية المتسلسلة والمحدودة اللازمة لحل مسألة ما والوصول إلى نتائج محددة اعتبارا من معطيات ابتدائية."
دعنا نحلل هذا التعريف بعمق:
- "مجموعة من الخطوات": ليست عملية عشوائية، بل سلسلة مرتبة.
- "رياضية ومنطقية": تعتمد على مبادئ رياضية ومنطقية (اتخاذ قرارات).
- "متسلسلة": ترتيب الخطوات حاسم.
- "محدودة": يجب أن تنتهي الخوارزمية في عدد معقول من الخطوات.
- "حل مسألة ما": موجهة نحو هدف معين وتنتج مخرجًا متوقعًا.
- "اعتبارا من معطيات ابتدائية": تعمل على بيانات أولية (مدخلات).
3. خصائص الخوارزمية السليمة: معايير الكفاءة والجودة
ليست كل مجموعة من الخطوات تعتبر خوارزمية جيدة. يجب أن تتسم الخوارزمية بمجموعة من الخصائص لتكون فعالة وموثوقة:
- الوضوح (Defined / Précise): "كل خطوة يجب أن تكون معرفة دون غموض ومحددة بعبارات واضحة." لا تحتمل الخطوة أكثر من تفسير واحد.
- المحدودية (Finite): "أن تتوقف العملية بعد عدد محدد من الخطوات." يجب أن تضمن الخوارزمية انتهاءها في زمن معقول.
- الصحة (Correct / Efficace): "أن تؤدي الخطوات كلها إلى الحل الصحيح للمسألة." يجب أن تُنتج المخرجات الصحيحة لكل مجموعة صالحة من المدخلات.
4. مكونات الهيكل العام للخوارزمية
يتألف الهيكل العام للخوارزمية من ثلاثة أجزاء رئيسية، وكل جزء يحتوي على مكونات محددة:
جزء الرأس (En-tête)
- المكون:
Algorithme
وظيفته: هذا المكون هو بمثابة العنوان أو المُعرّف الفريد للخوارزمية. مثال:Algorithme Calcul_Moyenne
.
جزء التصريحات (Déclarations)
- المكون 1:
Constante
وظيفته: يُستخدم للإعلان عن الثوابت التي لا تتغير قيمتها (مثل قيمة π). مثال:Constante PI = 3.14
. - المكون 2:
Variable
وظيفته: يُستخدم للإعلان عن المتغيرات التي ستحتفظ ببيانات قد تتغير قيمتها. مثال:Variable Age : Entier
.
جزء التعليمات (Instructions)
- المكون 1:
Début
وظيفته: يشير إلى نقطة البداية التنفيذية للخوارزمية. - المكون 2:
التعليمة 1، التعليمة 2، ...
وظيفته: هي الخطوات الفعلية التي تُشكل قلب الخوارزمية، وتنقسم إلى:- المدخلات (Inputs): تعليمات لجلب البيانات (مثل: "اقرأ العدد").
- المعالجة (Processing): تعليمات لتنفيذ العمليات (مثل: "احسب المجموع").
- المخرجات (Outputs): تعليمات لعرض النتائج (مثل: "اطبع المجموع").
- المكون 3:
Fin
وظيفته: يشير إلى نقطة النهاية التنفيذية للخوارزمية.