القائمة الرئيسية

الصفحات

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

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

- تعتبر لغة السي شارب لغة جديدة قدمتها مايكروسوفت مع حزمة الفيجوال ستوديو وتجمع بين سهولة لغة الفيجوال بيزك وقوة لغة سي بلس بلس ، تسمح هذه اللغة بتطوير تطبيقات للعمل في بيئة الويندوز ومستعرضات الويب وغيرها وتستهدف هذه المدونة المبتدئين باللغة ولا تتطلب تعلم اللغة الا المعرفة ب اساسيات الويندوز وبرنامج Visual Studio للبدء بتكويد اول البرامج،ولكن هناك ما يجب فهمه قبل ان تبدأ بالبداية بالتكويد:
- ما هي الخوارزمية؟
ببساطة الخوارزمية هي طريقة لحل مشكلة او عدة خطوات متسلسلة لإنجاز عمل معين مهما يكن كل شيئ في الحياة له خوارزمية معينة.

مثال عن الخوارزميات بشكل المخطط التدفقي :طباعة متحول يحوي العدد 5
شرح الحل: في البداية يجب أن نذكر بداية برنامجنا (Start)
وهذا يدل على أن خوارزمية برنامجنا قد بدأت وكل ما يلي سيتم تنفيذه.
 ثم قمنا بتعريف متحول(5=Set X )  قبل حفظ أي قيمة يجب حفظ مكان له في الذاكرة لنقوم بالحفظ بداخلها القيمة المرادة
 وكذلك يجب لهذه المنطقة في الذاكرة أن يكون لها أسم لكي نستطيع استدعائها والحصول على القيمة التي بداخلها 
عندما قلنا(SET )هذا يعني أنني اريد حجز مكان في الذاكرة; وعندما ذكرنا(X)قمنا بتسميه المنطقة المحجوزة (X)ثم إعطائها القيمة 2. 
ثم ذكرنا(WRITE )وهذا يعني أنني اريد طباعة شيء ما، ثم ذكرنا X لطباعة محتواها. 
ثم أنهينا تنفيذ برنامجنا بذكرنا (End)

مثال:اذا اردنا جمع عددين ستكون خطوات الحل هي العدد الاول + العدد الثاني 
ومن ثم يقوم بعرض النتيجة .... لنمثل هذا ب خوارزمية :
يجب ان نذكر بداية برنامجنا Start
 وبعدها ثم نقوم بتعريف متحولين ووضع قيم المتحول الاول والمتحول الثاني
 اي: 
(Set x=5 و Set y=10)
 هنا قد تم انشاء متحول بالذاكرة ب اسم x وفيه قيمة 5 ومتحول ب اسم y وفيه قيمة 10
وبعدها نحن بحاجة لوضع وسيط الجمع بين الاعداد نستطيع كتابة Write x+y
 واخيرا نضع كلمة End اي اننا قد انهينا البرنامج .
رسم المخطط التدفقي وفق قوانين ومبادئ وله عدة اشكال كل شكل يدل على معنى محدد مثلا :
1-البيضوي:يستخدم للدلالة لبداية ونهاية برنامجي .
2-المربع :يستخدم للدلالة على حجز المتحولات في الذاكرة والقيام بالعمليات الحسابية .
3-متوازي الاضلاع:يستخدم للدلالة على الادخال للمتحول او لعمليات الطباعة .
4-المعين:يستخدم للدلالة على الشرط او الحلقة .
-ما معنى المتحول(Variable):عبارة عن مكان في الذاكرة يحتوي على قيمة معينة حسب نوعها(سنتطرق لها لاحقا )
يمكن تشبيه المتحول بالصندوق,حيث ان للصناديق انواع واحجام واشكال وسعة تخزين وكذلك المتحول له انواع (كل نوع يحتوي على قيم خاصة به وكل نوع له سعة تخزين خاصة به اي انه يحتوي قيمة لحد معين)والعديد من الخصائص لكل متحول .
-الذاكرة:هي المكان التي يتم وضع المتحول بها واسناد القيمة له .

واجهة ال Visual Studio 2015:

الفيجوال استديو هو عبارة عن بيئة للعمل في كثير من اللغات البرمجية مثل #C اطلقته شركة Microsoft المنشئة لهذه اللغة.
- كيفية بدء مشروع جديد لواجهة ال Console:




-الاسطر الخمس الاولى في المشروع هي عبارة عن استدعاء لمكاتب تحتوي على الاوامر التي سنستخدمها مثل انواع المتحولات واوامر الطباعة والادوات الشرطية الخ.....
وفي السطر 11 هي ال Main وهو المكان الذي سنكتب فيه الكود ويعتبر نقطة بداية تنفيذ .
ملاحظات:
- اي اوامر سطرية مكتوبة خارج جسم ال Main لن يتم تنفيذها حيث ان ال Main هي المنطقة المنفذة لاسطر الاوامر البرمجية المكتوبة.
-المسرب({}) عبارة عن جسم يتم تنفيذ ما بداخلة وكما نلاحظ في الصورة ان ال Main في السطر التالي يحتوي على مسربين مسرب بداية الجسم (})ومسرب نهاية الجسم ({) وهذين المسربين عائدين لل Main ولذلك كل ما سيتم كتابته بين المسربين يعودان لل Main.
-أنواع المتحولات:
* للمتحولات 5 انواع رئيسية وهي كالتالي :

- في الكود البرمجي كل حرف نكتبه له معنى وكذلك بحالة المتحول نحن بحاجة لما نريده وماذا سيحوي وما نوع المعلومات التي سيحتويها....
مثال:
-المعدل يحتاج لمتحول من النوع Double لأن المعدل قد يحتوي على فاصلة مثلا (45.6).
-برنامج لحساب عدد مرات امر نحتاج لمتحول من النوع Int لأن العداد عدد صحيح لا يمكن ان يحتوي فاصلة .
-الاسماء تحتاج لمتحول من النوع String.
-معرفة حالة الاحرف إن كانت كبيرة أو صغيرة مثلا نحتاج لمتحول من النوع Char.
-عندما نحتاج للتحقق من شروط معينة نحتاج لمتحول من نوع Boll.
المتحول Int:
 ال Int متحول مختص بالأعداد الصحيحة ولا يمكن أن يحتوي غير الأعداد الصحيحة.
 كمثال:
 برنامج لحساب عدد الأحرف في جملة معينة ... نستخدم ال Int لأن من المستحيل أن تحتوي الجملة على 5 أحرف ونصف. ملاحظة: نستطيع عبر طرق معينة أن نجعل ال Int يقبل بعدد عشري، لكنه سيلغى الأعداد التي بعد الفاصلة وينتقل للعدد األقرب. كمثال:
 العدد (5.2) إذا وضعناه داخل متحول من النوع Int عبر طرق معينة فإنه يأخذها(5)أي انه حذف الفاصلة وما بعدها، والعدد(5.6)يأخذها (6)لأن ال (5) أقرب من ال (5)بالنسبة للعدد (5.6).
 المتحول DOUBLE:
 هذا المتحول مختص بالأعداد العشرية (تحتوي فاصلة) ويتميز أنه يستطيع الاحتواء على أعداد صحيحة، ولكن لا يستطيع أن يحتوي غير الأعداد الصحيحة والعشرية. 
كمثال:
 برنامج لقسمة عددين ... نستخدم ال double لأن نواتج القسمة قد تحتوي على فواصل وإذا استخدمنا ال int قد لا نحصل على ناتج صحيح. 
المتحول String:
 متحول يقبل الجملة النصية بغض النظر عن طولها، وفي البرمجة نميز الجملة النصية بأن توضع بين اشارتي تنصيص("الجملة"). جميع أنواع المتحولات، الحاسوب يترجم ما تم إدخاله، مثلا في ال int لو فرضنا أن لدينا متحولين يحتويان على عددين ثم طلبنا من الحاسوب جمعهم فإنه سيجمعهم دون مشاكل لأنه يعلم أن ال int مختص بالاعداد الصحيحة وأن ما بداخل المتحولين أعداد لذلك يمكن جمعهم.
 أما ال String فإن الحاسوب لا يترجم ما تم إدخاله، أي يمكننا القول إنه يرسم ما تم إدخاله في الذاكرة وعندما أطلب أن استعيد ما تم إدخاله فإنه يعطيني إياها مثل ما أعطيته إياها تماما.
 ولا يمكن أن يحدث خطأ لأن جميع ما ستدخله سيعتبر نص.
 ويمكن أن يحتوي على جميع العناصر من ارقام ومحارف وكل شيء ولكنه سيعتبرها نص.
 كمثال: برنامجاً لأدخال أسماء طلاب ... نستخدم ال String لأنه مختص بالجمل النصية، ويتم الإدخال مثلاً على الشكل التالي:
الاسم الاول:"على "
الاسم الثاني: "نزار"
المتحول Char:
Char مختصرة من الكلمة Character والتي تعني محرف, أي أنه لا يمكن أن يحتوي على أكثر من محرف واحد. 
كمثال: يمكنك إدخال(a)أو(%) أو أي رمز في الكيبورد لديك ... لكن لا يمكنك أن تدخل (ab)معاً ...
 قد يطرح بعضكم سؤال ما فائدة ال Char ونحن نستطيع أن نضع في ال String محرف واحد، وهنا أجيبكم ...
 ال Char يعتمد مبدأ ترجمة المحرف لترميزه ال ASCII وتحديداً إلى Decimal وهو ترميز الأرقام الذي يفهمه الحاسوب، وفيما يلي صورة توضيحية للترميز:

من الصورة الموضحة أعلاه نستنتج: 
أننا في حال أدخلنا لمتحول من نوع Char القيمة (a) فإنه سوف يأخذها ويخزن في ذاكرته القيمة (97) وإذا قلنا (a+1) فإنه سيجمع قيمة (a) الا وهي (97) و(1) فسيكون الناتج (98) الا وهو المحرف (b).
 ال String قلنا أننا نضع الجملة النصية بين علامتي تنصيص ("الجملة")، أما المحرف فإننا نضعه بين اشارتي تنصيص احاديتين ('المحرف').
المتحول Bool:
 Bool هي كلمة مختصرة من Boolean ,وهذا المتحول مختص بالقيم المنطقية, أي انه يحوي قيمتين فقط, إما (True)أو (False). وعندما تتعمق في أي لغة برمجة ستجد أن أغلب مرتكزاتها تعتمد على العوامل المنطقية، مثل الشرط. 
عندما تضع شرط فإنه يتحقق منه، فإذا تحقق يرسل قيمة (True) وإذا لم يتحقق يرسل قيمة(False) وعلى هذا الأساس يتم تنفيذ الأوامر .
 كمثال: عندما نحتاج ألن نتحقق من قيمة معينة أو أمر ما فإننا نحتاج لمعامل منطقي ليخبرنا ما إذا كان الأمر المراد التحقق منه صحيح (True) أو خاطئ (False) وسنفهم مع ال bool أكثر في الفقرات التالية.
 بداية في الكود البرمجي:
 البرمجة تعتمد على التفاصيل وتخطيط ما احتاجه من أدوات لتنفيذ برنامجي كما المطلوب، الكود البرمجي يماثل الخوارزميات التي قمنا برسمها، حيث كما لاحظنا أن التنفيذ يأتي خطوة خطوة،وينفذ تفصيليا ما قد كتبته من أوامر وأفعال، لذلك عندما نفكر في كودنا البرمجي نحن بحاجة لرسم خوارزمية لتطبيق برنامجنا (خوارزمية كما قد تدربنا سابقا) ثم تحويل هذه الخوارزمية لكود برمجي.
 في الخوارزميات المصطلحات التي استخدمناها سابقا ( Write , Read , Set ) هي مصطلحات توضيحية واختصاريه فقط نستخدمها في الخوارزمية لمعرفة هدف العملية, أما في الكود البرمجي سنستخدم مصطلحات وأوامر وتعليمات أكثر تفصيلية وحتى في كتابة كودنا أو عملية تحويل خوارزميتنا لكود ستكون أكثر تفصيلية.
 والان يمكننا أن نعتبر أن القسم النظري الكبير قد انتهى وسوف نبدأ في القسم العملي لتكملة مسيرتنا في تعلم لغة ال #C:
تعليمات الطباعة والإخراج:
كما نعلم جميعا أن المبرمج يسعى جاهدا لتقديم واجهة سهلة وجميلة للمستخدم وايضا يسعى لأن تكون معرفة المستخدم بما يجري في البرنامج امرا سهل وذلك يتم عن طريق الواجهة التخاطبية.
 الواجهة التخاطبية: عبارة عن عبارات أو إشارات أو رموز تشرح للمستخدم ماذا يحدث أو ماذا عليه أن يفعل.
 كمثال: إخبار المستخدم بخياراته كأن يدخل الرقم 1 للخروج من البرنامج والرقم 2 للمتابعة. وكل ذلك سيتم عن طريق كود برمجي أو سطر من الأوامر الخاصة بتنفيذ فعلنا هذا.
 لطباعة أمر أو متحول أو جملة معينة نحتاج لأمر يخبر الحاسوب بطباعة المحتوى المراد طبعه ...
وفي لغة ال #C لدينا العبارة البرمجية التالية:
                                                                                                 ;( المحتوى المراد عرضه )Console.Writeline
-هذه التعليمة تقوم بطباعة المحتوى والنزول بالمؤشر ( | ) الى سطر جديد.
                                                                                                        ;( المحتوى المراد عرضه )Console.Write
 -هذه التعليمة تقوم بطباعة المحتوى ويبقى المؤشر بعد المحتوى المطبوع وعلى نفس السطر.
 وهنا أضع لكم التعليمة المكتوبة وكيفية طباعتها في واجهة ال Cmd.

كما لاحظنا أن التعليمة ()Console.Writeline تقوم بطباعة المحتوى ثم نزول سطر جديد, فقد تم طباعة الجملة الأولى ثم نزل سطر جديد وطبع الجملة الثانية. 
ملاحظة: الجملة الأخيرة المكتوبة في واجهة الكونسول (Press Any Key To Continue) تعني أن البرنامج قد انتهى وعليك الضغط على أي زر لانهاء البرنامج.
طريقة التعامل مع المتحولات:
 ذكرنا سابقا ووضحنا انواع المتحولات وأن المتحول عبارة عن صندوق يحوي على قيمة معينة حسب نوع المتحول، وأن هذه القيم يمكن أن ندخلها نحن كمبرمجين ضمن البرنامج ، أو نجعل المستخدم يدخل القيمة عن طريقة واجهة ال Console )Cmd ) ولكن جميع ما تم شرحه، تم شرحه نظريا وعن طريق الخوارزميات أما الان سنتعلم كيفية حجز متحول وإعطاء قيمة له في الكود البرمجي: 
 في البداية هنالك ثلاث خطوات يجب أن يكون لدينا علم بهم وأننا بحاجة وضعهم حسب الترتيب، والخطوات هي:
1-ذكر نوع المتحول المراد حجزه في الذاكرة.
2-تسمية المتحول الذي سيتم حجزه في الذاكرة (الاسم لنستطيع مناداة المتحول والحصول على محتواه).
4-وضع إشارة الإسناد(=)، وقد شرحنا أن إشارة الإسناد تعني حذف القيمة الموجودة في الجانب اليساري (إن وجد) ووضع القيمة التي في الجانب اليميني في المتحول في الجانب اليساري.
5-ذكر القيمة المراد وضعها في المتحول في الجانب اليساري من إشارة الإسناد.


مثال: حجز متحول من نوع الاعداد الصحيحة (Int) وتسميته (x) وتخزين القيمة 5 بداخله :
ملاحظة: نستطيع فقط أن نذكر نوع المتحول والاسم دون اسناد قيمة للمتحول .
ملاحظة: الفاصلة المنقوطة (;) يجب ان نضعها في نهاية التعليمة للدلالة على نهايتها .

 ملاحظة: اسم المتحول لا يمكن أن يتضمن فراغات بل يمكن وضع (_)ولا يمكن تسمية متحول باسم من الاسماء المحجوزة (كمثال:لا يمكن أن نسمي المتحول بالاسم int) ولا يمكن أن يكون هنالك متحولان لهما نفس الاسم مثال :
 لحد الان نحن كمبرمجين من ندخل القيمة للمتحول، والان سنأخذ تعليمتي االإدخال:
  شبيهة بتعليمة الطباعة لكن عوضا عن عرض معلومات للمستخدم، سنجعله هو من يدخل القيم والمعلومات التي نحن بحاجة لها، أو التي تلبي هدف برنامجنا.
 وتعليمتي البرمجة للإدخال هما:  
                                                                                                                               ;() Console.Readline 
هذه التعليمة تسمح للمستخدم بإدخال قيمة معينة وعند االنتهاء من كتابة القيمة والضغط على enter للإدخال تخزن القيمة داخل برنامجنا عن طريق أمر معين نقوم بكتابته، ثم يتم النزول لسطر جديد.
                                                                                                                                      ;()Console.Read
اما هذه التعليمة لن نستخدمها حاليا لخصائصها التي لن نتطرق لها الان.
لجعل المستخدم يدخل قيمة وحفظها داخل متحول، يجب أن نضعها في القسم اليميني من إشارة الإسناد، لحفظ القيمة التي أدخلها المستخدم داخل المتحول في القسم اليساري من إشارة الإسناد ...
 مثال على إدخال المستخدم قيمة لمتحول من النوع String :
                                                                                                                  ;()String s=Console.Readline
عندما يتم حجز المتحول (s) يجد البرنامج أمر االإدخال(;()Console.ReadLine ) فيظهر للمستخدم أنه يجب أن يدخل كتابة ما (عن طريق الواجهة التخاطبية نخبر المستخدم عن نوعية المعلومات التي يجب إدخالها) وبعد أن يدخل المستخدم كتابته تتعوض الجملة(;()Console.Readline ) بالقيمة التي أدخلها المستخدم وثم يتم اسنادها للمتحول في الجانب اليساري ... 
وفيما يلي رسم توضيحية لكيفية حدوث ذلك:
التعليمة ;()Console.Readline مختصة بجعل المستخدم يدخل القيمة، وفي حالة ال String فكل ما سيدخله المستخدم سيتم اعتباره نص، ولكن باقي المتحولات مثل ال int لا يمكننا أن نضع فيه قيمة مخالفة(ليست عدد صحيح ) ويجب أن نخبر الحاسوب أن يترجم ما أدخله المستخدم لنستطيع التعامل مع القيمة في العمليات الحسابية كما في ال int, وهنا سنتطلع على تعليمة التحويل: 
                                                                                                      ;(()Convert.to type(Console.Readline
 كما لاحظنا أن الجملة ;()Console.Readline  موجودة داخل أقواس تعليمة التحويل (Convert.to type) وذلك لأن القيمة التي سيدخلها المستخدم سيتم تعويضها بتعليمة الادخال، وتصبح هذه القيمة موجودة داخل أقواس تعليمة التحويل، ثم إن تمت عملية التحويل بنجاح ستتعوض عبارة التحويل بالقيمة ويتم إنسابها للمتحول، أما إن لم تتحول وكانت القيمة المدخلة مخالفة لنوع المتحول سوف يظهر البرنامج خطأ بذلك ..
 لمقصود بالعبارة(toType ) ذكر نوع التحويل الذي نريده ،لذلك عوضا عن الكلمة(type) سنضع نوع المتحول,بإستثناء اذا كان المتحول من النوع int سنضع عوضا عن type الى int32 وتعني ال int32 نوع من أنواع ال int ذو طول معين.
ملاحظة: المقصود بذو طول معين لأنواع المتحول int ،أنه لكل متحول مساحة في الذاكرة وحجم يمكنه استخدامه، ولل int ثلات أنواع ألا وهم( int64,int32,int16 ) وكل منهم له حجم محدد في الذاكرة, ويتم استخدامهم من قبل المحترفين العالمين بمتطلبات برنامجهن ليتم توفير القدر المناسب من الذاكرة في البرنامج.

تعليمة الطباعة ستحول جميع ما بداخلها لنص ثم تطبعه وبذلك ستطبع كلمة Char(لأنه بين أشارتي تنصيص)مضاف لها قيمة المتحول Z.

الأدوات الشرطية (CONDITION):
الأدوات الشرطية : عبارة عن أداة تحتوي شرط نضعه حسب حاجتنا لهذا الشرط، ولها قيمتين إما تحقق وإما لا، فإذا تحقق  فسينفذ أمر ما وإذا لم يتحقق الشرط ستنفذ أمر ما اخر ...
 والأدوات الشرطية أداتين، الأولى تدعى (if) والثانية تدعى) switch).
-الآداة الأولى : if
 لقد اطلعنا على if الشرطية في الخوارزميات ولاحظنا أن لها جانبين إما (T( true واما (F( false والآن سنتعلم كتابتها في الكود البرمجي ...
 في البداية يجب أن نعلم أن لل if بداية ألا وهي على الشكل التالي:
 يتم ذكر الكلمة المحجوزة if ثم فتح األقواس الهلالية  ثم ذكر الشرط المراد التحقق منه (سنفهم كيفية كتابة الشرط فيما يلي) ثم نفتح مسرب بداية جسم ال if({ ) وعند الإنتهاء من كتابة التعليمات المراد تنفيذها إذا تحقق شرط ال if نقوم بإغلاق جسم ال if ({) دلالة على أن ما بين القوسين( {})  ينتمي لل if إذا تحقق الشرط. وهنالك أداتين يمكننا إلحاقهما بال if ،والآداتان إما ( else ) وإما (ِِ if else ) وهما على الشكل التالي:

تمارين شرطية :


الاداة الثانية: Switch:
 ال switch أداة تستخدم لاختبار قيم متحول والقيام بتعليمات معينة أو أمر ما عند وجود المتحول في حالة نحددها نحن، وسنفهمها أكثر في التمارين القادمة والرسم التوضيحي.
 تشبه لحد كبير ال if ولكن في التمارين القادمة سنلاحظ اختصاصات االاستخدام لكل أداة شرطية على حدى.
 ومثل ما تعلمنا أن لل if أدوات تابعين لها وهنالك أيضا أدوات تابعة لل switch االا وهم: 
 االآداة الأولى: Case
. وهي الحالة أو يمكننا أن ندعوها شرط، انه يجب أن تتساوى قيمة المتحول مع قيمة ال case لكي يتم تنفيذ الجسم، ويأتي شكلها كما سنوضح الآن:
في البداية نقوم بوضع الكلمة switch ثم نضع بين القوسين متحول ليتم اختبار قيمه.
 ثم نفتح جسم لل switch.
 وبداخل جسم ال switch نضع قدر ما نريد من ال cases ولكل case قيمة خاصة بها.
 مثال: إذا قلنا 1 case فهذا يعني أن قيمة المتحول المرسل عن طريق ال switch يجب أن تكون 1 لكي يتم تنفيذ ال 1 case ، وإذا وضعنا case أخرى شرطها أن تكون قيمة المتحول 20( 20 case )فإنه ليتم تنفيذ جسمها يجب أن تكون قيمة المتحول 20.
 وعند نهاية أوامرنا البرمجية داخل كل case يجب أن نضع الأمرالبرمجي Break.
 ال Break سنقوم باستخدامه أثناء الحلقات ... ووظيفته الخروج من الجسم.
 أي أننا يجب أن نضع break عند نهاية ال case للخروج من ال switch ،ومترجم الأخطاء سيظهر خطأ في حالة عدم وضع break داخل كل case. وهنالك أداة أخرى تابعة لل case هي default ويتم بنائها مثل ال case باستثناء أنه لا تحتوي على قيمة ليتم اختبارها, بل يتم تنفيذها اذا لم تتحقق أي من ال cases المكتوبين.
 أي يمكننا تشبيه ال case بال if وال default بال else.
ملاحظة: لا يمكن استخدام متحول قيمه المتغيرة غير ثابتة في ال switch ,العدد 2 جميعنا نتفق ان ما قبله هو 1 وما بعده هو 3 ,اما العدد 3.2 قد يقول البعض أن ما بعده 4.2 ويقول اّخر 39.2 ويقول اّخر 399.2 لذلك ال يمكن استخدام نوع العدد العشري مع ال switch.
 من الأنواع الممكن استخدامها مع ال string , char , int :Switch.


الحلقات(LOOP):
 الحلقات تشبه ببنائها الشروط، ولكن الاختلاف انه لا يتم الخروج من الجسم إلا عندما يصبح الشرط غير محقق.
وللحلقات هنالك ثالث طرق لبنائها أو يمكننا القول هنالك ثلاث أدوات يمكننا استخدامهم.
الأدوات الثلاث هم : for , while-do , while , والرسم التوضيحي التالي سيوضح لنا آلية عملهم:


الأداة الأولى : while.
 حلقة تكرارية، تبقى تكرر نفسها وتنفذ ما بداخلها حتى يصبح الشرط غير محقق أو عند وجود عامل ينهي الحلقة ك Break.
 عندما يصل ترتيب تنفيذ الاسطر البرمجية للكلمة while فإنه يتحقق من الشرط، فإذا كان الشرط محقق فيدخل لجسمها وينفذ ما بداخلها، وعند الإنتهاء من تنفيذ الجسم يعود ليتحقق من الشرط، فإذا لا زال محقق فإنه يعود لداخل الجسم ويعيد تنفيذ الاسطر البرمجية، ويبقى على هذه الحال حتى انكسار الشرط ( يصبح الشرط غير محقق ) أو وجود عامل ك Break ينهي الجسم.
 Break :هي أداة وظيفتها انهاء جسم الحلقة والخروج منها, وسنرى تطبيقها عملياً في التمارين القادمة لنفهمها أكثر.
ملاحظة: عند وصول التنفيذ للكلمة Break فإنه يخرج من الحلقة دون تنفيذ ما بعدها, وهنالك أداة أخرى هي ال Continue ووظيفتها تشابه ال Break ولكن هذه الأداة لا تخرج من الجسم, بل فقط تتخطى ما بعدها وتعيد تنفيذ الحلقة من البداية.


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


الأداة الثالثة: for.
الأداة for حلقة مثلها مثل ال while وال while-do ولكن تختلف في سطر بنائها، بأن الأدوات السابقة تحتوي على شرط فقط، أما ال for لها ثلاثة اقسام في سطر بنائها وهم على الشكل التالي: 


بعد أن نذكر نوع الآداة نقوم بفتح االأقواس الهلالية لنضع أدوات الأداة, ويجب أن نضعهن بالترتيب. 
آلية تنفيذ ال for يتم على المراحل التالية: 
1- يتم حجزة مكان في الذاكرة للعداد
2-يتم التحقق من الشرط, إذا تحقق يتم الدخول للجسم, اما إن لم يتحقق يتم الخروج وإكمال الكود بعد الfor .
3-عند االإنتهاء من تنفيذ الجسم يتم زيادة او نقصان العداد ثم التحقق من الشرط ليتم الدخول أو الخروج.
 أي أن تعريف العداد يتم المرور عليه فقط اول مرة عند الوصول لل for ,والزيادة أو نقصان العداد يتم المرور عليها فقط عند الإنتهاء من تنفيذ الجسم.


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

هذا شكل مصفوفة طولها (أي عدد المتحولات أو عدد الصناديق بداخل المصفوفة) 5 , ودائما أول خانة هي 0 لذلك رقم اّخر خانة في المصفوفة يكون ( طول المصفوفة – 1).
 رقم الخانة يمكننا أن نعتبره اسم المتحول, وللمصفوفة كذلك اسم, لذلك لكي أدخل لخانة يجب الوصول لها أولاً.
 والرسم التالي سيوضح لنا معنى هذا الكالم:

كما المتحول النصي( string ) يجب أن يوضع بين علامتي تنصيص(""), وكذلك المصفوفة يتم تمييز متحولهابالأقواس المربعة 
( [ ]). 
ويتم حجز المصفوفة في الذاكرة على الشكل التالي:
ملاحظة: الجملة النصية (String) تعتبر مصفوفة أحادية من المحارف مثلا الجملة النصية ("Ali") يتم اعتبارها مصفوفة وكل حرف في خانة أي اذا فرضنا ان اسم المصفوفة (a) فالخانة صفر ([0]a) تحتوي على المحرف ('A').

ويتم حجز المصفوفة على المراحل التالية:
 1-نقوم بذكر نوع المصفوفة ( وبالتالي جميع المتحولات التي بداخلها ستكون من نفس النوع).
 2-ثم نقوم بوضع الأقواس المربعة ( [ ] ) , لنحدد أن هذا المتحول ليس متحول عادي, بل انه مصفوفة يحتوي على متحولات.
 3-ثم نقوم بتسمية المتحول بالاسم الذي نريده.
 4-ثم نقوم بعملية إسناد االاداة new , وهذه الاداة وظيفتها تهيئة المصفوفة وتكوينها وحذف مابداخلها إن وجد.
 5-ثم نقوم بوضع فراغ ( space ) لننتقل للمرحلة التالية من تعريف المصفوفة.
 6-نقوم بذكر نوع المتحولات التي تحتويها المصفوفة ( نعيد كتابة نفس النوع الذي كتبناه في بداية تعريف المصفوفة).
 7-ثم نقوم بفتح الاقواس الخاصة بالمصفوفة([ ]).
 8- ونقوم بذكر طول المصفوفة ( عدد الخانات) في الأقواس المربعة.
والكود التالي سيوضح ما حدث بالذاكرة:

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

المصفوفة الثنائية:
لا تختلف الإختلاف الكبير عن مفهوم المصفوفة الاحادية, ولكن الإختلاف هو أن المصفوفة الأحادية عبارة عن طول واحد فقط, أما الثنائية عبارة عن أسطر وأعمدة, والشكل التالي سيوضح لنا شكل المصفوفة الثنائية وأرقام خاناتها باللنسبة لمصفوفة طولها 5 وأسطرها 3.
مع التمعن في شكل المصفوفة السابق نستنتج أن الخانة مكونة من رقمين، الرقم على يمين الفاصلة يزداد بازدياد العامود ( الرقم يمين الفاصلة يرمز لرقم العامود, أما الرقم على يسار الفاصلة فيزداد بازدياد السطر ( الرقم يسار الفاصلة يرمز للسطر).
 ومن ناحية التعريف البرمجي، فإنه لا يختلف كثيرا وفيما يلي جملة التعريف:

ويتم حجز المصفوفة على المراحل التالية: 
1-نقوم بذكر نوع المصفوفة(وبالتالي جميع المتحولات التي بداخلها ستكون من نفس النوع ). 
2-ثم نقوم بوضع الاقواس المربعة ( [ ] ), لنحدد أن هذا المتحول ليس متحول عادي, بل انه مصفوفة يحتوي على متحولات, ونضع فاصلة داخل الأقواس لنحدد أن هذه المصفوفة مصفوفة ثنائية.
3-ثم نقوم بتسمية المتحول بالاسم الذي نريده.
4-ثم نقوم بعملية إسناد الاداة new ,وهذه االاداة وظيفتها تهيئة المصفوفة وتكوينها وحذف ما بداخلها إن وجد. 
5-ثم نقوم بوضع فراغ ( space ) لننتقل للمرحلة التالية من تعريف المصفوفة.
6-نقوم بذكر نوع المتحولات التي تحتويها المصفوفة ( نعيد كتابة نفس النوع الذي كتبناه في بداية تعريف المصفوفة ).
7-ثم نقوم بفتح الأقواس الخاصة بالمصفوفة ( [ ] ).
8-ثم نذكر عدد الأسطر, ونضع فاصلة لأنها ثنائية, ثم نذكر عددالأعمدة. والكود التالي يوضح لنا تعريف مصفوفة ثنائية والإدخال لخاناتها: 





المصفوفة المتعرجة:
المصفوفة المتعرجة تختلف عن باقي المصفوفات في طريقة التعامل.
 المصفوفة الأحادية لها طول واحد فقط.
 والمصفوفة الثنائية لها أسطر وأعمدة.
 أما المصفوفة المتعرجة لها أسطر يعتبروا فهرس فقط، وفي كل سطر يتم تعريف مصفوفة أحادية. 
وفي الشكل التالي سنفهم الشكل التوضيحي لمصفوفة عدد األسطر 4 ،وفي السطر الأول عدد الخانات 5 ،والسطر الثاني عدد الخانات 4 والثالث 6 والرابع 3 .
هنا شكل المصفوفة بعد التعريف وحجز
المصفوفات الأحادية في كل سطر 
                                       

وفيما يلي طريقة تعريف المصفوفة المتعرجة في الكود البرمجي :


ويتم حجز المصفوفة المتعرجة على المراحل التالية: 
1- نقوم بذكر نوع المصفوفة (وبالتالي جميع المتحولات التي بداخلها ستكون من نفس النوع).
2-ثم نقوم بوضع الأقواس المربعة( [ ] ), ثم نعيد وضعهم, وبذلك نخبر البرنامج أن الأقواس المربعة الأولى لنحدد أنها مصفوفة, والأقواس المربعة الثانية لنحدد انها تحتوي سطور وفي كل سطر يوجد مصفوفة أحادية سنقوم بتعريفها لاحقا 
3-ثم نقوم بتسمية المصفوفة بالاسم الذي نريده.
4-ثم نقوم بعملية إسناد الأداة new , وهذه الأداة وظيفتها تهيئة المصفوفة وتكوينها وحذف مابداخلها إن وجد. 
5-ثم نقوم بوضع فراغ (space ) لننتقل للمرحلة التالية من تعريف المصفوفة. 
6 .نقوم بذكر نوع المتحولات التي تحتويها المصفوفة ( نعيد كتابة نفس النوع الذي كتبناه في بداية تعريف المصفوفة ).
7-ثم نقوم بفتح الأقواس الخاصة بالمصفوفة ( [ ]), ونعيد وضع الأقواس المربعة.
8-ثم نضع في الأقواس المربعة الأولى في القسم الثاني من جملة التعريف عدد الأسطر المراد تعريفهم.
 وبذلك نكون قد أتممنا تعريف المصفوفة, ويتبقى لنا أن نعرف مصفوفة احادية ونحدد طولها في كل سطر, وسنتعلم كيفية القيام بذلك عن طريق التمرين التالي:


فائدة: المعاملات في البرمجة تتعامل مع الاولويات كما في الرياضيات وهنالك اختصارات للقيام بالعمليات الحسابية على متحول ومن هذه العمليات ال ++ :هو معامل يقوم بزيادة المتحول بمقدار 1 ولهذه المعاملة ايضا اولويات كما التالي:
ال A++:هنا يقوم البرنامج بزيادة المتحول بمقدار 1 ثم يقوم بتنفيذ التعليمة.
ال++A:هنا يقوم البرنامج بتنفيذ التعليمة ثم يقوم بزيادة المتحول A بمقدار 1.

 تمارين عامة متقدمة بعض الشيئ على ما سبق :


الفرز االنتخابي. ونعني بالفرز أن نرتب مصفوفتنا وفق منهج معين نحدده نحن كمبرمجين، كالفرز من الأصغر للأكبر أو العكس، أو فرز حسب الأحرف وهلم جر.
 ونعني بالفرز الإنتخابي: حيث أننا سنأخذ قيمة خانة ونقارنها في جميع الخانات وإن وجد قيمة أكبر من القيمة التي أخذناها أو أصغر ( حسب ما تم تحديد الفرز له تصاعدي أو تنازلي) نقوم بالتبديل بين الخانتين, ثم عند الإنتهاء يتم أخذ قيمة الخانة التي بعدها ومقارنتها في باقي الخانات والكود التالي سيوضح آلية العمل :


الفرز الفقاعي:
 إما الفرز الفقاعي فآلية عمله بأنني سأقارن خانة بالتي بعدها وعند الإنتهاء والتبديل إن وجد, نقارن الخانة التي بعدها بالتي بعدها, وهكذا الى نهاية المصفوفة, ثم نعيد المقارنة نفسها الى ان يصبح عدد دورات المقارنة المعمولة على المصفوفة كلها = عدد خانات المصفوفة.
 والكود التالي يوضح ذلك:









































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


تعليقات

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

    ردحذف
  2. اهلا وسهلا انا جاهز لتقديم المساعدة في اي وقت

    ردحذف
  3. بارك الله فيك لطريقتك في الشرح السهلة والمفيدة

    ردحذف

إرسال تعليق