الخوارزميات، مدخلك إلى عالم البرمجة
مدرج تحت قسم: دروس
كثيراً مانسمع في عالم البرمجة كلمة خوارزميات أو خوارزمية، ولكن ليس الكثير من يعرف معناها. كثيرٌ من المبرمجين لا يعلمون ماهي الخوارزميات نظرياً ولكن فعلياً يستخدمونها دون أن يعلموا (وأنا واحد منهم)! ، كيف ذلك؟
الخوارزمية تعريفاً هي سلسلة من الخطوات المنطقية المتتالية التي تُكتب بشكل منطقي لكي نحل مشكلة معنية، لذلك.. فإن كثيراً من المبرمجين لا يعلمون أن تحليل المشكلة أو التفكير بكيفية برمجة شيء هو خوارزمية بحد ذاته.
بعدما عرفنا ماهي الخوارزمية أحب أن اقول ان هذا المقال موجه للجميع سواءً من تعلم لغات البرمجة أو من لم يتعلم ويرغب في ذلك لأنها تُتيح لك امكانية تحليل الأخطاء بشكل منطقي ! وانا استخدم كلمة خطأ أو مشكلة ولكن لا أعني بها مشكلة أو خطأ بحد ذاته بل أقصد به القضية المطروحة أمامنا.
خصائص الخوارزمية
1- تحديد النهاية
ويعني أن الخوارزمية يجب ان تكون منتهية بعد عدد مُعين من الخطوات لا أن تمتد إلا اللانهاية ! بالعربي الفصيح ان يعرف المبرمج إلى أين يُريد الذهاب.
2- عدم الغموض
أن تكون الخوارزمية واضحة وتحدد من خلالها ما الذي تريده يعني لو قرأ أي شخص الكود الذي تكتبه بكل بساطة يستطيع فهم ماهو مكتوب.
3- الفعالية
وبكل بساطة يُقصد التالي : “أيها المُبرمج حاول ان تصل لمُبتغاك بأقصر الطُرق “، يعني السطر أو الكود الذي لا عمل لها احذفه فوراً لكي يتم تنفيذ برنامجك بسرعة و مرونة وهما من شروط البرنامج الناجح . خواص سهلة ومفهومة أعتقد ذلك والآن سنبدأ بإذن الله بتحليل أول قضية أمامنا.
القضية الأولى
نُريد أن نكتب خوارزمية تُعطينا المتوسط الحسابي لمجموعة من الأرقام:
set total to zero.
set count to zero.
Get num.
while num not equal zerozero do
{
add num to total.
increment count.
}
if num is zerozero {
set average to total divided by count
output average
}
الآن سنشرح هذه الخوارزمية :
في السطرين الأول والثاني قلنا له أننا نُعطي المتغير Total & countقيمة الصفر لأنهما عبارة عن صندوقان و سيتم جمع قيم لهما، وفي السطر الثالث قلنا له أن يجلب لنا قيمة الرقم من خلال Get num. والآن في كل لغات البرمجة كلمة While تعني حلقة تكرار والآن نحن سنعمل له حلقة تكرار لماذا؟ بما أننا سندخل له أكثر من رقم فيجب علينا ان نعمل حلقة تكرار يتوقف البرنامج عن قبول الأرقام عندما يتحقق الشرط ! لم تفهم شي وانا كذلك سأشرح لك.
While num not equal zerozero do
قلنا له طالما الرقم (يعني الرقم الذي نقوم بإدخاله ) لا يساوي صفر صفر (00), قم بمجموعة من العمليات وهي موجودة ضمن القوسين..
{
}
والآن نأتي لشرح الموجود داخل القوسين أي داخل شرط التكرار:
قلنا له في أول سطر Add num to total، أول شي لو تذكرون عرفنا المتغير توتال يساوي الصفر وقلت لكم أنه عبارة عن صندوق يجمع له قيم صحيح ؟ والآن بدأنا بجمع الأرقام التي يتم ادخالها.
قلنا له Increment count، بمعنى ان اعمل زيادة للعداد كاونت الذي عرفناه أول خطوة بقيمة صفر.
والآن انتهت الحلقة ! أي رقم ستدخله له سيقوم بجمعه للعداد الأول ومن ثم زيادة واحد لعدد الأرقام لأن فكرة المتوسط الحسابي تقوم على فكرة جمع الأرقام وتقسيمهم على عددهم، فمثلاً لدنيا الأرقام 1,3,5,6,7,8 سيقوم بجمعهم والناتج سيكون : 30 أي قيمة total ستكون 30.
وقيمة العداد الثاني وهو كاونت ستكون 6
هل فهمت ذلك؟
الآن بعدما عرفنا للبرنامج كيف يعمل اضفنا شرط صغير بعدما انتهت حلقة التكرار، قلنا له:
If (num is zerozero)
{
set average to total divided by count.
Output average
}
الشرط بكل بساطة هو انه عندما يتم ادخال القيمة صفرصفر للبرنامج فأنه سيقوم بتقسيم مجموع الأرقام على عددهم وقام باسنادهم للمتغير average ومن ثم طلبنا طباعة المتغير average، وفي كل لغة برمجة الشرط
If
{
}
يأتي بالصيغة هذه !!
ربما تجدونها صعبة قليلاً أو غامضة و لكن مع الوقت كل شيء سيتضح بإذن الله و كنصيحة شخصية حاول أن تتعلم لغة برمجة في نفس الوقت الذي تبدأ بتعلم الخوارزميات بعضكم سيخالفني ولكن هدفي من هذه الخطوة أن تفهم البرمجة بشكل عام وبهذه الحالة أي لغة برمجة ستجدها سهلة، ولكن افهم جيداً ان هدف الخوارزميات هو فهم طريقة البرمجة وليست طريقة الكتابة بالحرف لأنه ربما تتغير من لغة إلى لغة ثانية.
تمرين صغير
اكتب خوارزمية تقوم بجمع رقمين ومن ثم طباعة الناتج، وكمفتاح للحل الخوارزمية لا تحتاج إلى حلقة تكرار لأننا سنعتبر أن البرنامج يأخذ رقمين فقط!
بانتظار حلولكم.
هذا كل شيء يُتبع بإذن الله و بانتظار أجوبتكم.


شكرا لك ، لست مبرمجا ولكن هذا حلي :
set total to zero
get num.
add num to total
output total
ما رأيك ؟
( استعنت بالأمثلة التي أضفتها في حلي )
أتمنى منك المواصلة في طرح مقالات أخرى عن الخوارزميات
أهلاً بك أخي أبو صالح جميل جداً حلك ولكن عندي تعليق واحد !
set total to zero
استخدامها هنا غير خاطىء ولكن غير ضروري ! السبب لأنه ليس عداد !! في الأساس ستكون قيمته تساوي العدد الأول العدد الثاني , أما في الأمثلة فأنه عداد يضيف كل مرة 1 !! لذلك يجب ان يكون صفراً لكي يعرف من أين سيبدأ .
ثاني شيء انت عرفت رقم واحد !! يعني من المفروض يكون
get num
get num1
على العموم كبداية راااائع جداً وبانتظار المزيد .
تحياتي
فراس
السلام عليكم
*للفائدة:
بالإمكان أن أجعلها function تستقبل رقمين.. باستخدام JAVA أو غيرها
int add(int nm1,int nm2)
{
int sum=0;
sum=nm1+nm1;
return sum;
}
وشكراً لك أخوي فراس..
صراحة أشد على يدك بخصوص إعطاء مثل هذه الدروس العامة,
واللي يمكن ان تترجم بأي لغة برمجة..
لأنه هناك مفاهيم عامة -كما تعلم- مشتركة في جميع لغات البرمجة..
ويجب على المبتدئ أن يعلمها..كـ if,while… إلخ..
أخوك
ربان.. : )
شكراً لك أخي الكريم ربان , ولكن كما قلت في مقالتي الهدف هو فهم البرمجة !! ومن ثم أن جافا هي لغة لبرمجة تطبيقات مكتبية وليست تطبيقات ويب ولا نريد تعقيد المثال !
شكراً .
تحياتي
فراس
ماشاء الله عليك مبدع …
يعطيك ألف عافية وكثر من هالدروووووووووس
هناك موقع خاص بالخوارزميات العربية يقدم مسابقات و دروس حول الخوارزميات و هو جميل و عنوانه هو :
http://www.vbnetworld.com/Competition
أخي أبو بسام انتظرني قريباً .
شكراً لك أخي أيوب شي جميل , سأتصفح الموقع ويمكن أنقل منه .
تحياتي
فراس
ابدأ
أ=أدخل العدد الأول
ب=أدخل العدد الثاني
ج=أ+ب
اطبع ج
النهاية
جميل جداً حتى الآن هناك متابعة للموضوع , إن شاء الله سيكون هناك تكملة .
تحياتي
فراس
مقال رائع
وحقاً كما تقول أخى فراس .. الخوارزميات هى المدخل للدخول لعالم البرمجه
أستطيع أن أقول فى هذا الصدد أننى أتبع فى برمجتى أسلوب :
منطق ما تريد برمجته لتجده سهلاً .. ومن ثم قم بكتابة الكود
يعطيك العافيه على الموضوع الجميل
اما بانسبه للخوارزميات فالخوان ماقصرو ولكن سوف ادلو بدلوي ولكم الشكر فالخوارزمات مهمه لكل مبرمج لنك لما تكتب خوارزم لمشروعك تستطيع كتابته باي لغه برمج هو البيس لمشروعك وتستطيع ان تعدل في مشروك بسهول ويستطيع اي مبرمج يفهم برنامجك بسهوله
enter num1}
enter num2
sum=0}
sum=num1+num2
}
out put}
درس رائع و واضح .. واصل =)
بارك الله فيك يا أخي
يسلم يمينك على الشرح
و الله يجعلها في ميزان حسناتك
شكراً للجميع على المتابعة و بإذن الله سأطرح تدوينة جديدة تخص العمليات المنطقية في الخوارزميات !
لا أصدق أنه مر عام كامل على هذه التدوينة و مازالت تلقى هذا النجاح :)
تحياتي
فراس
بارك الله فيك وجعلها في ميزان حسناتك
ورحم الله والدينك ووالدين الى يقروون معانا
تحياتي لك
أخي شكراً بس ياريت تعملوا قسم للخوارزميات زي PHP و HTML لأنها لغة برمجة مهمة مثلهم وجزاك الله خيراً
حل التمرين السابق
start
read A.B
let sum=A+B
print sum
end
اولا جزاك الله خير على الموضوع والشرح المرتب
وده حلي ويارب اكون فهمت ويطلع صح
get first no
get second no
set total to first no plus second no
out put total
وعندي شوية استفسارات لو تكرمت
2-ايه هي شروط كتابة الخوارزمية
يعني ايه هو الشكل الامثل لكتابة الالجورزم
يعني غلط اما اكتب اي علامات جمع او طرح ؟؟
لاني ملاحظة ان معظم المشاركات قريبة للكود
وانا كمان ما جيت احل الاول كبته شكل الكود
2-وفي المثال الي حضرتك كاتبه
ينفع استخدم if else
وايه الفرق
والف الف شكر على الشرح
اريد فهم الخوارزميات