ما هي الخوارزمية؟
فلنقلها ببساطة: هي الطريقة المناسبة للقيام بعمل ما أو حل مشكلة معينة.
فمثلاً:
كود:
Label1.Caption=Text1.Text
هذه خوارزمية! ماذا؟! نعم، هذه خوارزمية تقوم بنقل محتوى Text1 وتضعه في Label1 . إذا ليس من الضروري أن تكون الخوارزمية من النوع:
X^2+2AB/25Y=2CB
بل يمكن إن تكون شيئاً بسيطاً جداً.
الخوارزمية الأولى (هل العدد زوجي أو فردي؟)
نبدأ بمقدمة عن اللغة العربية، نقول "هل العدد زوجي أو فردي" ولا نقول "أم فردي" لأن استعمال "أم" مقصور على همزة الاستفهام. مثلاً: (أذهبت أم لم تذهب؟)
وبعد هذه المقدمة اللغوية (المحبطة)، نعود إلى البرمجة والخوارزمية التي بين يدينا، حاول أن تحلها بنفسك مستخدماً المعلومات التالية:
المطلوب منك أن تصنع بريمجاً (تصغير برنامج) يقوم بإعطاء المستخدم الفرصة لوضع عدد في الـTextBox ثم يضغط زر الأوامر CommandButton ليعرف هل هذا العدد زوجي أو فردي، حيث تظهر له رسالة MsgBox تخبره بذلك.
لحل هذه الخوارزمية تحتاج إلى استعمال دالة حساب باقي القسمة Mod. مثال:
كود:
If 9 Mod 3=0 Then
MsgBox "Yes"
Else
MsgBox "No"
End If حيث يقوم الكود بتقسيم العدد 9 على العدد 3، ثم يختبر باقي القسمة، فإن كان صفراً فإن العدد 9 يقبل القسمة على 3، وإن كان غير الصفر فإنه لا يقبل.
بدّل الـ9 والـ3 بالأعداد أو المتغيرات المناسبة، وحاول قدر المستطاع، فإن لم تستطع، تعال واقرأ الحل.
الحل:
الحل بسيط جداً، وهو يختبر ناتج قسمة العدد الموجود في الـTextBox على 2، فإن كانت القيمة صفراً فإن العدد زوجي، وإن كانت غير ذلك فالعدد فردي. لاحظ الكود التالي:
كود:
Dim Number As Integer
Number=Text1.Text
If Number Mod 2=0 Then
MsgBox "العدد زوجي"
Else
MsgBox "العدد فردي"
End Ifهل رأيت أسهل من هذا، حاول فهم الكود جيداً وطوّره.
وإن كانت كبرياؤك لا تسمح لك بالنزول إلى مستوى الـVisual BASIC فهذا الكود نفسه بالـC++:
كود:
int Number;
cin>>Number;
if (Number%2==0)
cout<<"العدد زوجي";
else
cout<<"العدد فردي";
ويمكنك ملاحظة الشبه الكبير بين الكودين إن كان عندك اطّلاع على لغة C++
انتظر المثال القادم. ولا تحاول الاطلاع على الأمثلة الأخرى قبل أن أشرح لك المطلوب من كل واحد منها وتحاول حلها بنفسك لتتحقق الفائدة المطلوبة.
الخوارزمية الثانية (خوارزمية تحليل الكلمة) :
سوف تعجبكم هذه بإذن الله
حلل الكلمة التالية:
أحمد = أ + ح + م + د
هذا ما سنصنعه، برنامج يحل واجبات طلاب الصف الأول ولنبدأ:
إذا نظرت إلى المثال في المرفقات في المشاركة السابقة، ستجد أن المستخدم يظهر له TextBox و CommandButton فيكتب ما يريد في مربع النص، ثم ينقر على الزر فتظهر له رسائل متتالية، كل واحدة منها تحوي حرفاً من الكلمة، فلنأخذ مثالاً:
كتب المستخدم في مربع النص كلمة Abboodd وضغط الزر، ستظهر له رسالة MsgBox فيها A ثم أخرى فيها b ثم أخرى فيها b ثم o ثم o ثم ..... إلى أن ينهي الكلمة كلها.
سنحتاج في خوارزميتنا هذه إلى حلقة For ، لا تخف، ستكون حلقة بسيطة، كما ستساعدنل دالّتان:
1- الدالة Mid :
وتعطيك مقطعاً محدداً من نص ما، وتستعمل كالتالي:
Mid(Text,Start,Length)
ولنأخذ مثالاً:
كود:
MsgBox Mid("Abboodd",4,2)
هنا، ستظهر لك رسالة، فيها نص، أول حرف منه هو الحرف الرابع من كلمة Abboodd ، أي الحرف o ، وطول النص في الرسالة حرفان اثنان، أي ستكون النتيجة (oo).
جرب بنفسك! غير المثال وتمرن على هذه الدالة، لأنها ستكون أساسية في خوارزميتنا هذه بإذن الله تعالى.
2- الدالة Len:
تعيد هذه الدالة طول نص ما، وتستعمل كما يلي:
Len(Text)
فمثلاً:
كود:
MsgBox Len("Abboodd")
برأيك ماذا سيظهر في الرسالة؟ سيظهر الرقم 7، وهو عدد حروف الكلمة Abboodd ، وجرب مثلاً:
كود:
MsgBox Len(Text1.Text)
واكتب نصاً في الـTextBox وسيعطيك هذا الأمر عدد حروفه !
ستسعمل هذه الدالة في حلقة التكرار.
وإليك طرف الخيط:
كود:
For i = 1 To Len(احزر ماذا)
MsgBox احزر ماذا
Next
والآن، بدل (احزر ماذا) بالتعابير المناسبة، وابدأ العمل بنفسك، ولا تطلع على الحل قبل ألف محاولة!
ويمكنك طلب المساعدة من أخيك إن كان في الصف الأول
الحل:
بسيطة:
كود:
For i = 1 To Len(Text1.Text)
MsgBox Mid(Text1.Text, i, 1)
Next
ثلاثة سطور فقط!
نعم، وسنشرح هذا الكود بمثال، حيث سنفترض أن المستخدم كتب في الـTextBox كلمة Abboodd، عندها سيتم تنفيذ التالي في الكود:
كود:
For i = 1 To 7
MsgBox Mid("Abboodd",i,1)
Next
ما الذي حدث هنا؟ عندما كتب المستخدم كلمة Abboodd أخذ البرنامج عدد حروف هذه الكلمة وهو 7، ووضعها بدل Len(Text1.Text) وبهذا سوف تظهر هذه الرسالة سبع مرات، والآن، ما الذي يحدث داخل الحلقة؟
ألم نقل إن الدالة Mid تعطيك الحروف التي تريدها من نص ما؟ إذاً فإن البرنامج يأخذ كلمة Abboodd ثم ينظر من أي حرف سيبدأ، فيجد أنه سوف يبدأ من i ، وبما أن i يزيد مرة في كل دورة فإن البرنامج ، سيأخذ الحرف الأول في المرة الأولى، ثم الثاني، ثم الثالث.....
ولاحظ أننا وضعنا الرقم 1 هنا:
كود:
MsgBox Mid("Abboodd",i,1)
وبهذا فإنه سيعطيني حرفاً واحداً في كل مرة، وليس أكثر من ذلك.
حاول فهم الكود وتطبيقه، وتغييره وتطويره، ثم يمكنك عرضه في سوق طلاب الابتدائي، لتجني ثروة طائلة (بشرط، لي نصف الأرباح لأني صاحب الفكرة)
ملاحظة: أرجو إبداء ملاحظاتكم على هذه السلسلة، وهل هي مفيدة وتستحق الاستمرار بها، أم لا؟
والسلام عليكم ورحمة الله
السلام عليكم ورحمة الله
خوارزمية رسم دوائر عشوائية:
ما سنبرمجه اليوم، هو عبارة عما قد يكون نواة صغيرة لبرنامج حافظ الشاشة ScreenSaver .
ولنبدأ:
المطلوب:
عندما تظهر النافذة في المشروع في المرفقات، تجد أن البرنامج قد بدأ برسم دوائر تتمتع بصفات عشوائية، وهي:
1- أماكن عشوائية.
2- حجوم عشوائية.
3- ألوان عشوائية.
وتجد أنه يرسم في كل ربع ثانية دائرة .
والآن لدينا نقاط عديدة لنتحدث عنها، ونحتاج إلى القليل من التركيز:
أولاً: كيف نرسم دوائر على النافذة؟
بالطريقة التالية:
كود:
Circle(X,Y),Radius,Color
حيث X,Y إحداثيات مركز الدائرة (سيناته وصاداته)، و Radius هو طول نصف قطر الدائرة، و Color هو لونها.
يمكنك وضع ما يناسبك، مثلاً:
كود:
Circle(500,300),400,vbRed
عندها سيرسم لك دائرة إحداثياتها (500،300) وطول نصف قطرها 400، ولونها أحمر vbRed.
كما رأينا فقد استعملنا الثابت vbRed للتعبير عن اللون الأحمر، وهناك أيضاً vbBlue و vbWhite و vbBlack......
ولكن هذه الألوان قليلة، وغير عملية، لكن هناك طريقة أخرى للحصول على الألوان، وهي:
كود:
QBColor(عدد من 0 إلى 15)
جرب مثلاً:
كود:
Form1.BackColor=QBColor(12)
هذا سيعطيك اللون الأحمر، يمكنك تجريب الأرقام الأخرى للحصول على ما يناسبك، لكن هذا لا يعطيك إلا 16 لون، لذلك إليك الطريقة المثلى للحصول على الألوان:
كود:
RGB(Red,Green,Blue)
حيث Red هي نسبة اللون الأحمر من 0 إلى 255، و Blue هي نسبة الأزرق، و Green نسبة الأخضر، أي أنه سيأخذ النسبة التي تحددها من كل لون، ويمزجها ويعطيك اللون الذي تريده. وهذه الطريقة يمكنها أن تعطيك ألوان تصل إلى (16777214) لون ! نعم عدد فلكي من الألوان تحصل عليه بهذه الطريقة، فيمكنك كتابة:
كود:
Form1.BackColor=RGB(0,0,0)
لتحصل على اللون الأسود، ويمكنك كتابة :
كود:
Form1.BackColor=RGB(255,255,255)
لتحصل على اللون الأبيض، وبين هذين اللونين (16777214) لون آخر! فكلما غيرت درجة من الدرجات الثلاث، حصلت على لون جديد .
ملاحظة:
لا تستخدم هذا الأمر في الحدث Form_Load لأسباب ليس هذا مكان ذكرها.
ثانياً: عشوائية ... كيف؟
باستخدام المعامل Rnd ، جرب التالي في حدث النقر على زر ما:
كود:
R=Rnd
MsgBox R
اضغط الزر أكثر من مرة، ولاحظ: في كل مرة تحصل على رقم مختلف بطريقة عشوائية، ولكن أحياناً تريد تحديد الأرقام التي تريدها، يعني مثلاً، أريد رقماً عشوائياً بين 0 و 255، فيمكنك كتابة التالي:
كود:
A=Rnd*255
MsgBox A
وبهذا في كل ضغطة سيعطيك رقماً بين 0 و 255، .
والآن ما رأيك بمثال عملي، إليك التالي:
كود:
Dim Red As Integer, Blue As Integer, Green As Integer
Red = Rnd * 255
Blue = Rnd * 255
Green = Rnd * 255
Form1.BackColor = RGB(Red, Blue, Green)
هل رأيت كيف استعملنا المعلومات التي تعلمناها، فأصبح لدينا كود يقوم بتغيير لون النافذة إلى لون عشوائي في كل مرة.
بقيت ملاحظة على العشوائية:
لو لاحظت شيئاً هاماً، إذا جربت الكود السابق، ثم أغلقت البرنامج وفتحته من جديد، وجربت العملية، ستجد أنه يعطيك الألوان نفسها في كل مرة، لذلك، ولتحصل على أرقام عشوائية حقيقية، اكتب في الـForm_Load :
كود:
Randomize
هذا الأمر سيجعل الألوان تختلف في كل مرة، وبهذا تحصل على عشوائية حقيقية.
ثالثاً: كيف أقوم بالرسم كل ربع ثانية؟
هناك أداة على شكل ساعة تدعى Timer، وهذه الأداة تمكنك من القيام بمجموعة أوامر كل فترة زمنية محددة، انقر على الساعة وضعها على الـForm ثم انظر إلى نافذة الخصائص، ستجد خاصية تدعى Interval اضبطها على 1000، ثم انقر على الأداة مرتين لتظهر لك نافذة البرمجة الخاصة بها، واكتب:
كود:
Print "Hello"
ثم شغل البرنامج، ولاحظ ما الذي سيحدث، في كل ثانية سيطبع على النافذة كلمة Hello ، حاول استنتاج طريقة عمل هذه الأداة.
والآن أصبح لديك المعلومات الكاملة لرسم دوائر عشوائية على النافذة في كل ربع ثانية، حاول فهم كل نقطة من النقاط السابقة جيداً، ثم اعمل على استخدامها بما يخدم برنامجك، إلى أن أعطيك الحل قريباً بإذن الله.
والسلام عليكم ورحمة الله
جدول الضرب:
نظراً للنجاح الذي حققه برنامج "تحليل الكلمات" في سوق الابتدائي، فقد عرض علينا طلاب الصف الثالث مبلغاً كبيراً مقابل برمجة برنامج لجدول الضرب، وقد تم توقيع العقد
ولنبدأ:
عندما نفتح المشروع، ونختار جدول الضرب، نجد نافذة فيها TextBox و CommandButton ، نضع عدداً ما في الـTextBox ونضغط الـCommandButton لنحصل على جدول الضرب الخاص بالعدد، من 0 إلى 10، مطبوعاً على النافذة، يعني إذا وضعت 5، فإنه سيطبع لك:
0
5
10
15
20
25
30
35
40
45
50
هذه هي، لن أشرح لك الطريقة، عليك أن تكتشفها بنفسك، سأعطيك فقط طرف الخيط، وهو أنك ستسعمل جملة For واحدة.
كما أني سأعطيك نصيحة: يفضل... إن لم نقل يجب، أن تجرب الحل على الورق، قبل أن تنقل الأفكار إلى الحاسوب، لأن ذلك يساعدك على التفكير المنطقي، وعلى تنظيم أفكارك بطريقة مناسبة، ويصرف ذهنك من التفكير بطريقة كتابة الكود والتعليمات، إلى التفكير بطريقة حل المشكلة الأساسية، كما أنه يمكنك أن ترسم و(تشخبر) على الورق ، وهذا ما لا تستطيع فعله على الحاسوب.
كود:
Dim i As Integer, Num As Integer
Num = Val(Text1.Text)
For i = 1 To 10
Print Num * i
Next
كما لاحظنا هو حل بسيط، يتم فيه وضع القيمة الموجودة في الـTextBox في المتغير Num ، ثم نبدأ بـFor ونضرب المتغير i الذي يزيد في كل دورة ، بالعدد الذي هو Num ، ونطبع النتيجة على النافذة.
بالنسبة للدالة Val ، هي دالة بسيطة تقوم بأخذ القيمة العددية لنص ما ، يعني إذا كان عندك (12) فبدون Val سيتعامل معها البرنامج على أنها نص، مما سيؤدي إلى حدوث مشاكل، أما مع استخدام Val فسيفهم أن ما في الـTextBox هو عدد وليس نصاً (حروفاً)، وسيتعامل معه على هذا الأساس.
حساب محيط ومساحة دائرة:
هذا آخر تمرين في الرمحلة الاولى، قبل أن ننتقل إلى المرحلة الثانية، التي ستجدون فيها تمارين أجمل وبمستوى أعلى بإذن الله.
أما الآن فما زلنا مع الابتدائي ، فلدينا تمارين من الصف الخامس نريد أن نحلها.
لن أشرح كثيراً، فقط نريد أن يضع المستخدم رقماً ما في الـTextBox ، وهذا الرقم سيكون طول نصف قطر الدائرة التي نريد حساب مساحتها، ثم يضغط الزر لتظهر له رسالة تقول:
المساحة هي (المساحة)
ورسالة أخرى:
المحيط هو (المحيط)
حيث (المساحة) و (المحيط) هي النتائج التي توصلنا إليها، فمثلاً إذا أدخل المستخدم 5، فإن النتيجة ستكون:
المساحة هي 78.5
المحيط هو 31.4
احسبها
علماً أن قانون المساحة هو:
كود:
Q = R^2 * Pi
حيث Q نقصد بها المساحة، و R^2 تعني نصف القطر قوة 2، أما Pi فهو ثابت يساوي 3.14.
هل تذكرت هذا القانون؟
أما قانون المحيط فهو:
كود:
A = 2 * R * Pi
تمام؟
ابدأ الحل، ولا تنس استعمال Val التي تحدثنا عنها في التمرين الماضي، لكي يتعامل البرنامج مع الرقم الموجود في الـTextBox على أنه رقم ، وليس على أنه حرف.
هيا ابدأ، هذا تمرين صف خامس [b]