تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الفصل (7):- اوامر التكرار والدوران ( شرح مفصل )
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

سيكون درسنا اليوم ان شاء الله عن جمل التكرار والدوران وسيكون عملنا الكلي على الكونسول
ولفتح مشروع كونسول جديد اتبع الصورة التالية :_



لقد قمنا بإيضاح شيء بسيط حول الكونسول في الفصل الاول
هنا ...

والان سوف نتعلم سوياً كيفية استخدام جمل التكرار والدوران داخل هذا الكونسول

ملاحظة هامة :_ المصفوفات غالباً مايتم استخدامها مع جمل التكرار والدوران
لذلك سوف نتعلم ذلك الان


==================================================

اولاً :- ماهي جمل التكرار :-

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

وسينتج لنا كود كبير جدأً وبدون اي فائدة منه :- مثل

كود :
ComboBox1.Items.Add(1)
ComboBox1.Items.Add(2)
ComboBox1.Items.Add(3)
.
.
.
ComboBox1.Items.Add(99)
ComboBox1.Items.Add(100)


الان سنجرب ان نضيف اليه الارقام ولكن باستخدام جملة التكرار for مثلاً :-

كود :
For i = 1 to 100
ComboBox1.Items.Add(i)
next


بهذه الكود هنا سوف يقوم بعمل اضافة للاعداد من 1 إلى 100 ولا حظ ان كلمة next تاتي مع حلقة for دائماً

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

أقسام جمل التكرار:
1-جمل التكرار باستخدام For..Next
2-جمل التكرار باستخدام Do...Loop

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

*******************************************

اولاً :- جملة التكرار for --- next

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

فمثلاً كما في المثال السابق حدد انا نريد الارقام من 1 إلى 100 وبهذا صار التكرار معلوماً لدينا

وتكون الصيغة العامة لجملة التكرار for .... next بالشكل التالي :-

كود :
For i = (StartValue) to (EndValue)
Condition
Next i


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

مثلاً هذا الكود لاضافة مصفوفة جديدة ومن خلال جملة التكرار اريدها ان تضع الاسماء التي بداخل المصفوفة
وتكتب في الكونسول

كود :
Dim vb4rab() As String = {"lo2i", "ali", "mohammed", "samer", "some one"}

For i = 0 To 4

Console.WriteLine("the name is  " & vb4rabrab(i))

Next
Console.ReadKey()


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


قمنا بتعريف مصفوفة جديد وادخلنا فيها القيم التالية -

كود :
{"lo2i", "ali", "mohammed", "samer", "some one"}


استخدمنا الكلمة المحجوزة for


قمنا بتنفيذ تكرار جديد واعطينا قيمة له هي ان يبدأ بالعد من الصفر وينتهي ب اربعة
اي 0 1 2 3 4 اي خمس مرات

الصفر رقم منفصل -
الواحد رقم منفصل -
الاثنين رقم منفصل -
الثلاثة رقم منفصل -
الاربعة رقم منفصل -



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

كود :
Console.WriteLine("the name is  " & vb4arab(i))


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

ملاحظة هامة جداً :-

سيقوم تكرار العد على العداد الذي نقوم بتعريفه في جملة التكرار
فمثلاً قيمة
i
لاول مرة سيكون 0
وبعد وصوله للكلمة المحجوزة
next
سوف يعود لبداية التكرار
بعد ان تصبح قيمته 2
وهكذا حتى تصل إلى خمسة
اذا وصل العداد إلى الرقم
5 خرج من جملة التكرار
وادى الاكواد التالية ...

ولا تنسوا انه يمكننا الحصول على القيمة التي بداخل اي مصفوفة من خلال الكود التالي

كود :
Textbox1.text = vb4arab(1)


وسيظهر لنا في التيكست اسم
lo2i

طيب لماذا في جملة التكرار لم نقم بكتابة عدد داخل فهرس المصفوفة

كما تلاحظون كتبنا داخل فهرس المصفوفة العداد
i
الذي عرفناه على انه جملة تكرار تبدأ من الصفر وتنهي عند الاربعة


*********************************************

نعم المسألة بسيطة اكثر مما تتصور
فكما قلنا ان العداد سوف يبدأ من القيمة صفر وهي اول قيمة في المصفوقة ايضاً
لان المصفوفة كمان قيمها تبدأ من العدد ر قم صفر
وعند وصوله اول مرة إلى كلمة
next
سوف يذهب إلى ال for
وتكون قيمته 1
وسيعرض لنا القيمة الاولى في المصفوفة التي تأتي بعد الصفر
وهكذا

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

يتبع
اللَّهُمَّ أَنْتَ رَبِّي ، لا إِلَه إِلاَّ أَنْتَ خَلَقْتَني وأَنَا عَبْدُكَ ، وأَنَا على عهْدِكَ ووعْدِكَ ما اسْتَطَعْتُ ، أَعُوذُ بِكَ مِنْ شَرِّ ما صنَعْتُ ، أَبوءُ لَكَ بِنِعْمتِكَ علَيَ ، وأَبُوءُ بذَنْبي فَاغْفِرْ لي ، فَإِنَّهُ لا يغْفِرُ الذُّنُوبِ إِلاَّ أَنْتَ .
الرد }}}
#2
ثانياً :- جملة التكرار Do...Loop
القسم الأول:توضيح الحلقة Do...Loop

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

الفرق بين ال for next و Do...Loop



الفرق كما ذكرنا في التعريف ان جملة ال for next قمنا بتحديد مقدار الاضافة ومقدار العداد له
اما جملة التكرار
do while

فهي غير محددة وينتهي تكرارها بالاعتماد على الشرط التي اعطيته بها

مثلاً في هذا الكود هنا

كود :
For x = o to 2
Msgbox x
Next


ستظهر لنا ثلاث رسايل فيها التالي:-

الاولى رقم 1
الثانية رقم 2
الثالثة رقم 3
واما الكود التالي لجملة التكرار ال do ..Loop

كود :
Dim x As Integer
x = 0
Do While Not x = 4
MsgBox(x)
x = x + 1
Loop


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


سيقوم الكود التالي بطباعة المسج الرسالة msgbox 3 مرات على التوالي :

وبهذا //؟

اعتقد ان الفرق اصبح واضح الان
.................................................. .....................................


القسم الثاني:جزأي الحلقة Do...Loop

الحلقة Do While...Loop
الحلقة Do Until...Loop

أولا:الحلقة Do While...Loop
باختصار تقوم هذه الحلقة بتنفيذ التعليمات المحتواة طالما تحقق الشرط وعند فشل الشرط تتوقف هذه الحلقة
مثال بسيط:

كود :
Dim I As Integer = 0
        Do While I < 10
            Console.Write(I)
            I = I + 1

            Console.WriteLine()

        Loop
        Console.ReadKey()


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


0
1
2
3
4
5
6
7
8
9

ثانيا:الحلقة Do Until...Loop
تقوم هذه الحلقة بتنفيذ التعليمات داخل كتلة Do...Loop طالما لم يتحقق الشرط وبمجرد تحققه تتوقف الحلقة(اذن كما نرى فهي تعمل عكس الحلقة Do While...Loop
مثال:

كود :
Dim I As Integer = 0
        Do Until I >= 10
            Console.Write(I)
            I = I + 1

            Console.WriteLine()

        Loop
        Console.ReadKey()


كما نرى فان الشرط هو مضاد تماما للشرط في الحلقة السابقة لكن نتج نفس النتائج بالضبط!!كيف ذلك؟

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


0
1
2
3
4
5
6
7
8
9


القسم الثالث:الفحص قبل الحلقة أو بعد الحلقة


الجزء الأول: الفحص المبدأي: Pre-Test
يقوم البرنامج بفحص الشرط ثم ينفذ الحلقة بعد التحقق من صحة الشرط
مثال: جميع أمثلة Do..Loop السابقة هي من هذا النوع من الفحص

الجزء الثاني:الفحص بعد تنفيذ الحلقة: Posted-Test
يقوم البرنامج بتنفيذ التعليمات لاول مرة ثم يقوم بعد تنفيذ التعليمات للمرة الأولى بفحص الشرط
أي أنه ينفذ التعليمات لاول مرة بالرغم من صحة الشرط المعطى:
مثال: نظام (هل تريد اعادة البرنامج في تطبيقات الكونسول)
الآن سأوضح الفكرة بهذا الكود:

كود :
Dim again As String

        Do
            Console.Write("Do you Want to re-start The Program?(Y/N)")
            again = Console.ReadLine()
        Loop While (again = "Y" Or again = "y")


الآن نخبر البرنامج أول مرة أن يقوم بتنفيذ التعليمات وبعد ذلك يقوم البرنامج بالتحقق من قيمة again التي أدخلناها وقت التنفيذ فاذا كانت تساوي y أو Y فنخبره بتكرار الحلقة وان لم يكن يتخطى الحلقة

ثالثاً :-

طبعاً النوع هذا لا يعتبر نوع بحد مايعتبر طريقة استثنائية ثانية
فمثلاً اذا اردنا ان نقوم بتعبئة الكونسول
10 مرات ali
بدون ذكر اي من الكلمات for او do while
فسنعمل طريقة التالية لتعبئة الكونسول بدون استخدام اي من جمل التكرار المعروفة
وهذه هي الطريقة :_

كود :
Dim s As Integer

s = 0
lo2i:

s = s + 1

Console.WriteLine("ali")

If s < 5 Then GoTo lo2i

Console.ReadKey()


شرح الكود السابق :-

السطر الاول :-

كود :
Dim s As Integer


عرفنا متغير من نوع رقمي وللتعلم المزيد حول المتغيرات والثوابت ادخل هنا
****
السطر الثاني :-

كود :
s = 0


اسندنا قيمة للمتغير s وهي صفر .
*****

السطر الثالث :-

كود :
lo2i:


ماهذا !! ((سنشرحه بعد قليل))

السطر الخامس :-

كود :
Console.WriteLine("ali")


الكود الذي تستطيع من خلاله كتابة اي شيء في الكونسول
وهنا اخترنا اسم علي ali
**********

السطر السادس:-

كود :
If s < 5 Then GoTo lo2i


جملة شرطية واعتقد انها واضحة بعد ماقمت بقرأءة هذا الدرس هنا
ومضمون هذه الحملة الشرطية انه اذا كانت قيمة المتعير s
اذهب إلى كلمة لؤي lo2i
وابدأ بالقراءة من هناك ...
****************
السطر السابع :-

كود :
Console.ReadKey()



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

اي انه باستخدام جملة ال Goto
يمكنك البدء من سطر جديد في الكود ام من اجراء معين
ولا حظ ان كلمة Lo2i يكتب بعدها : نقطتان رئسيتان
كما هو موضح في الصورة التالية :-





=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

يتبع

هذا مثال بسيط على الكونسول وجمل التكرار والمصفوفات والمتغيرات

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

كود :
Dim marks(4) As Integer
Dim sum As Double
Dim avg As Double
Dim big As Double
sum = 0
avg = 0
big = 0
For x = 0 To 4
marks(x) = InputBox("ادخل الدرجة هنا ")
sum = sum + marks(x)
Next
For s = 0 To 4
Console.WriteLine("number of marks " & s & "  = " & marks(s))
Next
Console.WriteLine("-----------------------------")
Console.WriteLine("the sum is  = " & sum)
avg = sum / 5
Console.WriteLine("-----------------------------")
Console.WriteLine("the avg of numbers is  = " & avg)

For m = 0 To 4
If marks(m) > big Then big = marks(m)
Next
Console.WriteLine("-----------------------------")
Console.WriteLine("the bigger number is  = " & big)
Console.WriteLine("-----------------------------")
Console.ReadKey()


شرح الكود السابق :-

عرفنا مصفوفة من نوع رقم وفيها خمس مناطق للتخزين
لانها تبدأ من الصفر وتنتهي عند الاربعة
يعني 0 1 2 3 4

السطور التي بعدها هي لتعريف المتغيرات وهي
Sum & avg & big

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

Sum =ليحمل بداخله مجموع الدرجات جميعها
Avg = ليحمل بداخله متوسط الدرجات
Big = ليحمل بداخله اكبر درجة



واسندنا قيمة بدائية لكل من المتغيرات الثلاثة :-

اقتباس:
Sum=0
Avg=0
Big=0
اول جملة تكرار في الكود
عرفنا عداد اسمه
x على انه يبدأ من صفر وينتهي عند الاربعة
الان بندأ باسناد القيمة لكل من الغرف الموجودة في المصفوفة
marks
بهذا الكود

كود :
Marks(x)=inputbox(“ادخل الدرجة هنا ”)


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

الان سوف نقوم بكتابة جملة تكرار لتكرار مجموع الدرجات وطباعتها على الكونسول الخاص بنا

كود :
For s = 0 To 4
Console.WriteLine("number of marks " & s & "  = " & marks(s))
Next


عرفنا عداد جديد للتكرار اسمه
s
ويحمل بداخله قيمة من صفر إلى 4
----------------------------------------
وسيقوم بإعطاء هذا الكود

كود :
Console.WriteLine("number of marks " & s & "  = " & marks(s))


لماذا الخمسة ؟؟؟؟ الخمسة مجموع القيم الموجودة في المصفوقة

وهي التي تبدأ من الصفر وتنتهي بالاربعة

*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&


وجملة التكرار الثالثة

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

وسنقوم استدعاء المتغير من خلال الكود التالي :-

كود :
Console.WriteLine("the bigger number is  = " & big)


طبعاً لا ننسى الكود الذي لايعمل البرنامج بدونه
وهو ال

كود :
Console.readkey()


والكود كله موضح في هذه الصورة البسيطة



انتهى الدرس
أبلغكم تحياتنا

Lo2i و Mohammed Asaad
انتظروا الدرس القادم


اللَّهُمَّ أَنْتَ رَبِّي ، لا إِلَه إِلاَّ أَنْتَ خَلَقْتَني وأَنَا عَبْدُكَ ، وأَنَا على عهْدِكَ ووعْدِكَ ما اسْتَطَعْتُ ، أَعُوذُ بِكَ مِنْ شَرِّ ما صنَعْتُ ، أَبوءُ لَكَ بِنِعْمتِكَ علَيَ ، وأَبُوءُ بذَنْبي فَاغْفِرْ لي ، فَإِنَّهُ لا يغْفِرُ الذُّنُوبِ إِلاَّ أَنْتَ .
الرد }}}
تم الشكر بواسطة: scluay , kafi2030 , Sajad , tempman , AbdoDabak
#3
بارك الله فيك وربي يجعله في ميزان حسناتك
سبحان الله وبحمده سبحان الله العظيم 
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم