الخوارزميات، مدخلك إلى عالم البرمجة
مدرج تحت قسم: دروس
كثيراً مانسمع في عالم البرمجة كلمة خوارزميات أو خوارزمية، ولكن ليس الكثير من يعرف معناها. كثيرٌ من المبرمجين لا يعلمون ماهي الخوارزميات نظرياً ولكن فعلياً يستخدمونها دون أن يعلموا (وأنا واحد منهم)! ، كيف ذلك؟
الخوارزمية تعريفاً هي سلسلة من الخطوات المنطقية المتتالية التي تُكتب بشكل منطقي لكي نحل مشكلة معنية، لذلك.. فإن كثيراً من المبرمجين لا يعلمون أن تحليل المشكلة أو التفكير بكيفية برمجة شيء هو خوارزمية بحد ذاته.
بعدما عرفنا ماهي الخوارزمية أحب أن اقول ان هذا المقال موجه للجميع سواءً من تعلم لغات البرمجة أو من لم يتعلم ويرغب في ذلك لأنها تُتيح لك امكانية تحليل الأخطاء بشكل منطقي ! وانا استخدم كلمة خطأ أو مشكلة ولكن لا أعني بها مشكلة أو خطأ بحد ذاته بل أقصد به القضية المطروحة أمامنا.
خصائص الخوارزمية
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
{
}
يأتي بالصيغة هذه !!
ربما تجدونها صعبة قليلاً أو غامضة و لكن مع الوقت كل شيء سيتضح بإذن الله و كنصيحة شخصية حاول أن تتعلم لغة برمجة في نفس الوقت الذي تبدأ بتعلم الخوارزميات بعضكم سيخالفني ولكن هدفي من هذه الخطوة أن تفهم البرمجة بشكل عام وبهذه الحالة أي لغة برمجة ستجدها سهلة، ولكن افهم جيداً ان هدف الخوارزميات هو فهم طريقة البرمجة وليست طريقة الكتابة بالحرف لأنه ربما تتغير من لغة إلى لغة ثانية.
تمرين صغير
اكتب خوارزمية تقوم بجمع رقمين ومن ثم طباعة الناتج، وكمفتاح للحل الخوارزمية لا تحتاج إلى حلقة تكرار لأننا سنعتبر أن البرنامج يأخذ رقمين فقط!
بانتظار حلولكم.
هذا كل شيء يُتبع بإذن الله و بانتظار أجوبتكم.


عفوا بس انا مش فاهم ايشي ,انا اخذت مادة الخوارزميات وما انجحت فيها وما فهمتها يا ريت المساعده وجزاكم الله خيرا .
جزاكم الله خيرا انا ادرس بالجزائر لكن الخورزميات لا ادرسها هكذا ساعدوني
السلام عليكم
انا طالب ادرس في السعوديه كلية التقنيه ادرس مادة اساسيات برمجة الحاسب
ودرسة الخوارزميات لكن مش نفس هذي الطريقه درستها كلها رسوم تعني الادخال والتقرير و المخرجات وغيرها رسوم عده اتمنى ان تفيدوني وجزاكم الله خير …
وحياة الله ما فهمت المادة
شو رايكو تفهموني اياها
I need a book of this, please.
انا فهمت اشياء بسيطة من هاد الشرح وهاي اول مرة بقرأ اشي بخص الخوارزميات انا لسة طالبة جديدة للبرمجة وما اخدت غير المواد الاساسية…بس طريقتك في الشرح كتير روعة
مرحبا شباب ممكن حدا يساعدني هي مسئلة بالخوارزميات
يراسنلي على ميلي إذا ممكن بأسرع وقت
n.nada_1222@yahoo.com
أوجد أحدهم الطريقة البسيطة التالية لتوليد المربع السحري عندما يكون بعد المصفوفة فردياً:
1- ضع 1 في منتصف السطر الأعلى.
2- بعد ملء الخانة (p,q) بالعدد اختبر الخانة الموجودة في السطر الأعلى والعمود الأيسر (انظر إلى الأسهم في الرسم) أي الخانة (p-1 , q-1) .
3- إذا كانت الخانة مشغولة مسبقاً ضع العدد التالي x+1 في الخانة الفارغة التي تقع مباشرة تحت الخانة (p,q).
المطلوب:
1- اكتب التابع CheckMagic والذي يختبر كون المربع (اي المصفوفة) سحرياً أم لا.
2- ما هو تعقيد التابع CheckMagic.
3- اكتب الإجرائية العودية التي تحب المربع السحري من البعد n وفقاً للخوارزمية الموصوفة أعلاه.
Procedure RecMagic(x: 1 .. nmax; p,q: 1 .. nmax);
(يمثل x العدد المراد ملؤه وتمثل كل من p و q الموقع الذي سيتم وضع العدد فيه)
ثانياً:
نريد أن نضع خوارزمية عامة لحل هذه المسألة بغض النظر إن كان بعد المصفوفة فردياً أم لا وذلك بالاستفادة من المخطط العام للخوارزميات التراجعية (BackTracking Algorithms).
المطلوب:
4- كتابة الإجرائية التراجعية التي تحسب المربع السحري من البعد n>
Procedure BackTMagic (x: 1.. nmax; var b:Boolean);
5- - اكتب برنامج بلغة البرمجة التي تختارها (Java , C# , VB.Net , C++, Pascal) من أجل تنفيذ الخوارزمية.
والتي تفترض أن المصفوفة المطلوبة Matrix هي متحول عام بالنسبة للاجرائية والوسيط x يدل على العدد الذي يجب وضعه في المصفوفة والوسيط b يدل على نجاح الإجرائية أم لا.
ملاحظة: يجب توضيح الاستدعاء الأول لهذه الإجرائية.
ابحث عن حل لخوارزميه تحول لي العدد العشري الى عدد ثنائي 0 او 1 .
@ max :
أخي ماكس الخوارزمية هي على الشكل التالي :
get num
while (num not equal zero)
{
print num%2;
set num equal num/2
}
تحياتي لك.
السلام عليكم ورحمة الله وبركاته
موضوع جميل جدا
اتمنى الشرح الكافي بحيث ان اكترنا مش فاهم حاجه في اي حاجه ونتمنى نفهم
واتمنى ان يكون فعلا تطبيقات على الدروس اول باول
جزاكم الله كل خير
السلام عليكم ورحمة الله وبركاته
أود شكركم على هذا الموضوع الجميل وانا اود تعلم الخوارزميات فربما اصبحت مهندس برمجيات في المستقبل وكما انها ممتعة على ما اعتقد
سؤالي لكم هو\ ماذا عن الفرص الوظيفية لمهندس البرمجيات في الوطن العربي والسعودية تحديداُ؟
وهل الأجور عاليةكما نسمع؟
وجزاكم الله خيراً
m7arb.blogspot.com
شيء رائع وشرح اروع
الخوارزمية بامكانها ان تحل اكبر مشكله في العالم طبعا اذا كانت دقيقة وصحيحة
والخوارزمية ضروريه للمبرمجين
مثال بسييييييييط :
لنفترض انك تريد عمل قهوة:
1_ يجب ان يكون نار
2_حتى نضع عليها الوعاء
3_ونضع الماء داخل الوعاء
4_ونضع القهوة على الماء
شرح كافي وافي
مبرمج محترف
أنا طالبة سنة أولى في كلية الهندسة المعلوماتية
الشرح كافي جدا وأنا فهمت مسألة المتوسط الحسابي كتير منيح
هذه حل للتمرين المعطى
int a
int b
int sum=0
cin>>a
cin>>b
sum=a+b
cout<<sum
انا فاهم الخوارزميات بس اريد اعرف اكتر عن الاشكل الانسيابية الى بتحل عن طرقها الخوارزميا غير المشهورة
انا طالبه فى معه وتخصصى برمجيات حاسوب
انا كنت مش فاهمتها ولكن لما بداءة اتعامل معها كانها لعبه فهمتها والله
انا مبرمج سنه ثانيه
واريد انا طورنفسي في هذ المجال اكثر
مرحبا انا طالبة سنة اولى هندسة حيوية و مطلوب مني حلقة بحث عن الخوارزميات وما بعرف شو هي الأفكار اللي بدي اتحدث عنها يا ريت حدا يساعدني حتى اعرف كيف اكتبها