You are on page 1of 14

‫مبادئ الحاسوب‬

‫الخوارزميات‬

‫تعني الخوارزمية (‪ )Algorithm‬بشكل عام مجموعة من الخطوات المتسلسلة و َّ‬


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

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

‫لنفترض ‪ x :‬عدد ما‪ ،‬ونريد حساب المقدار‪:‬‬


‫من الواضح أن الحل بسيط جدا ‪ ،‬يستطيع إنجازه أي شخص لديه إلمام بسيط بالعمليات‬
‫الحسابية وال فهل يمكن اعتبار التعبير الرياضي بحد ذاته خوارزمية لحساب المقدار ‪ . x‬يحتاج‬
‫إال إلى معرفة قيمة الجواب ‪:‬طبعا ال‪ ،‬فمع أن التعبير واضح ويبين العمليات الالزمة لحساب‬
‫المقدار ؟ ‪ ، y‬إالّ أنه اليعطي تسلسل هذه العمليات ‪.‬فيمكن أن نبدأ بحساب البسط ثم المقام‬
‫ومن ثم نقسم البسط على المقام للوصول إلى الجواب‪ ،‬كما يمكن إجراء العكس ‪.‬فلكي يصبح‬
‫تعبير رياضي خوارزمية ال بد أن يقترن بتسلسل تنفيذ عملياته‪ ،‬أي ال بد من إضافة بعض‬
‫حدد بحسب نوعية المسألة المطروحة‪ ،‬وجعل‬ ‫الشروط والقواعد مثل ‪:‬البدء دوما وفق أفضليات تُ َّ‬
‫هذه األفضليات قواعد للتنفيذ تمكننا من الوصول إلى خوارزمية صالحة للتنفيذ ‪.‬ويبين الخطوات‬
‫التالية كيفية صياغة الخوارزمية المحققة للعالقة من أجل قيمة وحيدة ل ـ ‪x‬‬

‫‪-1‬البداية‪.‬‬
‫‪-2‬احلصول على قيمة ‪x‬‬
‫‪-3‬حساب قيمة البسط ‪A = 2x + 3‬‬
‫‪-4‬حساب قيمة املقام ‪B = 3x -4‬‬
‫‪Y = A / B -5‬حساب قيمة املقدار‬
‫‪-6‬النهاية‪.‬‬

‫‪2‬‬
‫استخدام الخوارزمية في الحسابات اليدوية‬
‫يمكن استخدام الخوارزمية المذكورة إلنشاء جدول يحوي قيم المقدار ‪ y‬لمجموعة من قيم "‪"x‬‬
‫التابع للمقدار ‪ x‬من القيمة ‪ 3‬حتى القيمة ‪8‬‬ ‫يدويا‪ ،‬فمثال إذا أردنا حساب قيم المقدار ‪y‬‬
‫يمكن تنظيم الجدول التالي‪:‬‬

‫‪X‬‬ ‫‪A=2x + 3‬‬ ‫‪B=3x – 4‬‬ ‫‪y=A/B‬‬


‫‪3‬‬ ‫‪9‬‬ ‫‪4‬‬ ‫‪1.8‬‬
‫‪4‬‬ ‫‪11‬‬ ‫‪8‬‬ ‫‪1.375‬‬
‫‪5‬‬ ‫‪13‬‬ ‫‪11‬‬ ‫‪1.181‬‬
‫‪6‬‬ ‫‪17‬‬ ‫‪17‬‬ ‫‪1‬‬
‫‪7‬‬ ‫‪19‬‬ ‫‪20‬‬ ‫‪0.95‬‬

‫يدويا يمكن كتابة قيم ‪ X‬أوال ثم حساب بقية القيم ‪ A, B‬انتهاءا بقيمة ‪ Y‬التي كان حسابها‬
‫مطلوبا‪ ،‬ويمكن تنفيذ ذلك باستخدام آلة حاسبة‪ ،‬ولكن كتابة خوارزمية ثم استخدامها في الحل‬
‫ميزات الخوارزمية حيث تكتب لمرة‬
‫يعطي سهولة في الحل ويمنع حدوث األخطاء‪ .‬وهي احدى ّ‬
‫واحدة وتحول عبر لغات البرمجة إلى برنامج حاسوبي ثم وعند الحاجة إليها تطلب وتستخدم‬
‫مباشرة‪.‬‬
‫ن ستخدم لكتابة اخلوارزميات مصطلحات حمددة متعارف عليها تسهل من طريقة الكتابة وفهم اخلوارزمية‬
‫كما يلي‪:‬‬

‫بداية أو نهاية الخوارزمية‬

‫عمليات اإلدخال واإلخراج (القراءة والكتابة)‬

‫العمليات الحسابية واإلسناد‬

‫اختبار الشروط واتخاذ قرار منطقي‬

‫‪3‬‬
‫استدعاء خوارزمية جزئية‬

‫تحديد اتجاه التنفيذ أو تتابع العمليات ضمن الخوارزمية‬


‫حلقة الوصل وتستخدم للربط بين أجزاء سير العمليات‬
‫أو للربط في حال تعدد الصفحات‬

‫المخطط التدفقي أو االنسيابي‪:‬‬


‫تستخدم هذه المخططات لتمثيل الخطوات المختلفة التي‬
‫‪START‬‬ ‫تتكون منها الخوارزمية حيث تبين هذه المخططات‬
‫تسلسل جريان العمليات ضمن الخوارزمية وترابط‬
‫خطواتها المختلفة من البداية إلى النهاية ولها عدة‬

‫‪INPUT‬‬ ‫أشكال‪.‬‬
‫‪A,B‬‬
‫‪- 1‬المخطط التدفقي التتابعي‪ :‬مناسب لتمثيل‬

‫الخوارزميات المكونة من تتال لعدد محدد من‬

‫الخطوات دون الحاجة إلى تغيير سياق أو‬


‫‪D=A*B‬‬
‫)‪S = 2 * ( A + B‬‬ ‫تسلسل خطوات الخوارزمية‪.‬‬

‫التدفقي‬ ‫المخطط‬ ‫باستخدام‬ ‫مثل‬ ‫مثال‪:‬‬

‫خوارزمية حساب مساحة زمحيط مستطيل‬


‫‪PRINT‬‬
‫‪D,S‬‬ ‫طوله ‪ A‬عرضه ‪.B‬‬

‫‪- 1‬البداية‪.‬‬

‫‪- 2‬اق أر الدخل ‪A, B‬‬


‫‪END‬‬
‫‪- 3‬احسب‪:‬‬

‫‪ .a‬المساحة = الطول * العرض‬

‫‪ .b‬المحيط = ‪( * 2‬الطول ‪ +‬العرض)‬

‫‪4‬‬
‫‪- 4‬اطبع النتائج ‪A,B‬‬

‫‪- 5‬نهاية الخوارزمية‬

‫‪- 2‬المخطط التدفقي التفرعي‪:‬‬

‫يتم وفق هذا المخطط تعديل تتالي الخطوات المكونة للخوارزمية باالستناد على شروط‬

‫يحدد تحققها أو عدم تحققها اختيار طريق ما لسير العمل في الخوارزمية‪.‬‬

‫خوارزمية حساب الضريبة ‪ y‬على سعر المبيع ‪.p‬‬

‫‪START‬‬

‫‪INPUT‬‬
‫‪P‬‬

‫‪Yes‬‬ ‫‪No‬‬
‫‪P >1000‬‬

‫‪Y = 0.01 * P‬‬ ‫‪Y = 0.05 * P‬‬

‫‪PRINT Y‬‬
‫‪P, Y‬‬

‫‪END‬‬

‫‪- 3‬المخطط التدفقي الحلقي‪:‬‬


‫يتم وفق هذا املخطط تكرار حللقات أكثر من مرة وذلك وفق شرط حمدد يتم ذكره بشكل صريح ويتم‬
‫تكرار احللقة إذا كان هذا الشرط يسمح بذلك‪ ،‬مثالً كان لدينا عشرة مواد معدة للبيع ولدينا سعر شراء‬

‫‪5‬‬
‫املادة ونريد كتابة خوارزمية حلساب سعر املبيع الذي يساوي سعر الشراء مضافاً إليه ‪ %01‬من هذا‬
‫السعر‪.‬‬
‫يوضح الشكل التايل خطوات حل هذه اخلوارزمية‪:‬‬

‫‪START‬‬

‫‪K=1‬‬

‫‪INPUT IN_PRICE‬‬

‫‪OUT_PRICE = IN_PRICE * 1.1‬‬

‫‪PRINT OUT_PRICE‬‬

‫‪YES‬‬
‫‪K < 10‬‬ ‫‪K = K +1‬‬

‫‪NO‬‬

‫‪END‬‬

‫‪6‬‬
‫ميكن أن يكون املخطط التدفقي احللقي مركباً إذا احتوى أكثر من حلقة واحدة بشكل مركب حبيث‬
‫تكون احللقات متداخلة مثالً إذا كان لدينا ثالث جمموعات املواد (منظفات‪ ،‬مفروشات‪ ،‬أغذية) وكل‬
‫جمموعة حتوي ‪ 01‬مادة وأردنا تكرار اخلوارزمية من أجل هذه اجملموعات‪ ،‬يكون متثيل اخلوارزمية كما‬
‫يلي‪:‬‬

‫‪START‬‬

‫‪K=1‬‬

‫‪L=1‬‬

‫‪INPUT IN_PRICE‬‬

‫* ‪OUT_PRICE = IN_PRICE‬‬
‫‪1.1‬‬
‫‪PRINT OUT_PRICE‬‬

‫‪L < 15‬‬ ‫‪L=L+1‬‬


‫‪YES‬‬
‫‪NO‬‬
‫‪YES‬‬
‫‪K=K+‬‬ ‫‪K<3‬‬

‫‪1‬‬ ‫‪NO‬‬
‫‪END 7‬‬
‫إذاً بالنتيجة ميكن القول أن املخطط التدفقي ميثل اخلطوات أو املراحل املطلوب من اخلوارزمية تنفيذها‪.‬‬
‫لغة شبه البرنامج‪:‬‬
‫هي لغة حمدودة التعابري مستخدمة للتعبري عن اخلوارزمية بشكل كتايب على عكس املخططات التدفقية‪،‬‬
‫حيث مت اشتقاق تعابري هذه اللغة من لغات برجمة‪ ،‬تؤمن لغة شبه الربنامج طريقة لكتابة اخلوارزمية‬
‫بشكل مفهوم وواضح وهي لغة متعارف عليها عاملياً‪ .‬وميكن انطالقاً منها حتويل اخلوارزمية ألية لغة برجمة‬
‫لتحقيقها على احلاسب بسهولة‪ ،‬وأهم مامييّز هذه اللغة أهنا مستقلة عن لغات الربجمة الفعلية‪.‬‬
‫مكونات لغة شبه الربنامج‪:‬‬
‫املتحول (‪ :)variable‬وهي اسلوب للتعبري عن األغراض املستخدمة ضمن اخلوارزمية مثالً اسم‬
‫املوظف‪ ،‬سعر شراء السلعة‪ ،‬تاريخ اليوم‪ ،‬احلالة االجتماعية للشخص‪ ،‬ومتثل عادة حبرف أو سلسلة‬
‫حمرفية يفضل أن يكون هلا معىن‪ ،‬وعادة ما تطرأ تعديالت على القيم املخزنة يف املتحوالت أثناء تنفيذ‬
‫اخلوارزمية‪ .‬كأمثلة عليها نذكر‪x,Y, StudentName, ProductPrice, SocialState :‬‬
‫عادة يتم تعريف املتحوالت باستخدام الكلمة املفتاحية ‪var‬‬
‫الثابت (‪ :)constant‬وهي اسلوب للتعبري عن مقدار ثابت القيمة مستخدم يف اخلوارزمية‪ ،‬وعادة يتم‬
‫تعريف الثوابت باستخدام الكلمة املفتاحية ‪const‬‬
‫اإلسناد (‪ :)‬وهي إسناد قيمة أو متحول ما ملتحول ما وهذه القيمة ميكن أن تكون ناجتة عن نفيذ‬
‫عملية أو عدة عمليات حسابية أو منطقية‪ ،‬مثالً‬
‫‪X4‬‬
‫)‪Z  4 + 2 * (y + 6‬‬

‫الصيغة (‪ :)expression‬وهي تركيب ملتحول واحد أو لعدة متحوالت مع عدة عمليات حسابية أو‬
‫منطقية بغرض حتقيق هدف ما ضمن اخلوارزمية‪ ،‬مثالً‬
‫‪X3*Y+5‬‬
‫‪OUT_PRICE  IN_PRICE * 1.5‬‬
‫التعليمات املستخدمة ضمن لغة شبه الربنامج‪:‬‬
‫تعليمة القراءة (‪ :)read‬تستخدم لقراءة قيمة من وحدة دخل وختزينها يف الذاكرة العشوائية يف موقع‬
‫معروف باسم متحول ما " ‪ " x‬مثالً‪ .‬وتكتب كما يف األمثلة التالية‪:‬‬
‫‪Read x‬‬
‫‪Read StudentName‬‬

‫‪8‬‬
‫تعليمة الكتابة (‪ :)write‬تستخدم لكتابة قيمة موجودة يف الذاكرة على وحدة إخراج (الشاشة) كما‬
‫يف األمثلة التالية‪:‬‬
‫‪Write x‬‬
‫‪Write ProductPrice‬‬
‫متكن استخدام التعليمة ‪ print‬لتنفيذ نفس الوظائف اليت تنفذها التعليمة ‪.write‬‬
‫مالحظة‪ :‬نستخدم عالمات االقتباس إذا أردنا إظهار كلمة أو مجلة كما هي‪ ،‬مثال‪:‬‬
‫"‪Write " Hello Samer‬‬
‫‪Write "ProductPrice = " ProductPrice‬‬
‫‪Print "ProductPrice = " ProductPrice‬‬

‫تعليمة االختيار أو القرار (‪:)if‬‬


‫‪If condition then‬‬
‫‪statements‬‬
‫‪Else‬‬
‫‪statements‬‬
‫تستخدم هذه التعليمة يف اخلوارزمية عند وجوب حتديد العمليات الواجب تنفيذها بعد اختبار شرط‬
‫حمدد ووفقاً لناتج االختبار يتم تنفيذ تعليمات حمددة‪ ،‬مثالً احسب سعر مبيع منتج حبيث تضاف نصف‬
‫قيمة سعر الشراء للمواد ذات سعر الشراء األصغر من ‪ 0111‬وتضاف ربع قيمة سعر الشراء للمواد‬
‫ذات سعر الشراء األكرب أو يساوي القيمة ‪ .0111‬وخزن قيمة سعر الشراء يف املتحول ‪ B‬مث اكتب‬
‫قيمة السعر‪ ،‬علماً بأن سعر الشراء خمزن يف املتحول ‪.A‬‬

‫‪Read A‬‬
‫‪If A < 1000 then‬‬
‫‪B  A * 1.5‬‬
‫‪Else‬‬
‫‪B  A * 1.25‬‬
‫‪Write B‬‬

‫‪9‬‬
‫التعليمة التكرارية‪:‬‬
‫تستخدم يف اخلوارزمية لتكرار تنفيذجمموعة تعليمات حىت حتقق شرط يستدعي توقف التنفيذ‪ ،‬وهلا عدة‬
‫أشكال نذكر منها حلقة طاملا "‪ "while‬وحلقة من أجل "‪."for‬‬
‫حلقة طاملا "‪ :"while‬وتكتب كما يلي‪:‬‬
‫‪While condition loop‬‬
‫‪Statements‬‬
‫‪end loop‬‬
‫مثال‪ :‬إذا أردنا كتابة حلقة جلمع األعداد الصحيحة من ‪ 0‬إىل ‪ 011‬نكتب‪:‬‬
‫‪I1‬‬
‫‪Sum  0‬‬
‫‪While I <= 100 loop‬‬
‫‪Sum  Sum + i‬‬
‫‪II+1‬‬
‫‪End loop‬‬
‫‪Print Sum‬‬
‫حلقة "‪ :"for‬تستخدم مثل حلقة ‪ while‬وحتوي شرط جيب حتققه لتوقف احللقة‪ .‬فمثالً إذا أردنا‬
‫حساب جمموع األعداد من ‪ 0‬إىل ‪ 011‬باستخدام حلقة ‪ for‬نكتب‬
‫‪Sum  0‬‬
‫‪For I = 1 to 100 loop‬‬
‫; ‪Sum  sum + I‬‬
‫‪End loop‬‬
‫‪Print Sum‬‬

‫‪11‬‬
‫أمثلة خلواروميات‪:‬‬
‫اكتب خوارزمية لقراءة ‪ 011‬رقم ترد تباعاً من وحدة إدخال وختتار األكرب بينها وتضعة يف متحول امسه‬
‫‪ x‬مث تطبع هذا الرقم على وحدة خرج‪ ،‬باستخدام املخطط التدفقي‪.‬‬

‫اكتب نفس اخلوارزمية باستخدام لغة شبه الربنامج‬

‫‪Var x, p, i number‬‬
‫‪i1‬‬
‫‪read p‬‬
‫‪xp‬‬
‫‪while i < 100 loop‬‬
‫‪read p‬‬
‫‪if p > x then‬‬
‫‪xp‬‬
‫‪ii+1‬‬
‫‪end loop‬‬
‫‪print "the max number is ', x‬‬

‫‪11‬‬
‫اكتب خوارزمية بلغة شبه البرنامج تقوم بقراءة مجموعة من األحرف االنكليزية التي‬
‫ترد تباعا ً من وحدة دخل وتنتهي هذه األحرف بالحرف "‪ "#‬وتقوم باحصاء الحرف‬
‫عدد مرات ورود الحرف "‪ "m‬وتضعه ضمن متحول اسمه ‪ x‬ثم تطبع قيمة هذا‬
‫المتحول‪.‬‬
‫‪Var x number, c char‬‬
‫‪x0‬‬
‫‪read c‬‬
‫‪while c <> '#' loop‬‬
‫‪if c = "m" then‬‬
‫‪x  x +1‬‬
‫‪read c‬‬
‫‪end loop‬‬
‫‪print "the count of character m is", x‬‬

‫‪12‬‬
:1 ‫تمرين‬
:‫لتكن لدينا الخوارزمية التالية‬
Var X, Y, Z, W number
Begin
Read X
Read Y
If X > = Y then
Begin
While X > Y loop
XX–Y
ZZ+1
End loop
WX
Print Z , W
end
Else
Begin
Print 0 , X
End
End

X= 2, Y = 7 ‫ إذا كانت‬Z , W ‫ ماهي قيمة‬-


X = 24, Y= 5 ‫ إذا كانت‬Z , W ‫ ما هي قيمة‬-
.‫ ما هي وظيفة هذه الخوارزمية‬-

13
‫تمرين ‪:2‬‬
‫‪ -‬لتكن لدينا الخوارزمية التالية‪:‬‬

‫‪Var S, I, N number‬‬
‫‪Begin‬‬
‫‪Read N‬‬
‫‪S1‬‬
‫‪I1‬‬
‫‪While I < N loop‬‬
‫‪SS+2*I+1‬‬
‫‪II+1‬‬
‫‪End loop‬‬
‫)‪Return (S‬‬
‫‪End‬‬
‫‪ -‬ماذا تعيد الخوارزمية إذا كانت ‪.N = 7‬‬
‫‪ -‬ماذا تنفذ هذه الخوارزمية‪.‬‬

‫تمرين ‪:3‬‬
‫‪ -‬لتكن لدينا الخوارزمية التالية‪:‬‬
‫‪Var k, I, J number‬‬
‫‪Begin‬‬
‫‪Read k‬‬
‫‪I3‬‬
‫‪J1‬‬
‫‪While J <= K loop‬‬
‫‪I  2* I – 2‬‬
‫‪JJ+1‬‬
‫‪End loop‬‬
‫‪Return I‬‬

‫‪ -‬ماذا تعيد الخوارزمية إذا كانت ‪K = 5‬‬


‫‪14‬‬

You might also like