![]() |
![]() |
|
شبكة المشاغب ا برامج ا دليل المواقع ا مجلة المنتدى ا إستضافة مواقع ا دروس مفيدة ا المكتبة الالكترونية ا مركز تحميل المشاغب |
|
|
#1 |
|
عضو مميز
![]() ![]() ![]() ![]() ![]() تاريخ التسجيل: Dec 2008
الدولة: (1/2)^(-1)
المشاركات: 1,555
|
![]() بسم الله والصلاة والسلام على رسول الله أقدم لكم اليوم أول درس لي في عالم البرمجة .... الله يستر ![]() الدرس خفيف ولطيف ، ويحتاج شوية تركيز في البداية مراجعة رياضية بسيطة الأعداد الأولية هي التي لا تقبل القسمة إلا على الواحد وعلى نفسهامثلا رقم 7 هو رقم أولي لتحقيقه الشروط وأيضا رقم 17 وأيضا رقم 71 بل حتى أن هذا الرقم 139439 هو رقم أولي لإنك لن تستطيع أن تقسمه على أي رقم حقيقي إلا على نفسه وعلى الواحد طيب البرنامج إلي حنعمله حيطلع كل الأرقام الأولية ضمن مدى معين أي مثلا إلى المليون أو المئة ألف مثلا الأرقام الأولية ضمن مدى العشرة هي : 2 ، 3 ، 7 ![]() طيب خلصنا من موضوع الأرقام الأولية بالنسبة لموضوع تحليل الأعداد ، فهو ببساطة إيجاد العوامل الأولية لعدد ما مثلا العوامل الأولية للـ 10 هي 5 و 2 لإنه 5 * 2 = 10 طيب ما هي برأيك العوامل الأولية للـ 12 إن قلت 4 و 3 فالجواب خاطئ ![]() مع إنه 4 * 3 = 12 والشبب إنه 4 ليست عدد أولي ![]() طيب ما هي طريقة تحليل عدد ما !!! الطريقة هي تقسيمه على الأعداد الأولية إن إمكن بشكل تصاعدي مثلا 12 نبدأ بتقسيمها على 2 فيكون الناتج 6 ونقسم هذه الأخيرة على 2 فيكون الناتج 3 ونقسم الأخير على 3 فيكون الناتج 1 إذا عوامل الـ 12 هي : 2 و 2 و 3 وتختصر 2² × 3 صورة توضيحية ![]() طيب وهذي صورة أخرى لتحليل العدد 64 = اثنين قوة (أس) ستة ![]() إلي حاب يجرب البرنامج من الآن قبل ما نعمله http://www.mediafire.com/?jzjl5yxzmny صورة البرنامج والأدوات ![]() القسم الأيمن لتحليل الأعداد عن طريق وضع عدد والضغط على Analayze والأيسر لـرؤية الأعداد الأولية عند الضغط على Show All والجزئية السفلية is it prime ! هي لوضع رقم ما ورؤية إذا ما كان أوليا أم لا ![]() نبدأ على بركة الله أضف الأزرار الثلاثة لمسرح العمل Analyze و Show All و is it prime ! ---- أضف 3 textbox واحد إلى جانب كل زر كما في الصورة مع ملاحظة تعديل خاصية Enabled مربع النص الذي بجانب Show All إلى الوضع False ---- أضف الـ List box يسارا و ListView يمينا مع ملاحظة تفعيل خاصية Gridlines وأيضا إضافة العمودين كما في الصورة من خاصية Columns ![]() الآن بقي أسهل حاجة في الدرس الأكواد ![]() سنبدأ بالقسم الأيسر وهو ،، عرض جميع الأعداد الأولية في زر show all اكتب هذا الكود كود PHP:
![]() كود PHP:
For i As Integer = 2 To 50000وهنا حلقة أخرى وهذه الحلقة تمثل مجموعة المقسوم عليه وهي نصف قيمة الحلقة الأولى توضيح بسيط لكي نعرف هل الرقم 17 هو أولي أو غير أولي نبدأ بقسمته على 2 ثم 3 ثم 4 ثم 5 إلخ... وإذا صادفنا أن 17 قبل القسمة على أحدها فهو إذا غير أولي طيب متى نتوقف عن القسمة ![]() بسيطة إذا وصلنا لنصف العدد طيب لماذا !! ![]() لإنه لو كان هناك رقم بعد نصف العدد تتوقع أن يكون قاسم للرقم X فهذا الأمر مستحيل لإنه لو ضربنا هذا الرقم بأصغر عدد أولي بعد الواحد وهو الاثنين فسينتج لدينا رقم أكبر من الرقم X مثال الرقم 20 نصفه 10 لو فرضنا جدلا أن الرقم 11 من قواسمه فإن 11*2 = 22 النتيجة أكبر من الرقم 20 ![]() طيب نرجع للكود كود PHP:
مثال 5/2 = 2 والباقي 1 طبعا الآلة الحاسبة 5/2 = 2.5 ونحن لا نريد هذا النوع من القسمة نريد أن تكونن كل الأعداد صحيحة (غير عشرية) ونريد أن نعلم الباقي طيب ما الحل لإنه A/i سيعطينا رقم ما قد يكون عشري ولن نستطيع أن نأخذ الباقي الحل هو باستخدام الدالة mod والتي تعطينا الباقي مباشرة حيث كود:
5 mod 2 = 1 كود PHP:
طيب ما رأيك ما الخطوة الباقية ،،، ما الفرق عندما نقسم العدد الأولي 13 على الأعداد الصحيحة وعندما نقسم العدد الأولي 15 على الأعداد الصحيحة لاحظ معي 13 /2 13 /3 13 /4 13 /5 13 /6 13 /7 لاحظ أنه لا يقبل أي عملية قسمة من الموجودة أعلاه والتي هي حتى الرقم 7 والذي يمثل نصف الثلاثة عشر تقريبا طيب لاحظ العملية على الرقم 15 15 /2 15 /3 لاحظ أن 15/3 مقبولة وليس فيها باقي مالذس استنتجناه إن كان الرقم أول فلن يقبل القسمة على الأعداد الصحيحة من الـ2 وحتى نصفه إذا نضعه عندنا في القائمة وننتقل للرقم الذي بعده لاختباره وإن كان غير أولي سيقبل على أحد الأعداد ولا داعي لإكمال عمليات القسمة مثلا 15 /4 إلخ.. وإنما ننتقل لاختبار الرقم 16 ولن نضعه في القائمة كود PHP:
ويرى إن كانت صفر (أي أن الرقم a غير أولي) فيكتفي ولا يقوم بتقسيمه على باقي الأعداد أم السطر الثاني فيفحص قيمة i (المقسوم عليه) ويرى إن كانت قيمته أمب من نصف قيمة المقسوم (a) فإن كان كذلك فيقوم بإدخاله في الـListBox1 أما المقصود بـ GoTo f فهي الذهب للسطر f والذي فيه الأمر next الذي يامر بتجريب مقسوم جديد طبعا من ناحية تجريب الأرقام من 2 إلى 100000 واحدا واحد وتقسيم كل رقم منها على الأعداد الصحيحة فهذا كله وظيفة الجملتين المركبتين for to التي تراها في أول الكود أما كود:
txtCount.Text = ListBox1.Items.Count ![]() حيث تظهر عدد الأعداد الأولية خلال النطاق المحدد وتضعه في صندوق التكست الذي عطلنا خاصية Enabled له في بداية الموضوع ![]() طيب خلصنا من مسألة عرض الأعداد الأولية لكن ما رأيك مثلا بالرقم 39659 هل هو أولي ؟؟ أو ما رأيك بهذا 966053581 ![]() ![]() طبعا إن استخدمت قلم وورقة فقابلني عام 2100 لتخبرني النتيجة أما هنا فالموضوع بسيط في البداية المستخدم يضع الرقم في مربع النص نقوم باستخدام دالة isnumeric للتأكد من أنه وضع رقم ولم يضع اسمه مثلا ![]() إذا كان بالفعل وضع رقما ما نبدأ بقسمة هذا الرقم على نصف عوامله زائدا واحد مثلا الرقم 39659 نصف عوامله 19829.5 وبالتقريب 19830 يثم نزيد واحد 19831 وسبب زيادة الواحد هو أننا سنقوم بالتحقق من أن المقسوم عليه أكبر من نصف العدد ولو لم نزده لكان الوصول لهذه القيمة مستحيلة حيث سيبقى المقسوم عليه نفسه قيمة نصف الرقم ![]() ![]() هذا الكود للزر is it prime مع تعليقات بالشرح كود PHP:
![]() الآن ألذ قطعة في الموضوع تحليل الأعداد ![]() باسم الله عندنا مربع نص وزر Analyze التي تعني تحليل وعندنا listview قائمة عرض وضعنا فيها عمودين مثلا شرح لتحليل الرقم 12 ![]() في البداية وضعنا الـ 12 على اليسار وجربنا القواسم فوجدنا أن 2 هو الأصغر فقمنا بتقسيم 12 على 2 فكان الناتج 6 فأخذنا الـ 6 وجربنا القواسم مرة أخرى فوجدنا أن 2 هو الأصغر فقمنا بتقسيم 6 على 2 فكان الناتج 3 ثم أخذنا الـ 3 وبدأن بتجريب القواسم ![]() فكان القاسم الوحيد لها هو الـ 3 فقسمناها عليه وسلامتكم عندها استنتجنا أن عوامل الـ 12 هي 2 *2 *3 طيب أتوقع الكل فهم الأسطر إلي تحت الصورة السابقة ،، وفقط المطلوب تحويلها لكود في البداية سأضع الكود وبالتعليقات ثم أسفله سأضرحه بالتفصيل كود PHP:
![]() كود:
If IsNumeric(TextBox2.Text) Then كود:
ListView1.Items.Clear() كود:
Dim myNumber As Integer = Val(TextBox2.Text) ' نعرف متغير وإسناد قيمة النص له
If myNumber = 2 Then ListView1.Items.Add("this's allready a prime number") : Exit Sub ' اسنثناء الرقم 2
Dim moding As Integer ' تعريف متغير لباقي القسمة
Dim remainder As Integer ' متغير لباقي القسمة الثانية سنشرحه لاحقا
Dim Count As Integer = 0 ' متغير سنستخدمه للعد ولتحرير عناصرا القائمة بالتسلسل
Dim mod2 As Integer ' متغير لباقي القسمة الثالثة وما بعدها
واستثناء الرقم 2 وساشرح لاحقا لماذا نستثنيه نبدأ الآن بالـقسمة الأولى كود:
If moding = 0 Then مثلا كنا نحلل الرقم 6 فوجد له قاسما هو الاثنين إذا الباقي من6 /2 = 0 عندها نضيف الـ 6 في القائمة في العمود الأيسر بهذا الأمر كود:
ListView1.Items.Add(myNumber) الآن نضيف القاسم (2) في اليمين بهذا الكود كود:
ListView1.Items(Count).SubItems.Add(ly) حيث أن أول سطر هو 0 والثاني هو 1 والثالث هو 2 وسنزيد قيمة السطر كل مرة أما ly فهو القاسم وقيمته طبعا 2 حتى الآن وصلنا للنتيجة هذه ![]() لنكمل الآن الخطوة القادمة هي الوصول للخانة القادمة ألا وهي 3 ![]() وطبعا واضح أنه بقسمة 6 على 2 نحصل على 3 إذا فلنقسم 6 على 2 ولنحصل على 3 ثم نضعها في سطر جديدسنضع ناتج القسمة في متغير اسمه remainder كود:
remainder = Val(ListView1.Items.Item(Count).Text) / Val(ListView1.Items.Item(Count).SubItems(1).Text) كود:
ListView1.Items.Add(remainder) لا تنسى أن الترقيم يبدأ من 0 كود:
Count += 1 بقي جزئية بسيطة في القسمة الأولى إن لم نجد قاسما للعدد فهو عدد أولي (مثل أن يطلب المستخدم تحليل الرقم 7) ونظهر رسالة بذلك ونخرج من الإجراء كود:
بعيدا عن ما بين النجوم أعلاه نرجع لمسألتنا حيث نحن وجدنا قاسما للعدد 6 فهو بالطبع ليس أولي بعد زيادة المتغير count GoTo 2 ' الذهاب للقسمة الثانية الآن نحن في المرحلة هذه ![]() والخطوة القادمة هي تحليل الرقم 3 لنصل لهذه النتيجة ![]() إذا ننتقل للقسمة الثانية كود:
If remainder = 2 Then ListView1.Items(Count).SubItems.Add(remainder) : Exit Sub نبدأ بتجريب القسمة على الأرقام وتفحص الباقي كود:
mod2 = remainder Mod xx1 وهذه هي حالتنا إذ أن 3 عدد أولي كود:
If xx1 > remainder / 2 Then ListView1.Items(Count).SubItems.Add(remainder) : Count += 1 : Exit Sub **** بهذا نكون خرجنا بالنتيجة النهائية لتحليل العدد 6 ![]() ![]() حيث = 3 * 2 ![]() ***** لكن انتبه لآخر ما أجريناه على الرقم 3 لاحظ أننا استنتجنا أنه عدد أول لكن ماذا لو لم يكن كذلك مثل أن يكون 4 وهذا مثال لتحليل الرقم 8 ![]() في هذه الحالة سيكمل البرنامج للجملة القادمة If mod2 = 0 Then وهي إن كان باقي القسمة للـ remainder يساوي 0 وهو هنا حاصل حيث أن الباقي من 4 /2 هو 0 عندها لو وجدنا له قاسما (الاثنين هنا)نضيفه يمينا ،ويجب أن نكمل باقي القسمة لاحقا كود:
ListView1.Items(Count).SubItems.Add(xx1) ![]() نكمل التحليل ذكرنا سابقا أن الباقي من 4 /2 هو 0 والناتج بالطبع هو 4 /2 = 2 نأخذ الـ 2 ونضعها يسارا في سطر جديد وقد سبق وأن فعلنا هذا عند تحليل الرقم 6 حيث عندما وجدنا العامل 2 قسمنا الـ 6 على 2 ووضعنا الـ 3 في سطر جديد وهنا سنقسن الـ 4 على الـ 2 ونضع الناتج (2) في سطر جديد كود PHP:
كود:
Count += 1 Exit Sub لكي لا تتكرر الحلقة مرة أخرى لكن مهلا ألا تلاحظ أن هذا ما توصلنا له ![]() بينما الذي نريده هو ![]() لأن 8 = 2*2*2* إذا البرنامج ناقص ![]() ![]() ![]() لكن الحل بسيط جدا بإذن الله ببساطة أزل كلمة Exit Sub من المقطع الأخير وانسخ مكانها المطع نفسه مع ملاحظة تغيير كل xx1 إلى xx2 كود PHP:
الآن في المقطع xx2 امسح Exit sub وانسخ مكانه نفس المقطع مع تغيير xx2 إلى xx3 استمر إلى الرقم 11 سينشأ عندك كود مركب متشابك ![]() ![]() مثل هذا الذي في الصورة http://img38.imageshack.us/img38/582...10110356pm.png وستتمكن من تحليل الأعداد الكبيرة جدا لكن لا تنسى مثلي أن تضع Exit Sub في آخر بلوك بهذا نكون خلصنا هذا الدرس الطويل جدا و وذاك الكود المتشابك الذي سببلي صداع شديد جدا جدا جدا ![]() ![]() رابط ملف الـ exe http://www.mediafire.com/?jzjl5yxzmny رابط المشروع كاملا http://www.mediafire.com/?dmw2wzxotln رابط لتحميل الكود بملف html http://www.mediafire.com/?mjdtnn4go15 الآن أصابعي تعبت ومخي أخد إجازة بقي جزئية بسيطة وإلي هي تكوني متغير نصي من العمود الأيسر مثلا هنا ![]() 12 = 2*2*3 نحتاج كود يستطيع فهم 2*2 على أنها 2^2 فيكون التحليل 2^2 *3 وهذا مهم جدا حيث بدلا من أن يكون تحليل الـ 96 2*2*2*2*2*2*3 ![]() يكون 2^5 * 3 فنأخذ هذه العبارة ونضعها في متغير نصي ونرميها في تكست بوك وسلامتك حاليا ما في بمخي أي فكرة منتظر إبداعاتك ![]() لا تنسوا النقد والآراء ،، فهذا أول درس في حياتي ![]() وأيضا لا تنسونا ووالدينا من صالح الدعاء محبكم Loersian تم رفع الصور على سيرفر المُنتدى بواسطة المُراقب الامير-ابراهيم ![]() التعديل الأخير تم بواسطة MobiTel ; 30-10-2011 الساعة 09:45 PM |
|
|
|
|
|
#2 |
|
عضو فعال
![]() ![]() ![]() ![]() ![]() تاريخ التسجيل: Aug 2004
الدولة: مصــــ الاسكندريه ـــــــر
المشاركات: 4,908
|
الله ينور عليك يا غالى
يسعدنى ان اكون اول الردود الموجوده فى هذا الموضوع الرائع والمفيد حقا واحلى خمس نجووووم لى احلى موضوع من احلى عضو ( وكفايه حلاوه كده علشان النمل ما يجيش علينا ) ![]() ![]() وبارك الله فيك يا غالى وننتظر جديدك |
|
|
|
|
|
#3 |
|
عضو مجتهد
![]() ![]() ![]() تاريخ التسجيل: Mar 2010
المشاركات: 285
|
شرح رائع بما تعنيه الكلمة
لو كل مبرمج يشرح مثل شرحك كان الكل مبرمجين ![]() سلمت يداك وزادك الله من علمه |
|
|
|
|
|
#4 |
|
مخالف
![]() ![]() ![]() ![]() ![]() تاريخ التسجيل: Sep 2009
المشاركات: 4,765
|
ماشاء الله تبارك الله ، درس وافي متكامل، جزيت كل خير ...
5/5 |
|
|
|
|
|
#5 |
|
عضو ذهبي
![]() ![]() ![]() ![]() ![]() تاريخ التسجيل: May 2006
الدولة: الاردن
المشاركات: 16,522
|
تستحق 5 نجمات بجداره
احسنت صنعا و جزيت خيرا |
|
|
|
|
|
#6 |
|
عضو جديد
تاريخ التسجيل: May 2010
المشاركات: 22
|
شرح ممتاز بالتوفيق
|
|
|
|
|
|
#7 | |||
|
عضو مميز
![]() ![]() ![]() ![]() ![]() تاريخ التسجيل: Dec 2008
الدولة: (1/2)^(-1)
المشاركات: 1,555
|
اقتباس:
الله يسعدك يا غالي ده أكبر شرف لي وجودك في موضوعي وبالنسبة للحلاوة ما أنا جبتهاش من بعيد، مادام أساتذتي من أمثالكم هم أصل الحلاوة ![]() اقتباس:
ربنا يسلمك منور بمرورك اقتباس:
أهلا وسهلا مشرفتنا الغالية نورتي الموضوع يسلمو على المرور نورت الموضوع شكرا لمرورك العطر عزيزي التعديل الأخير تم بواسطة Loers ; 21-05-2010 الساعة 02:10 PM |
|||
|
|
|
![]() |
| مواقع النشر (المفضلة) |
| الكلمات الدلالية (Tags) |
| مرفق , المشروع , الأعياد , الأولية , شرح , vb.net , vbnet , [شرح] , وتحميل |
| أدوات الموضوع | |
|
|
|
|
|||||||||||||||||||||||||||