الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

السلسلة الذهبية في المواضيع العلمية [كيف نحل مشاكلنا بأنفسنا]

بدأه رغيد الطيب في 14 أغسطس 2007 · 16 رد · 5,611 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

-----------------------------------------------

الاسلوب الامثل في حل المسائل البرمجية :

-----------------------------------------------

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

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

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

واما الطريقة الثانية فهي البحث في ملفات المساعدة عن امكانيات اللغة التي تستخدمها ( لغة البرمجة طبعاً وليست اللغة الطبيعية ) فأنت لا تعلم كم ستستفيد من هذا البحث فقد تبحث عن موضوع وتجد امثلة و دوال لم تكن تعلم بوجودها اصلاً بل انني اتذكر احياناً كثيرة كنت فيها ابحث عن موضوع معين وينتهي بي المطاف وقد نسيت الموضوع الذي كنت ابحث عنه لما اجده من الفوائد العضيمة والمواضيع الشيقة اثناء بحثي خاصة اذا كنت تتجول في مكتبة الـ MSDN ....

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

وبعد ان تعرف حل هذة المشكلة حاول نقلها لمن تظن انهم سيستفيدون منها ....

-----------------------

مثال يستحق التأمل :

-----------------------

دعنا الان نرى كيف يمكن التعامل مع هذة المشكلة البسيطة .. لنفرض انك كنت تقوم بتصميم برنامج لتعليم الصغار الرياضيات وتريد ان تختبر الارقام الذي يدخلها الطفل ثم تساعده في معرفة العدد الفردي منها من العدد الزوجي .. !!

للقيام بمثل هذا البرنامج يجب عليك انت اولاً معرفة الرقم الفردي من الزوجي بطريقة برمجية فالنفرض انك قمت بقراءة الرقم الذي ادخله المستخدم في متغير عددي اسميته N بالطريقة التالية :

	Dim N As Integer

	N = InputBox("ادخل اي عدد صحيح")

والان كيف يمكن معرفة ان الرقم المخزن في المتغير N هو عدد فردي ام زوجي ؟؟؟

طبعاً اذا كنت ممن لهم باع طويل بالبرمجة اظنني اراك الان تبتسم من سذاجة السؤال - ولكن انتظر قليلاً دعنا ندرس الامر اولاً فبعد قليل سوف اطلب منك حل المسئلة باكثر من ثلاث طرق مختلفة - ..... و اما اذا كنت مبتدئاً او ممن اعتاد عدم بذل مجهود في البحث عن إجابة قد تجد ان هذا امر محير فعلاً حتى وان طلبت منك ايجاد اي حل وليس ثلاثة حلول مختلفة ...

حاول الان معي تتخيل الطرق التي يمكن ان تجيب بها على هذا السؤال البسيط قبل ان نبدء في خطوات الحال التالية ...

سوف ندرس فيما يلي الامر كما ينبغي على الفرد ان يناقشه مع نفسه في كل مرة يواجه فيها سؤال مشابه يحتاج الى شيء من التفكير ...

-----------------------

الحل الأول للمسئلة :

-----------------------

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

	0 = 12 Mod 3
	0 = 6 Mod 2
	1 = 7 Mod 2
	3 = 15 Mod 4
	2 = 9 Mod 7

فالسطر الاول يدل على ان باقي قسمة 12 على 3 هو صفر لانه ينتج من القسمة 4 والباقي صفر.

واما السطر الثاني فهو ايضاً صفر لان ناتج قسمة 6 على اثنين هو ثلاثة والباقي صفر .

والثالث كان الناتج فيه هو واحد لان ناتج قسمة 7 على اثنين هو 3 والباقي واحد .

وكذلك الحال في السطر الرابع فان ناتج قسمة 15 على 4 هو 3 والباقي 3 ..

واما السطر الاخير فان ناتج قسمة 9 على 7 هو واحد والباقي 2 ...

والان من السطرين الثاني والثالث نرى بوضوح ان قسمة عدد زوجي ( 6 في السطر الثاني) على 2 يبقى صفراً ... بينما ناتج قسمة عدد فردي ( السبعة في السطر الثالث ) على اثنين فان الباقي هو واحد ...

وبالتالي فاننا يمكن ان نستغل المعامل Mod في البرنامج كالتالي :

	Dim N As Integer

	N = InputBox("ادخل اي عدد صحيح")

	If N Mod 2 = 0 Then
	   MsgBox "عدد زوجي"
	Else
	   MsgBox "عدد فردي"
	End If

هذا الحل كان من المفترض ان يستخدمه الذين يعرفون المعامل Mod ....

------------------------------

الحال الثاني لهذة المسئلة :

------------------------------

لنفرض الان انك لم تكن على دراية بوجود هذا المعامل في الفيجوال بيسك فليس من الممكن ان تستخدمه مع عدم درايتك به اصلاً .... اذاً انت الان ملزم بالبحث عن بديل فليس من المعقول ايضاً ان تعيقك مثل هذة المشكلة في مثل هذا البرنامج الموجه للصغار !!

والان دعنا نفكر عن بديل طبعاً سيبقى مجال تفكيرنا رياضياً حيث ان الموضوع يتعلق بالرياضيات ( فليس من المعقول ان نبحث عن حل بين دوال الرسم مثلاً مثل Line و Circle ) ... لهذا سوف نستفيد من معاملي القسمة الذين يقدمهما لنا الفيجوال بيسك فكلنا يعلم معامل القسمة العادية وهو / .. فمثلاً :

	4 = 12 / 3
	3 = 6 / 2
	3.5 = 7 / 2
	3.75 = 15 / 4
	2.25 = 9 / 4

الكل يعلم النواتج السابقة لانها عبارة عن قسمة عادية ... ولكننا سوف نستخدم الى جوار هذا المعامل معامل آخر يهمنا في حل هذة المسئلة وهو المعامل \ وهو معامل عكس معامل القسمة العادية / ... ويستخدم هذا المعامل في ايجاد ناتج القسمة بدون باقي اي اننا اذا قسمنا خمسة على 2 فان الناتج هنا سيكون 2 وليس كما اعتدنا اثنين ونصف و ذلك لان هذا المعامل يهمل الباقي ويكتفي بالناتج دون باقي ... ولمزيد من الامثلة انظر الى السطور التالية :

	4 = 12 \ 3
	3 = 6 \ 2
	3 = 7 \ 2
	2 = 9 \ 4

نرى بوضوح ان ناتج السطر الاول هو اربعة لان ناتج قسمة 12 على 3 هو 4 بدون باقي ...

وفي السطر الثاني ايضاً فأن الناتج من قسمة 6 على 2 هو 3 والباقي صفر ..

واما السطر الثالث ففيه 7 قسمة 2 هو 3.5 ولكن لان القسمة هنا هي بدون باقي فان الناتج هو 3 فقط ...

وكذلك السطر الرابع فأن ناتج قسمة 9 على 4 هو 2.25 ولكن الناتج هو بدون باقي اي انه 2 فقط ...

لهذا فننا نخرج باستنتاج ان القسمة باستخدام المعامل "/" هي قسمة عادية ..

و اما القسمة باستخدام المعامل "\" فهي قسمة بدون باقي ...

والان كيف يمكن ان نستغل هذين المعاملين في برنامجنا القديم ... الاجابة ستكون باعتماد ناتج القسمة من المعاملين على العدد الذي نريده فمثلاً اذا قمسنا عدد زوجي على 2باستخدم القسمة العادية فان الناتج سكون بدون باقي لأن العدد الزوجي يقبل القسمة على اثنين بدون باقي واما اذا قسمنا العدد الزوجي نفسه على اثنين ولكن باستخدام القسمة بدون باقي فسوف ينتج ايضاً نفس الناتج من القسمة العادية لانه لايوجد باقي اصلاً خذ مثلاً :

6 / 2 = 3		' قسمة بباقي
6 \ 2 = 3		' قسمة بدون باقي

لاحظ ان ناتج قسمة 6 على اثنين هو ثلاثة في الحالتين ... والان دعنا نجرب مع عدد فردي فمثلاً اذا قسمنا السبعة على 2 قسمة عادية فان الناتج هو 3.5 بالطبع ... ولكن اذا قسمنا نفس العدد - السبعة - على اثنين ولكن بدون باقي اي باستخدام المعامل "\" فان الناتج في هذة الحالة هو 3 فقط بدون باقي .. انظر المثال :

7 / 2 = 3.5 	' قسمة بباقي
7 \ 2 = 3		' قسمة بدون باقي

من الواضح الان ان ناتج قسمة عدد زوجي على اثنين هو نفس الناتج في حال استخدمنا القسمة بباقي او القسمة بدون باقي ... واما اذا قسمنا عدد فردي على 2 فان الناتج يختلف فيما اذا كانت القسمة بباقي او بدون باقي ...

لهذا كله يمكننا الان استخدام هذة الميزة لجعل برنامجنا يبدو كالتالي :

	Dim N As Integer

	N = InputBox("ادخل اي عدد صحيح")

	If (N \ 2) = (N / 2) Then
		MsgBox "عدد زوجي"
	Else
	   MsgBox "عدد فردي"
	End If

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

الحل السابق كان من المفترض ان يستخدموه من كانت لهم معرفة سابقة بمعاملات القسمة العادية والقسمة بدون باقي ..

----------------------------

الحل الثالث ( حل ثنائي ) :

----------------------------

لقد كان الحلان السابقان جميلان جدا و يفيان بالغرض تماماً ولكن ماذا اذا لم تكن تعرف بوجود المعاملات السابقة ( الـ Mod والقسمة بدون باقي \ ) في هذة الحالة لن تكون إجابتك مشابهه لاحدى الطريقتين السابقتين وسيكون من المفترض عليك ان تجيب على السؤال المطروح هنا وهو كيفية التفريق بين الاعداد الزوجية والفردية برمجياً ؟ ...

نعرف جميعاً ان الكمبيوتر الذي نجلس الان امامه يعمل على نظام واحد وهو النظام الثنائي ( صفر و واحد ) ... وهو امر نسلم به جميعاً وإن كنا نواجه صعوبة في فهم كيف تكون الصور التي نراها في الشاشة والاصوات التي نسمعها من السماعات هي جميعها ناتجة عن هذا النظام الثنائي ( 0010100100100) شيء غريب بالفعل .. ولكن مع تعمقك اكثر واكثر في الامور البرمجية خاصة المتعلقة منها بالبايت(Byte) والبت (Bit) سوف تبدء تشعر بتأقلم مع تقبل فكرة ان كل شيء يعمل بالفعل بهذا النظام العجيب !!

سوف نحاول هنا ان نستغل هذا النظام في الحل الذي نبحث عنه مستغليتن هنا المعاملات المنطقية وبالذات المعامل AND ... ولكن قبل هذا ينبغي ان نعرف ان لكل رقم نستخدمه في النظام العشري مايقابله في النظام الثنائي وفيما يلي جدول ببعض الارقام وما يقابلها في النظام الثنائي :

   0000 = 0
   0001 = 1
   0010 = 2
   0011 = 3
   0100 = 4
   0101 = 5
   0110 = 6
   0111 = 7
   1000 = 8
   1001 = 9
   1010 = 10
   1011 = 11
   1100 = 12

في الجدول السابق الارقام الثنائية المقابلة للارقام العشرية الـ 12 الاولى وطبعاً انا لا احفظ ما يقابل كل رقم من الارقام العشرية في النظام الثنائي و لكن توجد طرق للتحويل من والى النظامين وهي طرق سهلة ولا يوجد مجال لذكرها هنا ...

مايهمنا الان هو المعامل And وكيف يتعامل مع الارقام وهذا المعامل المنطقي يدخل ضمن عدة معاملات اخرى مثل OR و XOR و EQV وغيرها ... والجدول المنطقي المرتبط بالمعامل And هو كالتالي :

   0 And 0 = 0
   0 And 1 = 0
   1 And 0 = 0
   1 And 1 = 1

و نرى بوضوح ان الناتج دائماً هو صفر إلا في حالة واحدة هي ان يكون الرقمين الذي تتم مقارنتهما بـ And هما واحد ... وهذة المقارنة تتم على مستوى البت اي على المستوى الثنائي فمثلاً اذا قارنت الرقمين التالين بـ And :

12 And 6 = 4

الناتج هو 4 والسبب في ذلك يعود للنظام الثنائي ولكي نفهم لماذا كان الناتج هو 4 يجب اولاً ان نحظر الارقام 6 و 12 بالنظام الثنائي ...

فالـ 12 يمثل الرقم 1100 و اما الستة فرقمه هو 0110 وبالتالي فان مقارنتهما تتم بالشكل التالي :

1100 And 0110 = 0100
وذلك كما يلي
1100 = 12
0110 = 6
------------
0100 = 4

لاحظ اننا نقارن كل بت من بتات الرقم 12 مع البت الذي يماثله(تحته مباشرة) في الرقم 6 اعتماداً على المعامل And فاذا كان هناك 1 وتحته مباشرة 1 آخر فان الناتج هو 1 وغير ذلك فان الناتج هو 0 ويظهر بوضوح ان الـ 12 و 6 يشتركان في ان البت الثالث (من اليمين) هو واحد لهذا فأن الناتج سوف يكون اصفار ماعدا البت الثالث فهو واحد اي ان الرقم الناتج هو 0100 وبنظرة سريعة يمكن ان تعرف ان هذا الرقم الثنائي يمثل الرقم 4 في النظام العشري ...

والان لننتقل الى ما يهمنا في هذا كله لنفرض اننا قارنا اي رقم مع الرقم 1 والذي يمثل 0001 في النظام الثنائي فان الناتج في هذه الحالة إما صفر او واحد وهذا يعتمد على البت الاول في الرقم مثلاً اذا قارنا الرقم 7 مع الواحد :

0111 = 7
0001 = 1
---------- And
0001 = 1

ونرى بوضوح ان ناتج المقارنه كان واحد لان السبعة يحمل الرقم واحد في البت الاول له من اليمين ....

اما اذا قارنا الرقم 6 مع الواحد في الناتج في هذة الحالة هو صفر لان البت الاول من اليمين للسته هو صفر 0110 وذلك كما يلي :

0110 = 6
0001 = 1
---------- And
0000 = 0

وبهذا فان الناتج يكون صفر اذا كان الرقم يبدء من اليمن بصفر ويكون واحد اذا كان الرقم يبدء بواحد ... و بنظرة سريعة الى الجدول السابق سوف ترى بوضوح ان جميع الاعداد الزوجية تبدء بصفر والاعداد الفردية تبدء بواحد لهذا يمكن بسهولة استغلاله في برنامجنا بالشكل التالي :

	Dim N As Integer

	N = InputBox("ادخل اي عدد صحيح")

	If (N And 1) = 0 Then
		MsgBox "عدد زوجي"
	Else
	   MsgBox "عدد فردي"
	End If

لاحظ اننا استخدمنا معرفتنا السابقة بان مقارنة العدد الزوجي مع الرقم واحد ينتج عنها صفر ومقارنة العدد الفردي مع الواحد ينتج عنه واحد ...

هذا الحل لن يستخدمه إلا من كانت له دراية بالنظام الثنائي والمعاملات المنطقية ...

----------------

الحل النهائي :

----------------

لنفرض الان اني لم تكن لدي الخبرة الكافية في المعاملات السابقة جميعاً و ليس لدي غير الاشياء الاساسية في اللغة اي مثل المقارنات بـ IF و اوامر الدوران For و Until و While ... فهل يعني هذا اني لن اتمكن مع حل البرنامج وسنتهي بي المطاف بالاقلاع عن تصميم البرنامج بشكل كامل ؟ ....

الاجابة هنا هي بالطبع ... لا !!!

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

وهذة الطريقة ببساطة هي ماذا لو عملنا دوران بسيط نقوم فيه في كل مرة بتنقيص الرقم الذي معنا بمقدار اثنين بحيث يتوقف الدوران عندما يصبح الرقم اقل من اثنين ... فان الناتج في هذة الحال سيكون دائماً اما واحد(في حالة الاعداد الفردية) او صفر ( في حالة الاعداد الزوجية ) ...

خذ مثلاً الرقم 5 اذا انقصنا منه 2 سوف يبقى 3 ولانه ليس اصغر من اثنين نقوم بالتنقيص مرة اخرى فيصبح لدينا الان 1 وهو رقم اصغر من اثنين الان نقارن اذا كان صفر فهو زوجي وان كان واحد كما في هذه الحالة فهو فردي ...

واذا قارنا برقم زوجي لنقل الـ 6 مثلاً فانه في المرة الاولى ننقص 2 فيبقى 4 ثم ننقص 2 فيبقى 2 ثم ننقص 2 فيبقى صفراً وهنا نتوقف عن التنقيص لان الرقم المتبقي اصغر من اثنين ( بقي صفراً ) وهذا يعني ان الرقم زوجي ...

يمكن ترجمة ماسبق بدوران بسيط ينقص 2 في كل مرة ويتوقف عندما يكون الرقم اصغر من 2 ثم نقارن بالشكل التالي :

	Dim N As Integer

	N = InputBox("ادخل اي عدد صحيح")

	Do Until N < 2
	   N = N - 2
	Loop

	If N = 0 Then
		MsgBox "عدد زوجي"
	Else
	   MsgBox "عدد فردي"
	End If

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

--------------------------------------------------

كلمة اخيرة لتوضيح المقصد من الموضوع ككل :

--------------------------------------------------

عشنا سوياً فيما سبق دقائق جميلة في محاولة حل مسئلة بسيطة وسعينا فيها الى التوضيح بان كل واحد منا قادر على ايجاد حلول وابتكارها من العدم وينبغي فقط عدم احتقار قدرات عقلولنا البشرية الذي منحنا اياها الله تعالى ... وعدم اعتمادك على الغير بقدر الامكان فقليل جداً ممن سيقرئ الموضوع سيجد انه لم يكن يعرف اياً من الحلول السابقة وآخرون سوف تجدهم يعرفون معظم المعاملات التي ذكرناها ولكن لم تخطر لهم الفكرة في استخدامها واما الباقين فسوف يشعرون بان كل ما سبق كان مضيعة للوقت وان هذة جميعها طرق بسيطة ويمكن ان تكون في رؤسهم الكثير من الطرق الافضل من هذة ... و طبعاً سيكون هذا بسبب انهم لم يركنوا عقولهم بسرعة في معظم المشاكل التي تواجههم في حياتهم البرمجية ...

لهذا كله نخرج انا اونت عزيزي القارئ بنتيجة مهمة وهي محاولة البحث عن الحل بكل الطرق الممكنة ثم اللجوء بعد ذلك للمساعدة كما انك يمكن ان تزيد من استفادتك اذا سعيت للايجاد الحل ثم قمت بطرح الطريقة التي توصلت اليها في المنتدى مع السؤال عن وجود طرق افضل فأن هذا سيكون افضل بكثير من السؤال المباشر عن الحل ... وسوف يتحول سؤالك المطروح في المنتدى .... من الصيغة :

هل توجد طريقة لعمل كذا و كذا ؟

الى الصيغة :

هل توجد طريقة افضل من هذة التي توصلت اليها لعمل كذا وكذا ؟

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

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

3

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#2

جزاك الله خير اخي الحبيب رغيد الطيب وبارك الله هذه المشكلة تقريبا أكثر المبتدئين واقعين فيها وهي أنه عندما يجدون عقبة ولو صغيرة في برامجهم يقومون بالسؤال عنها ولذلك كما قلت أنت فهذا ربما يعود المبرمج على عدم الاعتماد على نفسه حتى ليس فقط الاخطاء البرمجية بل ربما حتى بعض الادوات الموجودة فتخيل معي أخي الحبيب عندما يجد احد المستخدمين أداة جيدة ويريد ان يستخدمها في برامجه فإذا كان المبرمج ممن اعتاد على السؤال في المنتديات او سؤال الاخرين عن اي شيء فلن يستطيع استخدامها حتى يجد كل ما يريده عن الاداة سواء في السؤال في المنتديات او بسؤال الاخرين

هل تعرف لماذا أخي الكريم أخي المبرمج الحديث

هذا بسبب أنك اعتدت على ذلك نعم لقد تعودت نفسك على سؤال الاخرين

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

حاول مرة ومرتين وثلاث ولا تيأس فالبيت لم يبني مرة واحدة بل تم بناؤه بالتدريج ولايوجد من يتعلم في يوم وليلة او في اسبوع بل البعض اخذ عدة سنوات او ربما اكثر حتى عرف ذلك

ومتأسف على الاطالة

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

أنا الرجل الضرب الذي تعرفونه***خشاش كرأس الحية المتوقد

لوكنت وغلاً في الرجال لضرني**** حسن جرائتي ومقتدي

منتديات طريق الهداية

#3

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

اخي الكريم رغيد الطيب والله اني استفدت اليوم الكثير من قراة هذا الموضوع لني كنت من النوع الذي اذا حصل على مشكلة

يسئل الاخرين من غير تفكير ... وان شاء الله جاري تغيير طريقتي في حل المشاكل

والله هذا الموضوع ممتاز ... بارك الله فيك .... وزاد من امثالك

وايضاً شكراً لك ابو عزام على ما اضفته

if You.needhelp = true then

msgbox ("Never Ever Ask dam Question  Before Searching in google")

Else 

msgbox ("You are Doing Good")

End if
#4

جزاك الله خيرا مجهود تشكؤر علية والى المزيد

#5

جزاكم الله الف خير على هذه السلسلة القيمة, وجز الله خير كل من ساهم فيها.

ولدي مداخلة بسيطة : من وجهة نظري الشخصية البسيطة: إذا هممت بتعلم امرٍ ما, فإنني في بداية الامر أبحث عنه من اي مصدر و اقرء ما كُتب عنه

فإن هذا يحفظ لي كثيراً من الوقت, ويختصر علي امورٌ كثيرة , بدل أن اضيع وقتي في تجربته دون جدوى, بلا ادنى شك ان هذا المنطق لا يقبل في

جميع الحالات, ويقبل في حالات اخرى, على سبيل المثال, إنه ليس من المنطق من يريد أن يستخدم بيئة الـ NET. أن يقوم بفتحها و التخبط فيها

وهو حديثُ عهدٍ بها, لذلك في مثل هذه الحالة أن يقرء المقالات و المطويات و الكتب مع تطبيق الامثلة الواردة فيما يقرءهُ , فهذا اظنه أكثر استغلالية

للوقت من اي شيء أخر. واما الحالات المعكوسة فمثل ما ذكره أخي أبو عزام كأداة يفترض ان تجربها حتى عندما تقرء عنها تكون مسبقاً قد تعرفت على خصائصها و سلوكياتها, فيكون الامر ايسر و اسهل عليك. و جزاكم اللهُ خير الجزاء, السلام عليكم.

في المثال يتضح المقال

#6

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

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

وجهة نظرك منطقية واكثر من رائعة بكثير و تفيد بالفعل و ينتهجهل كل ذي خبرة ... و لكن ربما حديثي عن المبتدء و الكيفية التي يتخبط بها اتعرف اتذكر ذلك حقيقة حيث انه كنت اصاب بخيبة امل و افقد الحماس للقيام بالامر بمجرد قراءة الكثير عنه خاصة عندما اجد انه اصعب مما توقعت و اجد التعليقات من ذوي الخبرة فهذا يقول افعل كذا و كذا و هذا يقول كذا وكذا و كثيرا من كلامهم لا افهمه او انفذه دون وعي كيف و لماذا .. و عندما بدأت اغيير من طريقتي و ابدء رويدا رويدا اجد انني في كثير من الاحيان بل كي اكون صادقا معظم الاحيان لا اتمكن من تنفيذ ما برأسي و لكن اثناء تجربتي يزداد حماسي و يخيب املي في جزء و انجح في جزء ويصبح الامء ممتع للغاية ( خاصة واني ابرمج لنفسي ) اي للمتعة فقط وليس من المطلوب حتما اكمال البرنامج.

هل تعرف لدي مجلد يحتوي على بعض الافكار التي لم اتمكن من تنفيذها منذ عام 1999 !!! ... اتصدق هذا

كلما اجد وقتا اعود لبعضها و اجد ان حله في غاية السهولة بعد ان كان عقبة من العقبات التي حرمتني النوم لأيام

احببت وجهة نظرك حقا اخي

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

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#7
اقتباس
هل تعرف لدي مجلد يحتوي على بعض الافكار التي لم اتمكن من تنفيذها منذ عام 1999 !!! ... اتصدق هذا

:lol: :lol: :lol:

اما انا في الفيجوال بيسك (لغة البرمجة) فلقد بديت اتعلمها حوالي 4 اشهر مضت ...

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

ايضأً اكرر شكري للجميع

if You.needhelp = true then

msgbox ("Never Ever Ask dam Question  Before Searching in google")

Else 

msgbox ("You are Doing Good")

End if
#8
yms12 كتب:
جزاك الله خيرا مجهود تشكؤر علية والى المزيد
مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#9

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

شكرا اخي رغيد الطيب على ما اسلفت لكني والحق يقال لابد لي من جليس وان لم اجد مبتغاي فشئ مؤكد ان اسال صاحب علم.

وفقك الله.

اخوك فؤاد

نحن اليمانيون يا طه تطير بنا الى روابي العلا أرواح أنصارِ

اذا تذكرت عمارا ومبدأه فأفخر بنا اننا أحفاد عمارِ

بحثت عن سر السعادة جـــــــــاهدا فوجدت ذاك السر في تقواك

فليرضى عني الناس أو فليسخطوا انا لم أعد أأبى لغير رضـــاك

اللهم ارحم المسلمين والمسلمات المؤمنين والمؤمنات الأحياء منهم والأموات

#10

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

و إن كنت أذهب إلى ما قال الشهاب المضيء أن القراءة و البحث هي الخطوة الأولى و المحاولة هي المرحلة الثانية و الطلب آخر هذه المراحل

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

و شكراً لك مرة أخرى

#11

شكرا على الموضوع الاكثر من رائع و لكني و بصراحة احاول ان اعالج المشاكل بنفسي و لو كانت بدرجة تعقيد complexity algorithm قليلة

المهم عندي تسليم الـ Task , و بعد ان اضع يدي و رجلي في مياه باردة على قول المثل

اذا كان معي وقت فراغ احيانا و ليس دائماَ ابدأ بتطوير الكود و جعل درجة الـ complexity algorithm اكثر تعقيدا

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

و بعدها اسال المبرمجين اصدقائي و ان عجزت اسال هذا المنتدى الرائع

لانني و بصراحة لا اعلم كيف أن المبرمجين الآخرون يستفيدون من MSDN كثيرا :blink:

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#12

جزاكم الله خيرا على هذا الموضوع القيم

الحقيقة أننا نحاول أن نحل مشاكلنا بأنفسنا وكثير من الحلول أو أكثر المشاكل التي تواجهني أحلها بنفسي ولا أسأل إلا بعد الكثير من المحاولات

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

شكرا لكم

#13

بسم الله السميع العليم

سرتني كثيرا الاجابات التي وضعها الشباب فهي تعكس انه لايزال فينا من يهتم بالتفكير المنطقي وابتكار الحلول البرمجية

لكي تعم الفائدة سأضع الحلول البرمجية التي كانت في ذهني عند وضع السؤال (مع العلم بان بعض الشباب هنا قد ذكرها ) ... واسجل هنا اعجابي بفكرة الاخ محمد بالتدوير الرقم 31 مرة كوني لم افكر بهذا مسبقا.

على العموم يمكنك ان تفكر في الكثير من الحلول البرمجية لحل هذه المسئلة ... فمثلا

-----------------

حلول ثنائية :

-----------------

يمكن حقيقة الوصول الى اكثر من طريقة وحل اذا فكرنا بالمسئلة من وجهة نظر ثنائية Binary يعني صفر و واحد ... والمعاملات المستخدمة هنا كثيرة مثلا فقد استخدمنا المعامل And في الحل :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N And 1) = 0 Then
            MsgBox("عدد زوجي")
        Else
            MsgBox("عدد فردي")
        End If

وفي نفس الوقت يمكن استخدام المعامل ORبدلا من AND بطريقة اخرى فنحن نعرف ان المقارنة بإستخدام الـ OR تعيد القيمة 1 في حالة كون احد اطراف المقارنة يساوي 1 ويمكن بالتالي استغلال الامر ... بحيث نقارن العدد المدخل مع الواحد وفي حال كون العدد فردي فإن الناتج سيكون مساوي للعدد المدخل (لماذا ؟ ..... لأن البت الاول من العدد الفردي هو 1 وبالتالي مقارنته مع الواحد سيكون 1 وبهذا لن يتغيير الرقم الفردي) .... كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N Or 1) = N Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

اما في حالة العدد الزوجي فأن البت الاول هو صفر ومقارنته مع الواحد ستولد عدد جديد يزيد عن العدد الاصلي بواحد نتيجة لتحول البت الاول في العدد الزوجي بعد المقارنة الى 1 ... بكلام آخر :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N Or 1) = (N + 1) Then
            MsgBox("عدد زوجي")
        Else
            MsgBox("عدد فردي")
        End If

لاحظ ان الكودين السابقين عبارة عن طريقة واحدة وهي استخدام الـ OR للمقارنة مع الواحد ارفقته مرتين لتوضيح الفكرة فقط

حل آخر يمكن التفكير فيه وهو المعامل XOR ... وهو من اجمل المعاملات وله خواص محببة تجعله صديق للمهتمين بتشفير البيانات والمهم لنا هنا انه يعيد القيمة 1 في حال اختلاف الاعداد المقارنة وصفر في حال تساويها فمقارنة الواحد بالصفر او الصفر بالواحد عن طريق الـ XOR تعيد القيمة واحد .... بينما مقارنة الواحد بالواحد و الصفر بالصفر فتعيد القيمة صفر .... من هذه المعلومات البسيطة اظنك قد فطنت الى الحل البسيط الذي سنستخلصه هنا ..... اذا فكرت ستجد ان مقارنة اي عدد بالواحد عن طريق الـ XOR ستجعل الناتج يكون اقل من العدد الفردي المدخل وفي حال كون العدد المدخل هو عدد زوجي فان الناتج سيكون اكبر بواحد (لأن الصفر الاولى ستصبح 1) والعكس للعدد الفردي فان البت الاولى ستصبح صفرا ... نستنتج من ذلك با اختصار :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N Xor 1) < N Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

لا اعرف اذا كان ينبغي الاكتفاء بهذه الحلول الثنائية ام نضيف لها ... ودعنا ناخذ حل واحد اضافي ... هو باستخدام التدوير ... فتدوير الارقام يكون اما الى الشمال عن طريق >> او الى اليمين عن طريق << ... وبالتالي ستجد اننا اذا دورنا الرقم الزوجي مرة واحدة الى اليمين فانه سوف يفقد البت الاولى من اليمين فاذا عدنا ودورناه مره اخرى ولكن الى الشمال فاننا سنستعيد الصفر الضائع مرة اخرى وسيبقى الرقم الزوجي كما هو .... غير ان تدوير الرقم الفردي الى اليمين مرة ثم الى الشمال مباشرة سيجعله يفقد البت الاول ويتحول من 1 الى صفر .... وهذه خاصية يمكن استغلالها كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N >> 1 << 1 < N)Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

قد يبدو الشرط :

N>>1<<1<N

للبعض كأحجية او كلام غير مفهوم لكنه بساطة يقوم بتدوير الرقم N مرة الى اليمين ثم مرة الى الشمال ثم يقارن ما اذا كان العدد اصغر من N فهو فردي .... يمكن للتسهيل اعادة كتابة الحل كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N >> 1 << 1) = N Then
            MsgBox("عدد زوجي")
        Else
            MsgBox("عدد فردي")
        End If

ما اريد قوله هنا انه يمكننا استنتاج الكثير من الحلول البرمجية ثنائيا و سنكتفي بهذه الحلول كامثلة.

--------------------

الحلول الرياضية :

--------------------

اذا مزجنا الارقام والعمليات الحسابية البسيطة جدا مع بعض دوال التحويلات العددية كالتحويل الى Integer باستخدام Int او غيرها سنحصل على الكثير من الاجابات نكتفي بثلاث هنا .... خذ مثلا ... اذا قسمنا العدد المدخل N على اثنين واهملنا الجزء العشري عن طريق Int ثم ضربنا الناتج بـ 2 فإننا سنحصل على العدد N مرة اخرى اذا كان زوجيا اما اذا كان فرديا فان الناتج بالتأكيد سيكون اقل من N والسبب ببساطة يكمن في كونه بعد التخلص من الجزء العشري (الذي هو غير موجود اصلا في حالة العدد الزوجي) فبضربه مجددا بـ 2 يعيده لحالته الطبيعية اما العدد الفردي فيكون قد خسر جزءا منه بسبب Int فلا يعود كما كان.

لنتجاهل هلوستي السابقة ونرى الحل فهو كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If Int(N / 2) * 2 < N Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

حل آخر .... اذا اللقيت نظرة على المقالة الاصلية فستجد ان احد الحلول كان بمقارنة القسمة بباقي مع القسمة بدون باقي و القسمة بدون باقي يمكن بسهولة تمثيلها بدون استخدام المعامل العكسي \ وانما باستخدام القسمة العادية مع حذف الجزء العشري بإستخدام الدالة Int كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If Int(N / 2)  <> N / 2 Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

اذا كنت تتفق معي فان اكثر الحلول روعة هي اكثرها بساطة .. وهنا يكمن جمال الرياضيات .... فكر معي بالارقام السالبة؟

الرقم السالب اذا ضرب في نفسه عدد مرات فردية فان الناتج سالب واذا ضرب في نفسة عدد مرات زوجية فان الناتج موجب ... خذ مثلا الرقم سالب واحد (للتبسيط) اذا ضربناه في نفسه مرتين (زوجي):

-1 * -1 = 1    ' موجب

بينما اذا ضربناه ثلاث مرات - اي عدد فردي- فان الناتج سالب :

-1 * -1 * -1 = -1

وبالتالي يمكن كتابة كود يضرب العدد سالب واحد في نفسه بحسب الرقم المدخل .... هكذا مثلا :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")
        Dim R As Integer = -1

        For I As Integer = 1 To N - 1
            R *= -1
        Next

        If R = -1 Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

اذا كنت تتفق معي فالكود السابق هو كود عبيط للتوضيح فقط والحل الحقيقي هو باستخدام الدالة Pow لرفع العدد سالب واحد الى الاس N (وبالتالي ضربه في نفسه)

بكلام آخر يمكنك استخدام علامة الرفع الى الأس في الفيجوال بيسك وهي ^ كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If ((-1) ^ N) = -1 Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

وكما هو الحال في الحلول الثنائية يمكن ان نشتق الكثير من الحلول المماثلة .. ونكتفي بهذا هنا .

----------------------------

حلول نصية Strings :

----------------------------

اقصد بالحلول النصية هي الحلول التي تعتمد على النصوص Strings في حل المسئلة بحيث تقوم بالتحويل الى نص ثم من خلاله وبطريقة معينة نستنتج كون العدد فرديا ام زوجيا .

خذ مثلا ... ان قسمة اي عدد على اثنين ينتج عنه اما عدد صحيح مثل 4 (ينتج 2) و12 ينتج 6 وهكذا ... بينما قسمة الاعداد الفردية ينتج عنه رقم صحيح بالاضافة الى الكسر (نُص) او (نقطة متبوعة بخمسة ) .... كالتالي 3 ينتج عنه 1.5 و 7 ينتج عنه 3.5 و 131 ينتج عنه 65.5 وهكذا .... فإذا حولنا الناتج من القسمة الى نص ثم قمنا فحص كونه ينتهي بـ "5." عن طريق EndsWith فسوف نصل الى كون العدد فردي .... كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If (N / 2).ToString.EndsWith(".5") Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

لاحظ ايضا كحل آخر انه مهما كان العدد وبأي نظام عد (عشري او ثنائي او ......) فانه سينتهي بارقام معينة اذا كان فرديا وبارقام اخرى اذا كان زوجيا ... خذ مثلا مهم كان الرقم فانه في النظام الثنائي سينتهي بواحد اذا كان فرديا فاذا كانت لدينا مثلا الدالة التالية :

    Function ToBinary(ByVal Num As Integer) As String
        Dim Bin As New System.Text.StringBuilder

        While Num > 0
            Bin.Append(Num Mod 2).ToString()
            Num \= 2
        End While

        Return StrReverse(Bin.ToString())
    End Function

فالدالة ToBinary ستقوم بتحويل الرقم الذي تدخلها الى نص يمثل مقابله بنظام العد الثنائي .. مثلا 5 سوف يصبح "101" و 22 سوف يصبح "10110" ........... واذا لاحظت فان الخمسة هو فردي لهذا انتهى بواحد و الـ 22 هو رقم زوجي لهذا انتهى بصفر.... وعليه فالاجابة كالتالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If ToBinary(N).EndsWith("1") Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

هذا بالنسبة لتحويله الى نظام العد الثنائي وكذلك الحال اذا اردنا فحصه بالنظام العشري مباشرة سنجد انه مهم كان الرقم فلابد ان ينهي باحد هذه الارقام 1 أو 3 أو 5 أو 7 أو 9 .... فمثلا لو قلت لك هل الرقم 8646729464527 هو قرم فردي ؟ ... سيكون الناتج نعم لانه انتهى بسبعة بغض النظر عن بقية الارقام وطوله وعرضه ... و بالتالي ... نسنتنتج التالي :

        Dim N As Integer = InputBox("ادخل أي عدد صحيح:")

        If "13579".IndexOf(N.ToString.Last) > -1 Then
            MsgBox("عدد فردي")
        Else
            MsgBox("عدد زوجي")
        End If

ومن هذا يمكن استنتاج الكثير من الحلول لجميع انظمة العد ...

على العموم كان هذا لنرى ان المسئلة بسيطة جدا على رغم من انها قد تصدمك في البداية اذا قلنا اجب باكثر من عشرة حلول مثلا على هذا السؤال ... وبالفعل ما قمنا به هنا سوية اكثر من العشرة بكثير ولازال هناك المزيد بالطبع.

ملاحظة كثير من الاجابات قد طرحها الشباب ولكن هذه كانت الاجابة قبل طرح السؤال وهي للفائدة

تحياتي

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

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#14

شكرا لك على الموضوع الرائع

وجزاك الله خيرا

#15

بارك الله فيك اخ رغد موضوع جميل

#16

جميلة قوى طريقتك بجد

ربنا يبارك فيك

#17

شكرااااااااااااا الله يعطيك العافيه وسلامه

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…