Abboodd

خوارزميات بسيطة للمبتدئين

57 ردود في هذا الموضوع

السلام عليكــم ورحمـة الله وبركاتــه

بســم الله الـرحمــن الرحيــم

هذا الدرس يحتوي على مجموعة من الأمثلة لخوارزميات بسيطة، يتراوح مستواها بين السهل جداً والمتوسط، وقد أحببت أن أقدمه لأسباب عديدة:

1-تشجيع الخبراء على تقديم دروس حقيقية ومتقدمة، بعد أن دخل المنتدى في حالة من السبات.

2-تبسيط مفهوم الخوارزمية للمبتدئين

3-مشاركة الإخوة في معلوماتي البسيطة.

4-الفوز برضوان الله تعالى.

علماً أن الخوارزميات التي سيقدمها الدرس موجودة جميعها في مشروع واحد في المرفقات، لكن قبل أن تقرأ حل أية خوارزمية، حاول أن تحلها بنفسك، وجرب مراراً وتكراراً، ثم اطّلع على الحل.

ما هي الخوارزمية؟

فلنقلها ببساطة: هي الطريقة المناسبة للقيام بعمل ما أو حل مشكلة معينة.

فمثلاً:

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++

انتظر المثال القادم. ولا تحاول الاطلاع على الأمثلة الأخرى قبل أن أشرح لك المطلوب من كل واحد منها وتحاول حلها بنفسك لتتحقق الفائدة المطلوبة.

والسلام عليكم ورحمة الله.

_________________________.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سلمت يداك

وبارك الله فيك

وجعله الله في ميزان حسناتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

انت مبدع يا سيدي

وانتظر الباقي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيرًا أخي Abboodd ، وهذه طريقة أخرى :

انسخ الكود
  1. If (Number And 1) = 0 Then
  2. MsgBox "العدد زوجي"
  3. Else
  4. MsgBox "العدد فردي"
  5. End If
  6.  

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه

الخوارزمية الثانية (خوارزمية ترتيب الأعداد):

لا تبدأ بمحاولة التفكير في هذه الخوارزمية، قبل أن يكون أمامك كأس أو فنجان، من الشاي أو القهوة، بالإضافة إلى اطلاع على المصفوفات Arrays وحلقات التكرار For.

سنستعمل في خوارزميتنا هذه مصفوفة واحدة وأربع حلقات تكرار، إليك طريقة الحل، وكل ما عليك أن تفكر:

كما في المشروع في المرفقات، تجد أن هذه الخوارزمية تعتمد على ضغط زر أوامر CommandButton، فيظهر لك مربع حوار يطلب منك إدخال عدد، وهذا المربع من النوع InputBox، سيظهر لك هذا المربع عشر مرات، في كل مرة تدخل عدداً ما، فإذا أتممت عشر المرات، ستطبع هذه الأعداد على النافذة بالترتيب من الأصغر إلى الأكبر.

والآن العمل هنا أربع خطوات:

1- عليك بتعريف مصفوفة تحوي عشرة عناصر.

2-عندما يضغط المستخدم الزر، يظهر له مربع الحوارفيضع فيه عدداً ما، ثم يضغط Ok فتحفظ قيمة العدد في المتغير الأول من المصفوفة، ثم يظهر مرة أخرى ويضع المستخدم العدد، وتحفظ القيمة في المتغير الثاني من المصفوفة،، وهكذا، حتى تظهر المربعات عشر مرات، وهذه العملية تتم باستخدام جملة For الأولى.

3-الآن ترتيب الأعداد، عليك أن تركز معي جيداً، وإن كنت أنهيت كأس أو فنجان، الشاي أو القهوة، فعليك بأخرى أو آخر.

سنفرض جدلاً أن المستخدم اختار الأعداد التالية، ونطبق المثال عليها:

3-7-10-8-1-9-5-2-4-6.

سوف نقوم أولاً بمقارنة العدد الأول بكل عدد من الأعداد الأخرى، فإن كان العدد المقارَن به أصغر من العدد الأول، نبدل مكانيهما، انظر معي الآن:

post-177799-1230196679_thumb.jpg

هنا تتم مقارنة العدد 3 بالـ7، وبما أن 3 أصغر من 7، فلا يحدث شيء ويكمل المقارنة، ثم يقارن بالـ10 و الـ8، إلى أن يصل إلى الـ1، وبما أن 3 أكبر من 1، فإن البرنامج يبدل مكاني العددين ليصبح الترتيب كما يلي:

post-177799-1230196829_thumb.jpg

ثم يكمل المقارنة، فيقارن العدد الأول الذي أصبح ال،1، بالأعداد الباقية، فيجد أن 1 في مثالنا هذا أصغر من كل الأعداد الأخرى ، لذلك سيكمل المقارنة دون أن يبدل شيئاً إلى أن يصل إلى الـ6، فيكون عندها قد أنهى مقارنة العدد الأول بالأعداد الأخرى، ثم ينتقل إلى العدد الثاني، ويبدأ المقارنة:

post-177799-1230197002_thumb.jpg

وما إن يصل إلى الـ3 حتى يبدل بين العددين، لأن 7 أكبر من 3، وتستمر الحلقة هكذا حتى يصل إلى العدد الأخير.

تحتاج هذه الخطوة إلى حلقتي For متداخلتين، الأولى تقارن العدد المختار بكل عدد آخر، والثانية تنتقل بك من العدد الأول بعد أن تمت مقارنته بالأعداد الأخرى إلى العدد الثاني، وتبدأ المقارنة، ثم الثالث....

وبعد أن تنتهي الحلقة ستجد أن الأعداد أصبحت مرتبة من الأصغر إلى الأكبر، وإن لم تصدق، فجرب ذلك على الورق لتجد النتيجة صحيحة.

4- الخطوة الرابعة هي طباعة الأرقام على النافذة بعد أن تم ترتيبها، وتحتاج إلى حلقة For الرابعة، لتقوم فيها بطباعة الأرقام المحفوظة في متغيرات المصفوفة واحداً تلو الآخر، ليتفاجاً المستخدم أن الأعداد أصبحت مرتبة.

الآن حاول، معك ألف محاولة، فإن لم تستطع فتعال واقرأ الحل.

الحل:

أولاً سنعرف المصفوفة، ونعرف متغيراً آخر ستعرف فائدته بعد قليل، بالإضافة إلى متغيرات العد في جمل For:

Dim Numbers(10) As Integer, i As Integer, j As Integer, B As Integer

الآن، عندما يضغط المستخدم الزر، تظهر له عشرة مربعات الواحد تلو الآخر، وهنا نستخدم حلقة For الأولى:

For i = 0 To 9
Numbers(i) = InputBox("Enter the number please")
Next

أما الآن فترتيب الأعداد، أين كأس الشاي؟!

كما قلنا، سنستخدم حلقتي For متداخلتين، انظر معي الآن:

For i = 0 To 9
For j = i To 9
If Numbers(i) > Numbers(j) Then
B = Numbers(i)
Numbers(i) = Numbers(j)
Numbers(j) = B
End If
Next
Next

في الكود السابق بدأنا الحلقة الكبيرة التي عدادها هو المتغير i، وهو يمثل العدد الذي سنقارن به الأعداد الآخرى، ثم تبدأ الحلقة الثانية، ونلاحظ أننا قلنا له أن يجعل البداية التي يبدأ العد فيها هي نفسها المكان الذي وصل إليه المتغير i لكي لا تتم المقارنة بالأعداد التي قبل العدد الذي نريده، مما سيحدث خللاً في العمل، (جرب ولاحظ الخلل).

وثم نأخذ الأعداد التي سنقارن بها واحداً واحداً، فإن كان أحدها أصغر من العدد الذي نقارن به، تم التبديل، وإن لم يكن يكمل المقارنة، فإذا تمت مقارنة كل الأعداد يهذا العدد، انتهت المقارنة وخرج من الحلقة الصغيرة، وعندها ستزيد قيمة المتغير i مرة واحدة، أي إنه سينتقل إلى العدد الثاني ويبدأ المقارنة من جديد بالأرقام التي تليه، ويكرر هذه العملية حتى يصل المتغير i إلى 9، وعندها سيكون الترتيب قد تم، ويبقى طباعة الأرقام على النافذة.

حاول إكتشاف فائدة المتغير B.

أما الحلقة الأخيرة فتقوم بطباعة الأرقام على النافذة:

For i = 0 To 9
Print Numbers(i)
Next

حاول فهم الكود جيداً وقراءته عدة مرات، أعلم أنه قد يكون معقداً قليلاً عليك كمبتدئ، ولكن يجب أن تحاول فهمه وتجريب عمله أكثر من مرة، ثم حاول أن تطوره.

ماذا؟ تريده بالـC++ إليك الكود التالي مع اختلافات بسيطة:

 int A[10],B;
for (int y=0;y<10;y++)
{
cout<<"Write the numbers before sorting\t";
cin>>A[y];
}
for (int i=0;i<10;i++)
{
for (int j=i;j<10;j++)
{
if (A[j]<A[i])
{
B=A[i];
A[i]=A[j];
A[j]=B;
}
}
cout<<endl<<"Here are the numbers after sorted\t"<<A[i]<<endl;
}

هذا إن كنت تعرف استخدام C++ أما إن كنت لا تعرف فأغمض عينيك ولا تنظر.

نلتقي، بإذن الله تعالى، مع الخوارزمية التالية.

والسلام عليكــم ورحمـة الله وبركاتــه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

يبدو أني قد استعجلت في وضع الخوارزميات، ونسقتها بطريقة خلطت فيها المستويات الصعبة قليلاً بالمستويات البسيطة، لذلك سأجعل الخوارزميات على مراحل، كل مرحلة أصعب قليلاً من سابقتها.

إليك المرحلة الأولى Level 1 لقد شرحنا الخوارزمية الأولى منها في المشاركة الأولى، وهي (هل العدد زوجي أو فردي؟) أما باقي الخوارزميات فسأشرحها بإذن الله.

يمكنك الاطلاع عليها، ولكن لا تطلع على الكود، لأنك أنت من سيكتبه.

وفقكم الله إخواني.

والسلام عليكم ورحمة الله

Level_1.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

خوارزمية تحليل الكلمة:

يمنع حل الواجبات في هذا المنتدى، لذلك لا تخبر أحداً عن هذا الدرس، لأننا سوف نحل واجب العربي للصف الأول!

حلل الكلمة التالية:

أحمد = أ + ح + م + د

هذا ما سنصنعه، برنامج يحل واجبات طلاب الصف الأول :) ولنبدأ:

إذا نظرت إلى المثال في المرفقات في المشاركة السابقة، ستجد أن المستخدم يظهر له 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)

وبهذا فإنه سيعطيني حرفاً واحداً في كل مرة، وليس أكثر من ذلك.

حاول فهم الكود وتطبيقه، وتغييره وتطويره، ثم يمكنك عرضه في سوق طلاب الابتدائي، لتجني ثروة طائلة (بشرط، لي نصف الأرباح لأني صاحب الفكرة) :)

ملاحظة: أرجو إبداء ملاحظاتكم على هذه السلسلة، وهل هي مفيدة وتستحق الاستمرار بها، أم لا؟

والسلام عليكم ورحمة الله

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

خوارزمية رسم دوائر عشوائية:

ما سنبرمجه اليوم، هو عبارة عما قد يكون نواة صغيرة لبرنامج حافظ الشاشة 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 ، حاول استنتاج طريقة عمل هذه الأداة.

والآن أصبح لديك المعلومات الكاملة لرسم دوائر عشوائية على النافذة في كل ربع ثانية، حاول فهم كل نقطة من النقاط السابقة جيداً، ثم اعمل على استخدامها بما يخدم برنامجك، إلى أن أعطيك الحل قريباً بإذن الله.

أرجو التفاعل

والسلام عليكم ورحمة الله

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه

قلّي كم محاولة حاولت، أقل لك من أنت، وإليك الحل التالي:

نحن نريد القيام بالأمر في كل ربع ثانية، وهذا باستخدام الأداة Timer ، وبما أننا في المثال السابق وضعنا 1000 في خاصية Interval لنعبر عن ثانية واحدة، إذن لنعبر عن ربع ثانية سنضع 250، ثم ننقر مرتين لنفتح نافذة البرمجة الخاصة بالأداة، ونكتب:

Dim Red As Integer, Green As Integer, Blue As Integer
Dim X As Integer, Y As Integer
Dim Radius As Integer
Red = Rnd * 255
Green = Rnd * 255
Blue = Rnd * 255
X = Rnd * Me.Width
Y = Rnd * Me.Height
Radius = Rnd * 500
Circle (X, Y), Radius, RGB(Red, Green, Blue)

حاول فهم الكود بنفسك، واقرأه أكثر من مرة لتحصل على الفائدة الكبرى من التمرين.

كما ترى فقد عرفنا ثلاثة متغيرات ، هي نسبة كل من اللون الأحمر والأخضر والأزرق في اللون الذي نريده، وعرفنا متغيرين للإحداثيات هي X,Y ، كما عرفنا متغيراً هو طول نصف القطر Radius .

ثم أعطينا قيماً عشوائية لكل المتغيرات، وجعلنا الحد الأقصى لـX هو عرض النافذة، لكي لا يقوم برسم الدوائر خارج النافذة، وكذلك المتغير y جعلنا الحد الأقصى له هو طول النافذة، للسبب نفسه، أما المتغير Radius فجعلنا حده الأقصى 500، لكي لا تكون الدائرة كبيرة جداً (ويمكنك تغيير الـ500 إلى ما تريد)، وكذلك جعلنا الحد الأقصى لدرجات الألوان هو 255، للسبب الذي ذكرناه في المشاركة السابقة.

وبقي أن نرسم الدائرة ونمرر إليها القيم العشوائية.

وبهذا أصبح عندنا نافذة، يرسم عليها الجهاز في كل ربع ثانية دائرة تتمتع بإحداثيات عشوائية، ومساحة عشوائية، ولون عشوائي.

ولا تنسى وضع Randomize .

وظيفة: جرب عمل أشكال وتصميمات وابتكارات أخرى، أريد أن أرى وظيفتك غداً، وإلا سيكون هناك خصم للعلامات :)

والسلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

جدول الضرب:

نظراً للنجاح الذي حققه برنامج "تحليل الكلمات" في سوق الابتدائي، فقد عرض علينا طلاب الصف الثالث مبلغاً كبيراً مقابل برمجة برنامج لجدول الضرب، وقد تم توقيع العقد :wink:

ولنبدأ:

عندما نفتح المشروع، ونختار جدول الضرب، نجد نافذة فيها TextBox و CommandButton ، نضع عدداً ما في الـTextBox ونضغط الـCommandButton لنحصل على جدول الضرب الخاص بالعدد، من 0 إلى 10، مطبوعاً على النافذة، يعني إذا وضعت 5، فإنه سيطبع لك:

0

5

10

15

20

25

30

35

40

45

50

هذه هي، لن أشرح لك الطريقة، عليك أن تكتشفها بنفسك، سأعطيك فقط طرف الخيط، وهو أنك ستسعمل جملة For واحدة.

كما أني سأعطيك نصيحة: يفضل... إن لم نقل يجب، أن تجرب الحل على الورق، قبل أن تنقل الأفكار إلى الحاسوب، لأن ذلك يساعدك على التفكير المنطقي، وعلى تنظيم أفكارك بطريقة مناسبة، ويصرف ذهنك من التفكير بطريقة كتابة الكود والتعليمات، إلى التفكير بطريقة حل المشكلة الأساسية، كما أنه يمكنك أن ترسم و(تشخبر) على الورق :P ، وهذا ما لا تستطيع فعله على الحاسوب.

وإلى الحل أقول:

السلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مرحبا

اتوقع

وأقول أتوقع لأني بالبرمجة مو هداك الزود

بس الواحد بحاول

خصوصا إنو البرنامج لصف تالت ابتدائي .. يعني عيب مانعرف نحلو!!

:)

المهم

بداية رح يكون عنا بالفورم

2 textbox

الأول اليوزر بدخل فيه الرقم المطلوب جدول الضرب تبعو

والتاني لعرض النتيجة

وبكون الكود بعد تعريف المتغيرات

Dim a, i As Integer



a = textbox1.text

for i = 0 to 10

textbox2.text = a*i

بس مو متأكدة هل لازم نحط بنهاية الكود

i++

?

ولا هون تلاقي الـ

i

بتزيد قيمتها

إن شاء الله يكون الجواب صح

!

وشكرا عالدروس

حلوة

سلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

فعلاً أختي حلك صحيح،ولكن هناك أخطاء بسيطة، مثل أننا نريد عرض النتائج على النافذة وليس على TextBox ، على كل حال هذا ليس خطا جوهرياً.

بالنسبة لجملة For نسيت إنهاءها بـNext ،

وبالنسبة لـ ++i ، في الفيجوال بيسك تتم الزيادة تلقائياً دون الحاجة إلى ++i ، ولكن يمكن تحديد مقدار الزيادة هكذا:

For i = 0 To 10 Step مقدار الزيادة
---
---
Next

والآن نعود إلى الحل يا أبطال الابتدائي :) ، وهو:

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 هو عدد وليس نصاً (حروفاً)، وسيتعامل معه على هذا الأساس.

شركة الابتدائي المحدودة

السلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

حساب محيط ومساحة دائرة:

هذا آخر تمرين في الرمحلة الاولى، قبل أن ننتقل إلى المرحلة الثانية، التي ستجدون فيها تمارين أجمل وبمستوى أعلى بإذن الله.

أما الآن فما زلنا مع الابتدائي :) ، فلدينا تمارين من الصف الخامس نريد أن نحلها.

لن أشرح كثيراً، فقط نريد أن يضع المستخدم رقماً ما في الـTextBox ، وهذا الرقم سيكون طول نصف قطر الدائرة التي نريد حساب مساحتها، ثم يضغط الزر لتظهر له رسالة تقول:

المساحة هي (المساحة)

ورسالة أخرى:

المحيط هو (المحيط)

حيث (المساحة) و (المحيط) هي النتائج التي توصلنا إليها، فمثلاً إذا أدخل المستخدم 5، فإن النتيجة ستكون:

المساحة هي 78.5

المحيط هو 31.4

احسبها :)

علماً أن قانون المساحة هو:

Q = R^2 * Pi

حيث Q نقصد بها المساحة، و R^2 تعني نصف القطر قوة 2، أما Pi فهو ثابت يساوي 3.14.

هل تذكرت هذا القانون؟

أما قانون المحيط فهو:

A = 2 * R * Pi

تمام؟

ابدأ الحل، ولا تنس استعمال Val التي تحدثنا عنها في التمرين الماضي، لكي يتعامل البرنامج مع الرقم الموجود في الـTextBox على أنه رقم ، وليس على أنه حرف.

هيا ابدأ، هذا تمرين صف خامس :)

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

إليكم الحل البسيط:

Dim R As Integer
Dim Area As Double, Perimeter As Double
Const Pi As Double = 3.14
R = Val(Text1.Text)
Area = R ^ 2 * Pi
Perimeter = 2 * R * Pi
MsgBox "المساحة " & Area
MsgBox "المحيط " & Perimeter

هل رأيت شيئاً صعباً ؟ حاول فهم الكود بنفسك.

وضعنا القيمة الموجودة في Text1 في المتغير R ، ثم أجرينا معادلات المساحة والمحيط ووضعنا الناتج في المتغيرين ، Area و Perimeter ، ويمكنك اختيار أي اسم تريده للمتغير، ثم وضعنا الناتج في رسالة للمستخدم.

لاحظ أننا عبرنا عن R قوة 2، بالشكل التالي (R^2) إذاً فالشكل ^ يرمز إلى القوة.

شغل عقلك ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيراً على هذا المجهود 

طريقتك رائعة في الشرح.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيراً على مرورك

والآن إليكم المرحلة الثانية، هذه المرحلة تحتاج إلى ذكاء وتشغيل مخ، لكن لا تخف، ستعجبك بإذن الله

كتدريب عملي قبل هذه المرحلة، إليك التالي:

Private Sub Command1_Click()
For i = 0 To 9
For j = 0 To 9
Print "Hello"
Next
Next
End Sub

حاول ملاحظة ما الذي سيحدث وتفسيره، وتدرب جيداً على جمل For وعلى المصفوفات ، لأنها مهمة في هذه المرحلة.

Level_2.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

رائع جدا

لي عوده لتدقيق الان مستعجل (: مشكور اخويه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

خوارزمية تحويل الشهور إلى سنوات:

سنبدأ المرحلة الثانية بخوارزمية لذيذة، قبل أن ننتقل إلى الخوارزميات الأخرى.

جاءت فكرة هذه الخوارزمية من سؤال وضعه أحد الإخوة في المنتدى.

المطلوب الآن:

لديك نافذة، عليها TextBox يدخل المستخدم فيها رقماً ما، وهو عدد الشهور، مثلاً 30، ثم يضغط CommandButton فتظهر له رسالة MessageBox تخبره:

2 years and 6 months

يعني أن 30 شهراً يساوي سنتين وستة أشهر ، تمام؟

والآن لنبدأ العمل:

هناك معاملان هامان في البرنامج الذي سنصنعه، الأول:

المعامل :

لا انتظر ، هذا ليس معامل القسمة العادية، بل هو معامل القسمة من دون باقي، يعني لو كتبنا:

MsgBox 15/4

هنا استخدمنا معامل القسمة العادي، وستكون النتيجة هي 3.75 ، أما لو كتبنا:

MsgBox 15\4

فستكون النتيجة هي 3، أي أنه أخذ العدد صحيحاً ودون باقي تمام؟ سنستعمل هذا المعامل.

أما المعامل الثاني فهو:

المعامل Mod

وقد تحدثنا عليه من قبل، فهو يقوم بحساب باقي قسمة عدد على عدد، يعني مثلاً:

MsgBox 14 Mod 4

سيعطيك 2، أي أن باقي قسمة 14 على 4 هو 2، تذكرنا؟؟؟

ستقوم بإذن الله بتوظيف هاتين الدالتين لصنع هذا البرنامج، ماذا ؟؟ تريد مساعدة أكثر...... آسف :stop:

شغل مخك.

وسيكون ممتازاً أيضاً إذا اكتشفت الحل بطريقة أخرى، كلما عليك هو أن تمسك قلماً وورقة وتحاول، وأنا بانتظارك.

السلام عليكم ورحمة الله

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

قد تظنون أني تركتكم بدون مساعدة، لكن السبب الأساسي لإقلال الشرح هو أن تفكر أنت به بنفسك، والآن إليك الكود:

انسخ الكود
  1.  
  2. Dim intTotalMonths As Integer, intMonths As Integer, intYears As Integer
  3. intTotalMonths = Val(Text1.Text)
  4. intYears = intTotalMonths 12
  5. intMonths = intTotalMonths Mod 12
  6. MsgBox intYears & " years and " & intMonths & " months"
  7.  
  8.  
  9.  

إذاً هنا جعلنا العدد الإجمالي للشهور هو العدد الموجود في الـTextBox ، ثم كانت السنوات هي عدد الشهور الإجمالي مقسوماً على 12 دون باقي، والشهور هو باقي قسمة عدد الشهور الإجمالي على 12، فمثلاً لو كان عندنا 47 شهراً، قسمناها على 12 فكانت النتيجة 3 والباقي 11، إذاً ستكون النتيجة :

3 Years and 11 months

فكّر بها.

إلى اللقاء في الخوارزمية القادمة

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الخوارزمية الثانية في مرحلتنا هذه، هي خوارزمية ترتيب الأعداد، وهي تعتمد على إحدى طرق الترتيب المشهورة، وقد تحدثت عنها في مشاركتي الثانية، يمكنكم الاطلاع عليها.

في حال وجود شيء معقد فيها، أرجو إخباري لأوضحها أكثر

السلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

خوارزمية جدول الضرب (باستخدام العودية):

قد تقولون إننا قد قمنا بعمل جدول الضرب من قبل، أقول نعم... لكننا اليوم سنأخذ لمحة عن العودية ونحاول تطبيقها.

ما هي العودية؟

إذا كنت قد تدربت جيداً على الإجراءات فيمكنني عندها أن أخبرك أن العودية هي إجراء يقوم باستدعاء نفسه... ما معنى هذا ؟ :hmm:

فلنفنرض جدلاً أنك قلت لشخص ما أنا أعرفك، فقال أنا أعرف أنك تعرفني، فقلت أنا أعرف أنك تعرف أني أعرفك، فقال أنا أعرف أنك تعرف أني أعرف أنك تعرفني........ إلخ

حسناً هذا كان مثالاً تقريبياً فاشلاً :nose_pick:

ولكن الآن، فلنرجع إلى البرمجة، تخيل أنك عرفت الإجراء التالي:

انسخ الكود
  1.  
  2. Private Sub MySub()
  3. MySub()
  4. End Sub
  5.  
  6.  

ما الذي سيحدث عندما نستدعي الإجراء، في حدث النقر على زر ما مثلاً:

انسخ الكود
  1.  
  2. 'DO NOT TRY THIS AT HOME'
  3. Private Sub Command1_Click()
  4. MySub
  5. End Sub
  6.  
  7.  

ما الذي سيحدث؟ سنستدعي الإجراء المسمى MySub والذي سيقوم باستدعاء نفسه مرة أخرى، ثم يقوم باستدعاء نفسه مرة أخرى، وهكذا إلى ما لا نهاية :eek:

والآن لنتطور في استعماله، انظر المثال التالي:

انسخ الكود
  1.  
  2. Dim A As Integer
  3.  
  4. Private Sub MySub()
  5.  
  6. Print "Hello"
  7. If A = 5 Then
  8. Exit Sub
  9. Else
  10. A = A + 1
  11. MySub
  12. End If
  13.  
  14. End Sub
  15.  
  16. Private Sub Command1_Click()
  17.  
  18. A = 1
  19. MySub
  20.  
  21. End Sub
  22.  
  23.  

ما الذي سيحدث عند النقر على الزر ، سيتم طباعة كلمة Hello على النافذة خمس مرات، فكر بها :calc:

ولنتطور أكثر الآن، ما رأيك بهذه؟:

انسخ الكود
  1.  
  2. Private Function MyFunction(X As Integer, Y As Integer) As Integer
  3.  
  4. Static Num As Integer
  5. If Num = X * Y Then
  6. Exit Function
  7. Else
  8. Num = X + Num
  9. MyFunction X, Y
  10. End If
  11. MyFunction = Num
  12.  
  13. End Function
  14.  
  15. Private Sub Command1_Click()
  16.  
  17. MsgBox MyFunction(5, 3)
  18.  
  19. End Sub
  20.  
  21.  
  22.  

جربها وحاول استنتاج ما الذي حدث وتفسيره، وتمرن قليلاً على العودية بنفسك :)

أما الآن...... فالذي نريد فعله هو طباعة جدول الضرب لعدد ما على النافذة، باستخدام العودية، فلو وضع المستخدم في TextBox الرقم 5 مثلاً، ثم ضغط على زر التنفيذ، سيطبع التالي على الشاشة:

0

5

10

15

20

25

30

35

40

45

50

تمام؟ هيا حاول بنفسك، إذا فعلتها أنا، فسوف تفعلها أنت بإذن الله.

بالتوفيق.

السلام عليكم ورحمة الله

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله

ها هو الحل:

انسخ الكود
  1.  
  2. Private Sub Multiply(intNum As Integer)
  3. Static A As Integer
  4. If A <= 10 Then
  5. Print A * intNum
  6. A = A + 1
  7. Call Multiply(intNum)
  8. Else
  9. A = 0
  10. End If
  11. End Sub
  12.  

ما الذي حدث هنا؟

عرفنا المتغير A ثم قمنا بالنظر، هل وصلت قيمته إلى 10؟ فإن لم تصل فإنه ينفذ عملية الضرب ويضرب العدد الذي يختاره المستخدم بالعدد A ، ثم يزيد A ويعود ليكرر الإجراء مرة أخرى، وهكذا، إلى أن يصل A إلى 10 فإنه عندها يجعل قيمة A هي الصفر (ربما يريد المستخدم القيام بالعملية مرة أخرى) ، ثم يخرج من الإجراء.

والآن لنستدع الإجراء:

انسخ الكود
  1.  
  2. Private Sub Command1_Click()
  3. Cls
  4. Multiply Val(Text1.Text)
  5. End Sub
  6.  

هنا استدعيناه ومررنا له القيمة الموجودة في الـTextBox وهذا بعد أن قمنا بمسح ما كتب على النافذة بالأمر Cls . تمام؟؟؟؟؟ :clapping:

وإلى اللقاء مع الخوارزمية القادمة.

السلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أسأل الله أن يجعلك مباركاً أينما كنت

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

شكراً لكم إخواني على المرور

خوارزمية رسم مستطيل بحرف ما:

خوارزميتنا اليوم ستكون جميلة بإذن الله، ما الذي سنفعله فيها؟

كما ترى في المشروع، عند وضع رقم ما 7 مثلاً في الـTextBox الأول، ورقم ثاني في الـTextBox الثاني ، ووضع حرف @ مثلاً في الـTextBox الثالث، ثم تنفذ ستجد أنه تم رسم مستطيل قريب من هذا في الـTextBox الرابع:

@@@@@@@

@@@@@@@

@@@@@@@

@@@@@@@

@@@@@@@

@@@@@@@

@@@@@@@

فكيف سنقوم بهذا؟

أولاً لا بد من ضبط خاصية MultiLine لمربع النص الرابع إلى True لكي يقبل النص كتابة أكثر من سطر فيه، ثم نقوم بالذي نريده

فلنفرض أن عندنا ثلاثة متغيرات، هي الطول، العرض، والحرف الذي نريد أن نكتبه

علينا أن نستخدم حلقتي For متداخلتين لنحقق ما نريده، الذي سنفعله هو أننا سنبدأ بكتابة الحروف على السطر الأول، مرة، مرتين، ثلاثة ... إلى أن نصل إلى العرض الذي حددناه وليكن 7 مثلاً، عندما يصبح عدد الجروف التي كتبناها في هذا السطر هو 7، عندها يمكننا أن ننتقل إلى السطر الثاني، لتنتقل إلى السطر الثاني يمكنك أن تكتب:

Text4.Text = Text4.Text + vbNewLine

أو :

Text4.Text = Text4.Text + vbCrLf

أو :

Text4.Text = Text4.Text + Chr(13)

كل الطرق السابقة ستجعلك تبدأ بالكتابة في سطر جديد، طبعاً لا تنس ضبط خاصية MultiLine إلى True وإلا :angry:

والآن عندما ننتقل إلى السطر التالي نقوم بتكرار العملية ذاتها، ثم ننتقل إلى السطر التالي ونكررها حتى نصل إلى الرقم الذي حددناه في الطول، تمام؟

بقي عليك التفكير ومحاولة الفهم، قد يكون هناك طريقة أخرى لذلك لا تحصر دماغك في طريقة واحدة، ما دام دماغك قادراً على إبداع مئات الطرق B)

تم تعديل بواسطه Abboodd
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .