introduction to c# · 2019-03-29 · introduction to c# خٌحش ڑٓپحذ سؿڂٍرٿپ...

331

Upload: others

Post on 28-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل
Page 2: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

3

Page 3: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

3

ممدمة للبرمجة

بالسي شارب

Page 4: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

: ممدمة للبرمجة بالس شاربالكتاب

المإلؾ : محمود سلمان

تصمم الؽالؾ : تمى عبدالحمد

2الطبعة األولى : أبرل

2018 / 8345رلم اإلداع :

0-066-805-977-978 الترلم الدول :

Page 5: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ممدمة للبرمجة

بالسي شارب

محمود سليمان

Page 6: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Page 7: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

: المحتوى

7 ........................................................................عن الكتاب -

2..... .........................................................................ممدمة -

..... ..................................................................العمل إطار -

................................................... برنامج ف الس شاربالبنة -

................................................................اإلدخال واإلخراج -7

..................................................................... الباناتأنواع -2

9 ......................................................................... المتؽرات -9

9 ........................................................... تحول انواع البانات -

..........................................................التعلمات .............. -

................................................ المعامالت الراضة والمنطمة -

...............( ............- if/else….else if switchالجمل الشرطة ) -

77 ............. ( / While / do….while For / foreach)حلمات التكرار -

. .....................................................( . Arrays) المصفوفات -7

7......................................................... ( Stringsالنصوص ) -2

................................... ( OOP) ف البرمجة كائنة التوجه ممدمة - 9

7 .................................................( . Encapsulation التؽلؾ ) -

- static members .............................................................

Page 8: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

........................ ..............( .Methods or Functions الدوال ) -

7( ........................... Recursion functionالدالة ذاتة اإلستدعاء ) -

- (( object , var , dynamic .............................. ...................2

- Classes ......................................................................... 27

........................... ..................( ......... set , getالخصائص ) -

.....................................................( Inheritance الوراثة ) -7

2- interface ......................................................................

9- Polymorphism ..............................................................

- Abstract , Sealed , Partial ............................................... 9

- Struct ........................................................................ ..

- Namespace ............................................ ......................

( ..................... Errors and Exceptionsاألخطاء واإلستثناءات ) -

- Collections ................................................................... 9

- Generics ......................................................................

- Data Structure ............................. ..................................7

Page 9: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

عن الكتاب

على فهم أساسات لؽة الس شارب بطرمة للمبتدئن لك ساعدهم هذا الكتاب معد

وأهم بالبرمجة، مسبمة له أي معرفة شترط أن كون الماريء وال، ة وسهلةمبسط

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

.والتحصلواإلستعاب

عن اللغة

ت ر و ، فه ط ؼراض كثرةوسهلة وحدثة ولها أ ا لؽة الس شارب لؽة بسطة جد

نن من مك ، اللؽة ت رجبمادة أندرس هلسب ( Microsoft) ركة ماكروسوفتبواسطة ش

على شركة ماكروسوفت ، وتعمل سطح المكتبو والهاتؾعمل تطبمات للوب

.وأكثرهم إستخداما مجة وه واحدة من أشهر لؽات البر ،تطورها دائما

، وأطلموا علها لؽة كوول أي : 999بدأوا ف تطور اللؽة عام

COOL ----> C Object Oriented Language

.ثم ؼروا االسم لس شارب وأعلنوا عنها عام

بالبرمجة ، وه تعمل Cو ++C( ه تطور وإمتداد للؽة #Cولؽة س شارب )

.كائنة التوجه بشكل كل

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

[email protected]

Page 10: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

دمة مم

إحدى لؽات البرمجة المصممة للعمل على البنة التحتة المشتركة للؽات إن س شارب

البرمجة تسمى

( Common Language Infrastructure ) ( CLI )

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

للبنة التحتة أي انه حتوي على الكود التنفذي الذي المواصفات والخصائص الشائعة

.تح له استخدام شتى لؽات البرمجة عالة المستوى عل منصات عمل مختلفة

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

-Bits 1 أو 0تر وه تؤخذ لمتن فمط إما ه اصؽر وحدة لاس ف الكمبو.

.، وه ما عمل بها الكمبوترةائاألصفار واآلحاد عن إشارات كهرب ر عب ت

Page 11: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

Characters - بت 2ساوي بات حث الباتن الحروؾ وتساوي وه تتضم

:ـ بوتم ذلن ( لك فمها الكمبوتر لؽة اآللة فار وآحاد )أص إلى ثم تتحول الحروؾ

ASCII(American Standard Code for Information Interchange)

( وكل رمز ف الكمبوتر مثل 9إلى 0) ( وكل رلم من Zإلى A) فكل حرؾ من

لك فهمه تحول إلى أصفار وآحاد ف النهاة ثم له عدد عشري ناظره & ^ $ # @

الكمبوتر .

Page 12: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( \ بت = ) -

بت 2بات = -

بات كلو بات = -

كلو بات مجا بات = -

مجا بات بات = ججا -

ججا بات ترا بات = -

ترا بات بتا بات = -7

بتا بات إكسا بات = -2

إكسا بات زتا بات = -9

زتا بات وتا بات = -

Fields ( حمول )- و عمره.عن اسم الشخص أر عب ت رلام فمثالتتكون من حروؾ او أ

Records ( سجل ) - حتوي على مجموعة من الحمول معا.

Files ( ملفات )- .تتكون من مجموعة من السجالت

Database ( لواعد البانات )- وعة من البانات ولد تكون بانات عبارة عن مجم

وتتكون من حمول وسجالت الوصول إلها والتعامل معها بسرعةضخمة لكن سهل

. سم وخصائصن ف جداول بسطة لها اخز وهذه البانات ت

Big Data ) وما ج ف العالمنت كم هائل من البانات الت ت -) بانات ضخمة.

Page 13: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ار العملإط

(The .Net Framework )

التطبمات وتحتوي على مكتبات و منصة لتنفذ ه إطار عمل أ Net.) دوت نت ( الـ

س شارب سواء ت تستخدم لبناء تطبمات كبرة بالتوفر العدد من االمكانات ال

android ،ios ،windows ) سواء الهاتؾأو لسطح المكتبأو تطبمات للوب

phone ) وذلن من خاللxamarin طبمات طور توه عبارة عن منصة لت

على كل أنظمة تشؽل الذي أنشء بواسطتها التطبك عملالهواتؾ المحمولة حث

، تستطع إستخدامها التطبماتت لتكون منصة عمل لمختلؾ م م ص Net.لـ ا ،الهواتؾ

اللؽات اآلتة :ف بناء تطبمات من خالل

C# , C++ , Visual Basic , Python and JavaScript

لموارد الت تمكنن من بها كل اف هذه اللؽات و بنةمكتبات الموه تحتوي على كل ال

.من خاللها إنشاء تطبك

: (Net.) عمل إطارمحتوات

CLR (Common Language Runtime) - ه عبارة عن آلة إفتراضة مسئولة

الكود حولت ( processor ( والمعالج ) RAMمع الذاكرة المإلتة )عن إدارة الكود

وهو در ،، بعدها هذا الكود ستطع العمل على أي لؽة برمجة اخرىإلى لؽة اآللة

.اء وحتوي على " جامع النفاات "الذاكرة أضا وعالج بها االخط

(Garbage Collector) GC- ستخدمة ف ن الؽر مواالماك المهملةجمع البانات

.كثرلذاكرة فجعلها تعمل بكفاءة أتنمة االذاكرة وموم بحذفها و

Page 14: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

: Net.رحلة الكود البرمج داخل الـ

لؽة وسطة أوال عالج الكود فتحول إلى

( MSILMicrosoft Intermediate Language )

لبل أن تتحول إلى ألن الس شارب من اللؽات عالة المستوى فتحتاج إلى لؽة وسطة

.لؽة اآللة

عت ف البرنامج التنفذي ) الملؾ الذي ض مكونات تطبمات اللؽة الوسطة و مالحظة :

. فذه الكمبوتر ف نهاة المهام (ن

وهذا just-in-time ( JIT )عرؾ بــمعالج اخر مر على ، ذ البرنامجف ن ثانا عندما

CLR كون بداخل أضا

(.1 , 0وعمل على ترجمة اللؽة الوسطة ف الملؾ التنفذي إلى لؽة اآللة )

مالحظة :

أي أمر ؤخده الكمبوتر تحول إلى اللؽة الت فهمها الكمبوتر وستطع التعامل معها

تحول إلى األصفار واآلحاد. شء( أي 1 , 0وهو ال فهم ؼرها وه )

Page 15: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

: تسمى ( Net.إطار عمل الـ ) وتوجد أضا أداة داخل

CTS (Common Type System)

C# Source Code

C# Compiler

MSIL (.exe or .dll)

CLR / GC / JIT

Operating System

Page 16: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

عبارة عن آداة تستطع تشؽل اكثر من لؽة برمجة معا وه CLRجزء من الـ وه

بمكتبات مختلفة.

تعود هذه اآلداة لتلن االساسات ت بداخلها وعندما تعمل أى لؽةوتحتفظ باالساسا

إطار العمل حث أن كل لؽة برمجة كون لها لواعد الخاصة بهذه اللؽة لك تعمل على

توي على تعرؾ لكل لؽة العدد من المكتبات الت تحوكون لكل ف الكتابة بها خاصة

.شئ خاص باللؽة

https://msdn.microsoft.com/ar-sa/library/

ؼر وى الكتاب ، فمحتتستطع فهم هذه المعلومات فال بؤس، ستفهمها فما بعدإن لم

ت لولها لك تعرؾ كؾ عمل البرنامج الذي تكتب عله الكود تعمد ، لكنمعتمد علها

مبوتر وكؾ فهمه الكوما حدث وراء الشاشة وماذا حدث مع الكود الذي تكتبه

سنبدأ ف ، طع المستخدم العادي التعامل معهوست وظهر على شكل برنامج له واجهه

. ول برنامج ف لؽة الس شارببناء هكل أ

؟ب الكودكت أن إذا

مكننا كتابة الكود على أي محرر نصوص وكون إمتداد الملؾ الذي نكتب به الكود

(.cs )

IDE ( Integrated Development Environment )بئة تطور متكاملة أو على

.كة ماكروسوفت ف التطوره المعتمدة من شر( visual studio ) وهذه البئة

تحمل أي إصدار منه.مكنن أن

بعد تحمل البرنامج وتثبته على جهازن ...

Startمن لائمة visual studioاوال نفتح برنامج

Page 17: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

project ثم نختار Newبعدها ندخل إلى File ثم نضؽط على

Console Applicationثم #C نختار لؽة بعدها

Page 18: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

سفتح أمامن

using System;

namespace + اسم البرنامج

First_project سمت البرنامجفمثال إذا ا

سكون كالتال:

namespace First_project

{

Class Program

{

static void Main(string[] agrs)

{

Console.WriteLine("Hello World");

}

}

}

Page 19: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

بمعالجة للكود و نموملك Start مة بعد اإلنتهاء من كتابة الكود سنضؽط على كل

.تنفذه

( ctrl+f5 )أو مكننا الضؽط على

تفتح الشاشة السوداء visual studioمالحظة : بعض إصدارات برنامج

(Consoleو )تغلك بسرعة لبل رؤية نتيجة الكود،

( ; ( )Console.ReadKeyبكتابة ) عن اإلغالق الشاشة ت يمكنن أن تثب

( ; ( )Console.ReadLineأو )

... ( )Mainف دالة الـ وتكتب هذه الجملة ف آخر سطر ف الكود

namespace First_project

{

Class Program

{

static void Main(string[] agrs)

{

Console.WriteLine("Hello World");

Console.ReadKey( );

}

}

}

.البرنامج جب أن نحلله أوال لك نفهم هذا

؟.ما معن هذه الكلمات..

using , namespace , class , Main ) )

Page 20: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

Cو ++C اللؽتن إنما ه مبنة على ( #C) اتفمنا ف البداة على أن لؽة الس شارب

. بشكل كل بالبرمجة كائنة التوجهوتعمل

؟ وما ه إختالؾ الس شارب عن السإذا ما معنى البرمجة كائنة التوجه؟ وماهو

؟تمنات البرمجة

: لنتعرؾ على تمنات البرمجة اوال

(Linear Programming )البرمجة الخطية -

وه كانت عبارة عن أن الكود كتب ف صفحة واحدة وبعض االجزاء ف الكود لابلة

، فمثال أنن التكرار ف جزء معن من الكود هذا عنللتكرار بدون شئ جعلنا نستؽن

ثم تكمل الكود وبعدها تمابلن مشكلة تكتب بعض االسطر من الكود لتنفذ عملة معنة

، حنها ال تستطع إال جزء مختلؾ من البرنامجمة لكن ف تحتاج إلى نفس العملة الساب

صعبة االخطاء كانت، وأضا عملة البحث عن ن تعد كتابة هذا الجزء مرة أخرىأ

امل من السهل التع فلم كن، كود حتوي على آالؾ االسطر وتؤخذ الكثر من الولت جدا

، وجدت فكرة البرمجة الخطة ات التعدل وكان الكود ؼر مرتبمع الكود ف عمل

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

( Structure Programming ) البرمجة الهيكلية -

( Functionsالوظائؾ ) الدوال أو ظهر بعض التطور ف هذه الولت واخترعوا

واحدة وتستدعهم ف كل عدد من األسطر مرة)عملة معنة ( نن من كتابة مك وه ت

سم ، فمط نكتب ا) العملة (ه االسطرمره احتجت إلهم دون الحاجة إلى إعادة كتابة هذ

العملات، حث صعب فصل البانات عن، بعض التمصر فها د أضا وج لكن ،الدالة

وال توجد حماة للبانات من حدوث األخطاء، والتعدل بها نتج عنه أخطاء ف أجزاء

.C، ومن اللؽات الت تعمل بالبرمجة الهكلة لؽة كودأخرى من ال

Page 21: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

( Object Oriented Programming )البرمجة كائنية التوجه -

ن من تنظم الكود وأختصرت جدا ف نمك ت وأخرا ظهرت تمنة جددة ف كتابة الكود

حجم الكود وأصبح مرتبا وسهل عملات البحث عن األخطاء وساعد المطورن على

، وأصبح كل شء منفصال عن أضا والجهد وفرت الكثر من الولت و العمل بؤرحة

ة التعدل والتؽر ف الكود بدون حدوث أخطاء مترتبة على هذااآلخر حث تتم عمل

فاء البانات تمنات الت تحافظ على البانات وتؽلفها وإخ، وأضفت الكثر من الالتؽر

والتحكم الكامل بها، ومن اللؽات الت تعمل بالبرمجة كائنة التوجه )البرمجة الشئة(

ومعظم لؽات البرمجة الحدثة.Python و Java و #C و ++Cلؽة

Namespace

كثر أنشؤنا ، وأ(Function ) دالةلنتخل أننا كتبنا مجموعة من األسطر البرمجة ف

.class ، اسمهالدوال معا هذه در تحتاج إلى شء ، إذا دالةمن

ـال تعرفه عن، كل ما أردن أن ، سنفهمه فما بعدclassال تشؽل تفكرن بمعنى كلمة

class ومكن إنشاء أكثر من دالةأنه مكن أن حتوي على أكثر منclass ف نفس

سنضعهم بداخل ،مع بعضها classes الـ ، إذا نحتاج إلى شئ لجمع كل هذهالمشروع

Namespace فكون الكود مرتب أكثر.

، ومكن أن classes ـاله عبارة عن حاوة لمجموعة من ( namespaceالـ ) إذا ف

.namespace على أكثر من حتوي المشروع

namespace ـبداخل ال الت classesـالوإستخدام ولنستطع رإة

.using بإستخدام كلمة namespace ـجب أن نستدع ال

Page 22: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Main

مئات ، فمثال إذا كتبتدأ منها البرنامج ف تنفذ الكودتسمى الدالة األساسة الت ب

خارج الدالة االساسة فلن تم تنفذهم أوال بل بدأ البرنامج ف العملات واإلجراءات

.بداخل الدالة األساسةتنفذ ما

static void Main(string[ ] agrs)

{

Console.WriteLine(" C# ") ;

}

ف الفصل الخاص بالدوال، مكن اإلستؽناء عنها string[ ] args معنى كلمة سنفهم

، نستطع كتابة ألواس الدالة بدون كتابتها.Mainف دالة الـ

تكون بالشكل التال :

static void Main( )

{

Console.WriteLine(" C# ") ;

}

Page 23: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ال واإلخراجاإلدخ

(Input and Output )

نامج أو عملات اإلدخال واإلخراج ه الت تمكن المستخدم من التعامل مع البر

مولع الفس بون فإنن أوال تدخل مإذا كنت من مستخد ، على سبل المثالالتطبك

، والبانات عملة إدخال لن كمستخدم للمولع البرد اإللكترون وكلمة المرور فهذه تعد

.تظهر فما بعد فهذه عملة إخراج الت

using System ;

namespace First_project

{

Class Program

{

static void Main(string[ ] agrs)

{

Console.ReadLine( );

}

}

}

Namespace (System) بداخل classعبارة عن Consoleكلمة

ReadLine( )- فمط. ستخدم لعملات اإلدخال وتستمبل نصوصت دالةعبارة عن

Page 24: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

.وإال سحدث خطؤ ( ;) وجب ان نضع فاصلة منموطة ف نهاة كل جملة ف البرنامج

: ف الكود أنواع األخطاء

ن كون خطؤ ف لواعد ( وذل Syntax errorخطؤ ف طرمة كتابة الكود ) -

.كتابة الكود

( وف هذه الحالة كون الكود مكتوب بطرمة Logic errorخطؤ منطم ) -

.ؼر منطم مثل لسمة واحد على صفرصححة كماعدة ولكنه

( هذا الخطؤ حدث أثناء تشؽل Runtime errorخطؤ أثناء التشؽل ) -

.، مثل وجود فائض ف البانات المدخلةالبرنامج

(. Syntax errorنسان الفاصلة المنموطة عد خطؤ ف طرمة الكتابة أي )

using System ;

namespace First_project

{

Class Program

{

static void Main(string[ ] agrs)

{

Console.WriteLine(" C# ") ;

}

}

}

WriteLine( ) - ه دالة لطباعة المخرجات

Line - نه السطر الحال وبدأ ف سطر جددلك تكتب.

Page 25: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ستكون ف عملة الطباعة لكن األسطر الت تلها ( )Writeفمط ومكن أن نكتب

الصمة بها. تم

ن للطباعة :ووجد طرمتا

1- Placeholder ) )

: وتكون كالتال

Console.WriteLine(" Hello World ,0- " , 5 , 20 ) ;

بعد الفاصلة ل للدالةأول مدخ + Hello World الحالة سطبعوف هذه

( 5) وه الممة

وسعرضوحنها لن عرض أول مدخل -1,وإذا أردنا طباعة ثان مدخل سنكتب

20 الممة

.- 0 , صفر بدأ بالممة ( indexترلم ) حث أن أول

ومكنن أن تطبع أي شء بالشكل الذي ترده فمثال :

Console.WriteLine(" My Name is ,0- and my age is ,1-" , " Ali " , 50 ) ;

ف هذه الحالة سطبع

My Name is Ali and my age is 50

: مثال

Console.WriteLine(" x = ,2} , y = {0} and z = ,1- " , 10 , 20 , 30 ) ;

سطبع

x = 30 , y = 10 and z = 20

Page 26: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2- (Concatinatoin الدمج )

Console.WriteLine(" Hello World " + 5 +20);

بعكس الطرمة السابمة انت من سعرض أوال لكن هذه الطرمة ثابتة وماهو مكتوب أوال

وسعرض الكل . تحكم فما سظهر أوال

....سكون الناتج

Hello World 520

عة لس ف الطبا بعد النص )+( سعرضها بهذا الشكل ولن جمع الرلمن فهذه األداة

بن النصوص فهو تعامل مع األرلام الت بعد النص على أداة للدمج ه أداة جمع إنما

لبل ن أتى الرلما، لكن إذا أنها نص ولست رلم فمنطما ال مكن إضافة رلم على نص

.وموم بالعملة الحسابة بطرمة عادة جدا أوال جملة الطباعة فسجمع الرلمن

Console.WriteLine( 5 + 20 + "Hello World" ) ;

25Hello World :سطبع

.Ctrl+F5عندما ننته من الكود ونرد تشؽل البرنامج نضؽط و

الت لد تساعدن ف عملة " Escape Sequenceتسمى " توجد بعض العالمات

.نذار عند عملة ما خطؤالطباعة لتخرج النص بشكل منسك أو إ

'\ لطباعة عالمة تنصص فردة

"\ لطباعة عالمة تنصص زوجة

\\ \ عالمة لطباعة

a\ إنذارلعمل

n\ سطر جددللنزول إلى

t\ ( مسافات فارؼة) tabلعمل

Page 27: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

Console.WriteLine(" \' Hello " ) ;

Console.WriteLine(" \" Hello " ) ;

Console.WriteLine(" \\ Hello " ) ;

Console.WriteLine(" \a Hello " ) ;

Console.WriteLine(" \n Hello " ) ;

Console.WriteLine(" \t Hello " ) ;

Page 28: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

البيانات أنواع

(Data Types )

، نوع حت تعرؾ علها مترجم اللؽةا خزن ف الذاكرة جب أن كون لهالبانات الت ت

تكون نصوص أو حرؾ أو عدد صحح أو عدد عشري وجب أن نحدد نوعها فمثال

اع ولكن ، وجد العدد من االنوخطؤ وسحدث المترجملن تعرؾ علها وإال أوال

، فمط ما تحتاج إله ف برنامجن...لن تسخدم كل شءبالتؤكد

النوع الموافق في البياناتنوع

منصة الدوت نث

الوصف الحجم

bool System.Boolean

true أو false قمح منطقح صح

أو خطأ

sbyte System.Sbyte رقم صحح 821ان 821 – من

موجة أوسانة

تت 1 مساحته

byte System.Byte 0 رقم صحح 222انى

1 مساحتهموجة

تت

short System.Int16 –827121 رقم صحح سانة 827121انى

أو موجة

تت 82مساحته

ushort System.UInt16 0 صحح رقم 227282انى

مساحته موجة

تت 82

Page 29: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

int System.Int32 –278,17,1872,1 انى

278,17,1872,1 رقم صحح سانة

أو موجة

تت 82مساحته

uint System.UInt32 0 رقم صحح 7,2172,2,,72,انى

مساحته موجة

تت 82

long System.Int64 –

,722878127082712,7112710

1

انى

,722878127082712,7112710

1

رقم صحح

موجة أوسانة

تت ,2مساحته

ulong System.UInt64 0

انى

817,,271,,7018710,7228,

282

رقم صحح

مساحته موجة

تت ,2

char System.Char U+0000

انى

U+ffff

قثم حزف

تت 82مساحته

float System.Single 0

انى

1.844674407370955e+16

قثم رقم كسزي

تت 82 مساحته

double System.Double –82,02128E+38

انى

3.402823E+38

قثم رقم كسزي

تت ,2مساحته

decimal System.Decima

l –

821,12,888,12282E+308

انى821,12,888,12282E+308

قثم رقم سانة أو

مساحته موجة

تت 821

string System.String مثم سهسهح نصح مقد تحسة انذاكزج

من جدول

انونكود

object System.Object قثم أي نوع من األنواع انساتقح

Page 30: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

؟الذاكرةخزن ف كون البانات الت ت تإذا مما ت

( ) نوع البانات + المتؽر الذي حتوي على البانات + الممة تتكون من

Data type + variable + value

Page 31: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

المتغيرات

(Variables )

عن خالا الذاكرة عبارة و، لمكان تخزن البانات ف الذاكرةسم هو عبارة عن االمتؽر

بانات ف الذاكرة من خالل د المساحة الت تؤخذها الد وتح ،بت تعادلوكل خلة

، كما مكننا تسمة رار كلما أدخلنا له لمة جددةوتتؽر لمة المتؽر بإستم نوعها

نستطع تسمة متؽرن بنفس األسم، وجب أن تكون المتؽر بؤي اسم نرده لكن ال

الممة الت ستخزن تتناسب مع نوع المتؽر.

تتم عملة تعرؾ المتؽر بهذا الشكل :

الممة = اسم المتؽر + نوع البانات الت تخزن ف المتؽر

Data type Variable_Name = value ;

Variable_Name

D a t a

، الذاكرة لك نستطع الوصول إلى البانات مرة أخرى بسهولةسم هذا المكان ف ون

هذه البانات .صندوق توضع به فهو بمثابة

Page 32: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int num = 5;

string name = "123Mahmoud";

float num2 = 34.5f;

char c = 'a';

double num3 = 34.5;

}

}

}

5( ووضعنا به الممة int )عرفنا متؽر من النوع ف هذا المثال

وجب أن داخل عالمتن تنصص نص( ووضعنا به string ومتؽر من النوع )

أرلام، حتى إذا كانت الممة عبارة عن بن عالمتن تنصص النص أو الكلمة وضع

لكنها بداخل عالمتن تنصص فإنه تعامل معها على أنها نص ولست أرلام.

( لك f ) رلم حتوي على عالمة عشرة ونكتب ف آخره (float ومتؽر من النوع )

.double ه ، ألن الممة االفتراضة لألعداد الكسرةfloatعلى أنه المترجم تعرؾ

.عالمة تنصص فردةووضع بن ( ؤخذ حرؾ charثم عرفنا متؽر من النوع )

a ال تساوي A اسة من ناحة الحروؾ أي أن جب أن نعلم أن لؽة الس شارب حس

.أن ننتبه عند الكتابةفجب

Int خطؤ :

int صح :

Page 33: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

إذا كان : فمثال

int a=7;

int A =7;

، وجب مراعاة الدلة ف كتابة نوع المتؽر ا ف هذه الحالة متؽران مختلفانفإنهم

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

.المتؽر

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int num1=5 ;

int num2=10 ;

int sum ;

sum = num1 + num2 ;

Console.WriteLine("sum of two numbers = "

+sum);

}

}

}

النوع فمن الممكن أن نعرفه بهذه نفس أكثر من متؽر من وإذا كنت ترد تعرؾ

...الطرمة

int num1=5 , num2=10 , sum ;

Page 34: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

static void Main( )

{

int x = 10 ;

x = 5 ;

x = 20 ;

}

. ر الجددة ه آخر لمة دخلت له، تكون لمة المتؽأدخلنا ثالث لم للمتؽر

. تساوي xإذا تكون لمة المتؽر

مالحظة :

.من مرة ف نفس المكان من الكود ال جوز تعرؾ المتؽر أكثر

فمثال :

static void Main( )

{

int x =1 ;

int x =5 ;

}

.ألن هذا المتؽر معرؾ مسبما خطأ

تسمية المتغير

رإذا كان اسم او عم مثال انات الت ستخزن فسم معبر عن نوع البجب أن كون ا

شخص.

string Name;

int Age;

Page 35: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

:وال جوز أن بدأ المتؽر بؤي من الرموز اآلتة

! # $ % ^ & - = + ) ( ?

لكن ممكن أن بدأ بـ _

int _name ; صحح

مكننا أن نسم المتؽر بؤي اسم نرده، لكن هنان بعض الكلمات المحجوزة ف اللؽة

الت ال نستطع تسمة المتؽر بنفس اسمها ...

abstract as base bool

break byte case catch

char checked class const

continue decimal default delegate

do double else enum

event explicit extern false

finally fixed float for

foreach goto if implicit

Page 36: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

in in (generic

modifier)

int interface

internal is lock long

namespace new null object

operator out out

(generic

modifier)

override

params private protected public

readonly ref return sbyte

sealed short sizeof stackalloc

static string struct switch

this throw true try

typeof uint ulong unchecked

unsafe ushort using using

Page 37: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

static

virtual void volatile while

add alias ascending

async await descending

dynamic from get

global group into

join let nameof

orderby partial (type) partial (method)

remove select set

value var when (filter condition)

where

(generic

type

constraint)

where (query

clause)

yield

Page 38: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

int voidال نستطع تعرؾ متؽر هكذا فمثال

، جب االبتعاد عن هذه الكلمات ف تسمة المتؽرات هذا ؼر صحح وسحدث خطؤ

.ة ف اللؽة ولها استخدامات معنةفه كلمات محجوز

:ومجال رى فه ف الكود فإما أن كون ل متؽر نعرفه كون له نطاقك

Local ) وكون ذلن ف نطاق محدد ونحن نحدد مدى رإة مترجم : ) محل

{ }اللؽة له ف بال الكود من خالل لوسن المجموعة

Global ( ) كون مرئ ف كل الكود داخل الـ و: شامل أو عامclass أي

.classكون ف بداة الـ

الة أنن لم تدخل مالحظة : عندما تعط لمة إبتدائة للمتؽر فإنه ستخدمها فمط ف ح

له لمة أخرى.

مثال :

Global

Local

1

2

3

Page 39: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

classأي مرئ ف كل الكود الذي ف هذا الـ ،عام xف هذه الصورة كون المتؽر

Testالذي سمى

سظهر لن المتؽر classالـ ف أي مكان ف الصورة تحت اسم xحرؾ ب ت فإذا ك

x مجال الـ لكن بشرط أن كون داخلclass ال مع بن خارج أول لوس أنه أي

وال جوز إعادة تعرؾ ف الصورة.( 1) كما شر السهم classوآخر لوس للـ

ألنه معرؾ مسبما حث أنه متؽر عام داخل الـ xمتؽر آخر بنفس أسم المتؽر

class.

له خارج لوسن ع حث أنه ال تعرؾ xفإنه ألل شمولة من yأما المتؽر

لدالة كما ، رى بؤي مكان داخل لوسن المجموعة الخاصن باالمجموعة للدالة

جوز تعرؾ متؽر آخر بنفس اسمه خارج ألواس الدالة و .( 2) شر السهم

.الخاصة به

لمحطن رؾ عله خارج الموسن اع هو األلل شمولة فهم حث أنه ال ت zالمتؽر

.( 3) به كما شر السهم

أعلى خارج المتؽر كل لوس مجموعة هو عبارة عن مرحلة ومستوى كلما صعد

.أجزاء أخرى ف الـكوددت شمولته ومعرفته ف األلواس كلما زا

( Constantالثابت )

الفرق بن الثابت والمتؽر أن الثابت لمته ثابته لن تتؽر طوال البرنامج

، إذا حاولنا تؽر الثابت سحدث خطؤ ف البرنامج.أما المتؽر فمكن تؽر لمته

: وكون بالشكل اآلت

const + data type + name + value ;

const string name="Mahmoud" ;

Page 40: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

const int number = 1 ;

ومكن أن نستخدمه ف المم الراضة والفزائة الثابتة.

: تمارن

أحسب مساحة دائرة نصؾ لطرها

using System;

namespace Second_program

{

class Program

{

static void Main()

{

const float pi = 3.14f ;

int radius = 4 ;

float area = pi * (radius * radius);

Console.WriteLine(area);

}

}

}

Page 41: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

تحويل أنواع المتغيرات

(Conversions )

( implicitتحويل ضمني ) -1

ونفس نوع م أو ساوهالحجلتضعه ف متؽر أكبر منه ف وه أن تؤخذ متؽر ما

.من البانات الت بداخله بدون أن حدث أي فمدان أو إضاعة لجزءالبانات

: مثال

long x;

int y;

x = y ;

.x داخل المتؽر yف هذه الحالة وضعنا لمة المتؽر

بت فمكن للمتؽر ذو ( yبت وحجم المتؽر ) ( xحث أن حجم المتؽر )

بدون أي حدوث عملة فمد حتوي على المتؽر ذو الحجم األللالحجم األكبر أن

س ف الحالة الطبعة فسحدث خطؤ وحدث فمد . أما إذا حاولت فعل العكللبانات

للبانات.

عدد صحح

عدد صحح

( byte 8مساحة أكبر )

( byte 4مساحة أصؽر )

Page 42: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( لن حدث 1( ف الصندوق ف الشكل ) 2إذا حاولت وضع الصندوق ف الشكل )

( أكبر من الصندوق اآلخر، لكن ف حالة عكس 1أي خطؤ ألن الصندوق ف الشكل )

( أصؽر ف الحجم. 2هذه العملة سحدث خطؤ ألن الصندوق ف الشكل )

( Explicit or Castingتحويل صريح ) -2

ف البانات أثناء عملة فمدان وتحدث عندما وجد إحتمال، وه عكس الحالة السابمة

ذي االحجام بانات المتؽراتوضع إلى المتؽرات الجددة، ومكننا تمرر البانات

الضؾ إلى نفس نوع بشرط تؽر نوع المتؽر المختلفة واالنواع المختلفة داخل بعضها

. المتؽر المضؾ

بداخل متؽرات نوعها doubleأو floatعداد مكننا وضع المم الكسرة وف حالة األ

int أوlong . بشرط تؽر نوعها

: مثال

long x;

int y;

y = ( int ) x;

1 2

Page 43: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

:مثال

int x = 10 ;

float y = 3.0f ;

x = ( int ) y ;

أو مكننا إستخدام هذه الطرمة :

x = Convert.ToInt32( y );

.إستمبال المتؽر الضؾستطع ضؾ وف هذه الحالة فإن المتؽر الم

الفرق بن :

Convert.ToInt16 Convert.ToInt32 Convert.ToInt64

أي أنها تحول المتؽر حث shortإلى النوع

حجمه shortأن النوع

بات بت أي

تحول المتؽر إلى النوع int حث أن النوعint

بت أي حجمه بات

تحول المتؽر إلى النوع long حث أن النوع

long بت أي 64حجمه

بات 2

تذكر أن :

لبل هذه األنواع من البانات uإذا جاء حرؾ

(short , int , long , float , double )

إختصار لـ uحرؾتطع أخذ لمة موجبة فمط، ومعنى ذلن أن هذه األنواع تس

unsigned.

Page 45: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( )Parse >---الدالة وتوجد أضا

( stringلتحول أي شء من النوع )

من خالل المستخدم : intنوعه لمتؽر ردنا إدخال لمة إذا أ فمثال

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int num;

num = int.Parse(Console.ReadLine( ));

}

}

}

بواسطة( وسؤخد لمته من المستخدم intهذا الكود معناه أنه وجد متؽر من النوع )

، لذا سنجعلها تمبل أعداد الدالة ال تمبل إال نصوص هذه لكن ( )ReadLineالدالة

.( )Parse من خالل دالة صححة

متؽر الذي نرد إدخال الممة له كما ف المثال السابك.داخل ال سنضع كل هذا را وآخ

أو

num = Convert.ToInt32(Console.ReadLine( ) ) ;

Page 46: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

التعليمات

(Comments )

التعلمات ه عبارة عن شرح موجز لجزء معن من الكود البرمج فجعل الكود سهل

فه مجرد مالحظات ، وتجاهل المترجم التعلمات وال تعامل معها نهائا فهمالمراءة وال

فال نحوي أو منطمفها خطؤ د ج لمن عمل بعده، إذا و أو تنوه كتبه المبرمج لنفسه أو

. هم فلن حدث أي خطؤ

أنواع التعلمات :

( // ) تعلك لسطر فردي

مثال :

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int num; // this is the first variable

}

}

}

Page 47: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( /* ..… */تعلك متعدد األسطر )

جزء من الكود ؼر ، فكون هذا الأكثر من سطر مالحظات ف أي أنه مكن أن نكتب

.مرئ بالنسبة للمترجم

مثال :

using System;

namespace First_program

{

class Program

{

static void Main()

{

int num;

/* this is the first variable

this is the first variable

this is the first variable

this is the first variable */

}

}

}

.ا ستجاهله المترجم تمام

المهمة الت كتب التعلمات ف االجزاء جب أن ننشؽل بالتعلمات كثرا ، ت أضا ال

.فمطتحتاج إلى توضح

Page 48: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

المعامالت الرياضية والمنطمية

(Arithmetic and Logic operators )

المعامالت الرياضية

( + الجمع )

( - الطرح )

( * الضرب )

( / ) المسمة

بال المسمة ) % (

) ++ ( الزادة للمتؽر بممدار

( --) النمصان للمتؽر بممدار

مثال :

بفرض أن ....

A = 5 and B = 2

A + B = 7

A – B = 3

A * B = 10

A / B = 2.5

Page 49: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

A % B = 1

A++ = 6

A-- = 4

.متن الجمع بعد المتؽر أو لبلهن نضع عالمكن أ

!...نتبهلكن ا

A++ ال تساوي ++A

أوال ثم تحدث ألنه عندما نضعهم لبل المتؽر فإن الزادة ف ممدار المتؽر تحدث

، أما إذا وضعنا العالمتن بعد المتؽر فإن العملة ستحدث ى المتؽرتلها عل العملة الت

بعد ذلن تحدث الزادة ف الممة. أوال ثم

مثال :

using System;

namespace First_program

{

class Program

{

static void Main()

{

int num1 = 10;

int num2 = 8;

int sum;

sum=(num1++) + ( ++num2);

Console.WriteLine(sum);

//result=19

Page 50: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

Console.WriteLine(num1);

//result =11

Console.WriteLine(num2);

//result =9

}

}

}

؟، لماذافمط 9سطبع

ثم تؽر أوال ألنه موم بالعملة على المأول متؽر لم حدث له تؽر ولم تزد لمته بعد،

المتؽر الثان فزادت ، أما ، فمام بعملة الجمع وبعدها زادت لمته بممدار الزادة ثانا

زادا لد عد العملة ستجدهمثم لام بعملة الجمع، وإذا لمنا بطباعة المتؽرن ب لمته أوال

.، والطرح كذلن أضا بممدار

: مثال

using System;

namespace First_program

{

class Program

{

static void Main()

{

int A=10;

int B=8;

int sum;

Page 51: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

sum= ( A++ ) + ( ++B ) + ( --A ) + ( B-- ) +( B++ )

+ ( A ) - ( B ) ;

// ( 10 ) + ( 9 ) + ( 10 ) + ( 9 ) + ( 8 ) + ( 10 ) - ( 9 )

Console.WriteLine( sum ) ; // = 7الناتج

}

}

}

ن مع ص وبنهما عالمة الجمع فإنها ستدمج الن stringمتؽران نوعهما د إذا وج

.بعضهما

مثال :

string x = " Hello " ;

string y = " World " ;

Console.WriteLine( x + y ) ;

سطبع :

Hello World

: معامالت الممارنة

ساوي ) == (

ال ساوي ) =! (

) أكبر من ) <

ألل من ( > )

أكبر من أو ساوي ( =< )

ألل من أو ساوي ( => )

Page 52: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

أن ... بإفتراض

A = 10 , C = 10 and B = 5

A == C

A > B

A != B

B < A

A >= C

B <= A

:مالحظة

.( assignment ) أو تخصص تعن تسمى عالمة = لست عالمة ساوي إنما

: فإذا لولنا أن

A = 5

أو

A = B

.نتمل إلى الجانب األسرت )=( لمة الجانب األمن للعالمة معنى هذا أن

A تنتمل إلى المتؽر 5 الممة

Bنفس لمة المتؽر Aوتصبح لمة المتؽر Aوضع بداخل المتؽر Bوالمتؽر

ال تتؤثر وتظل كما ه. Bولمة المتؽر

Page 53: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int num1 = 10;

int num2 = 8;

num1 = num2;

Console.WriteLine( num1 );

// 2الناتج =

Console.WriteLine( num2 );

// 2الناتج =

}

}

}

Page 54: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

المعامالت المنطمية

Logical AND ( && ) : جب أن تكون الممتن صححتن

Logical OR ( || ) :جب أن تكون إحدى الممتن صححة

Logical NOT ( ! ) ف األصل تنفها األداة إذا كانت صححة ف، : عكس الممة

.والعكسوتصبح خطؤ

.عندما نصل إلى " الجمل الشرطة "وسنفهم المعنى أكثر

( Bit) الت تتعامل مع البت الثنائة المعامالت

&

|

^

.( Binary System) ئالنظام الثنا أي أنها تتعامل مع البانات على شكل

مالحظة :

الكمبوتر إلى النظام الثنائ أي إلى أصفار وآحادأي حرؾ أو رلم تم تحوله داخل

( فكما ذكرت فهذه تسمى لؽة اآللة والكمبوتر ال فهم 0111001010010110)

ؼرها.

تم تحول األرلام العشرة إلى النظام الثنائ بهذه الطرمة :

بالنظام الثنائ. أس ما أس صفر إلى ال نهاة، لذا س م

2 2 2 2 2 2

=

1 2 4 8 16 32

0 5 4 3 2 1

Page 55: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

والت 1عطاة، والممة الت نؤخذها نضع مكانها مم الت تكون الممة الم وتم جمع كل ال

، فمط ما تحتاج إله معن لألساس شترط تكرار. ال 0لم نستخدمها نضع مكانها

وبال أو مكنن أن تمسم الممة المعطاة على العدد ، إلخراج الممة بالنظام الثنائ المسمة كون الممة بالنظام الثنائ.

: مثال

إلى النظام الثنائ. 9حول الممة

2 2 2 2 2

.9الرلم لام الت تكون ثم نبحث عن األر

تحت كل لمة لم نستخدمها 0و تحت كل لمة لد أخذناها 1( فنضع 16,2,1فتكون )

ف تكون الرلم العشري.

ونخرج بال المسمة على 9أو نمسم الممة

وتكون بهذا الشكل :

الممة األساس بال المسمة

9

9

1 2 4 8 16

0 4 3 2 1

1 1 1 0 0

Page 56: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

10011 >---بالنظام الثنائ ه (9فتكون الممة )

: مثال

إلى النظام الثنائ. حول الممة

2 2 2 2

.نبحث عن األرلام الت تكون الرلم

تحت كل لمة لم نستخدمها ف 0تحت كل لمة لد أخذناها و 1( فنضع 8,4,1فتكون )

تكون الرلم العشري.

1101 >---( بالنظام الثنائ ه فتكون الممة )

مع األرلام. )" & | ^ "( شرح هذه الجزئة كان فمط لتفهم كفة عمل هذه المعامالت

مثال :

ف حالة ) & ( -

A = 5 and B = 20

A & B =

00101

&

10100

ــــــــــــــــ =

00100

1 2 4 8

0 3 2 1

1 0 1 1

أس

بإستخدام & فإن الناتج 0و 1عند جمع

ف حالة 1، وكون الناتج 0كون

.1و 1واحدة... إذا كان الجمع بن

Page 57: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

A & B = 4 إذا

) | ( ف حالة -

A |B =

00101

|

10100

=ــــــــــــــــ

10101

A | B = 21 إذا

) ^ ( ف حالة

A ^ B =

00101

^

10100

=ـــــــــــــــــ

10001

A ^ B = 17 إذا

A B A & B A | B A ^ B

0 0 0 0 0

0 1 0 1 1

1 1 1 1 0

1 0 0 1 1

بإستخدام | فإن الناتج 0و 1عند جمع

ف حالة 0، وكون الناتج 1كون

.0و 0واحدة... إذا كان الجمع بن

بإستخدام ^ فإن الناتج 0و 1عند جمع

ف حالة أن 0، وكون الناتج 1كون

0و 0أو 1و 1الممتان متشابهتان

Page 58: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

:( Assigment) أو اإلسناد النملمعامالت

=

+=

-=

*=

/=

%=

&=

^=

|=

مثال :

A = 3 and B = 2

A += B تعن أن المتؽر A ستجمع لمته على المتؽرB ثم سوضع ناتج الجمع

.Aبداخل

: إنما ه إختصار لهذا النمط

A = A + B

A -= B A = A- B

.وضع لمة الطرح ف الجانب األسرح من المتؽر األول ثم ست طر المتؽر الثان س

(A*=B A=A*B ) وضع ف الجانب األسرحاصل ضرب الممتن.

(A/=B A=A/B )وضع ف الجانب األسرالممتن حاصل لسمة.

(A%=B A=A%B ) وضع ف الجانب األسرحاصل بال لسمة الممتن.

Page 59: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

(A&=B A=A&B ) وضع ف الجانب األسرناتج العملة.

(A^=B A=A^B ) وضع ف الجانب األسرناتج العملة.

(A|=B A=A|B ) األسروضع ف الجانب ناتج العملة.

: أولويات العمليات الحسابية

.ما بداخل األلواس أوال ذ ف ن ) (

.ب من الشمال إلى المن وأهم ؤت أوال فتحدث عملته أوال حس ت % / *

.ؤت أوال فتحدث عملته أوال ب من الشمال إلى المن وأهمحس ت -+

.أهم ؤت أوال فتحدث عملته أوال ب من الشمال إلى المن وحس ت =< < => >

.ب من الشمال إلى المن وأهم ؤت أوال فتحدث عملته أوال حس ت =! ==

.جانب األمن تنتمل للجانب األسرالممة الت بال =

مثال :

( 6 / 2 + 5 ) * 3 % 7 – 1

2الناتج :

4 / 2 + 6 * 3 - 5 % 5 - 1 * ( 3 - 1 )

8الناتج :

Page 60: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

توجد أضا بعض العوامل الت نستخدمها ف الكود بإستمرار مثل:

classesإلى الدوال والمتؽرات والـ < ) . ( تستخدم للوصول–النمطة ) دوت (

عندما نمول ...

System.Console.WriteLine( );

System ه عبارة عنnamespace و للوصول إلى ما بداخلها منclasses نكتب

( . )نمطة

Console ه عبارة عنclass و للوصول إلى ما بداخله من دوال ومتؽرات نكتب

( . ) نمطة

.( )ReadLineو ( )WriteLine وكذلن دالة

.وفات وللوصول إلى فهرس المصفوفةمع المصفتستخدم [ ]

أثناء اإلنشاء ة جب أن تحتوي على هذن الموسان، أي دالمع الدوال تستخدم) (

.تخدمها عند تحول أنواع الباناتنس ، وأضا واإلستدعاء

تمارن :

لمتؽرن مع بعضهما :لبدل لمتن أكتب برنامج

مثال لتبسط الفكرة :

، والعكس بالشايواردت أن تبدل الماء الشايإذا كان معن كوب ماء وكوب آخر من

.عن إلى أن تبدل الكوبن اآلخرنستؤت بكوب ثالث فارغ لك حتوي على احد النو

using System;

namespace First_program

{

class Program

Page 61: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

{

static void Main( )

{

int num1=10;

int num2=15;

int temp;

temp = num1;

num1 = num2;

num2 = temp;

Console.WriteLine(num1);

//num1=15

Console.WriteLine(num2);

//num2 =10

}

}

}

تمارن :

.أكتب برنامج لحساب المتوسط الحساب لخمسة أرلام دخلها المستخدم

using System;

namespace Third_program

{

class Program

{

static void Main( )

{

double n1 , n2 , n3 , n4 , n5 , average ;

Console.WriteLine(" enter five numbers ");

n1 = double.parse(Console.ReadLine( ) ) ;

Page 62: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

n2 = double.parse(Console.ReadLine( ) ) ;

n3 = double.parse(Console.ReadLine( ) ) ;

n4 = double.parse(Console.ReadLine( ) ) ;

n5 = double.parse(Console.ReadLine( ) ) ;

average = ( n1 + n2 + n3 + n4 + n5 ) /5 ;

Console.WriteLine( average ) ;

}

}

}

Page 63: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الجمل الشرطية

(Conditional Statements )

if

بداخل الكود الذي، فإذا تحمك الشرط نفذ عبارة عن لرارات لائمة على شروط ه

.( if) جملة التحكم

مثال:

.% أنت ناجحكانت درجتن أكبر من إذا

. % فكون امتاز2تمدرن أكبر من إذا كان

وهكذا ...

if ( الشرط )

code

مثال :

if ( grade>=85 )

Console.WriteLine(" Excellent ") ;

.الكود المراد تنفذه كتابة الشرط بداخلهما ونكتب بداخلهاثم نفتح لوسن ل ifنكتب

.سطر فردي تحتها فمط ف حالة عدم وضع لوسن مجموعة وه تنفذ

Page 64: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

.{ }أما إذا أردنا كتابة أكثر من أمر وأكثر من سطر نكتب الكود بداخل

if ( your_name=="Mahmoud")

{

Console.WriteLine("Hello Mahmoud");

your_name="Mahmoud"+"Soliman" ;

}

.مكننا إجراء وتنفذ أي كود نرده طالما هذا الشرط صحح

ثم الشرط => عبارة عن متؽره gradeكلمة ف المثال السابك

سنفذ الكود الذي بداخل جملة 2ومعنى الكود أنه إذا كانت درجتن أكبر من أو تساوي

if وف هذه الحالة سطبع" Excellent ".فما عدا ذلن لن نفذها ،

{ }م نكتب الكود بداخل هذن الموسان ث

وجب كتابة الشرط بداخل هذن الموسان ) (

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

( تلفونه) اسمه ، عمره ، جنسه ، رلم مثل

.ه الشروط كمل تنفذ الكود أو الخطؤ ف أحد هذ د إذا وج نحدد

: وذلن بواسطة

( && , || , ^ , ! )

تتحمك من الجانب األسر واألمن إذا ( ANDوتعن ) ( && ) المعامالت المنطمة

صححا ها وكون ناتجهما خطؤ ولتعط ناتجا من وجد خطؤ ف احدهما فلن تم تنفذ أي

.جب أن كون الجانبان صححن

Page 65: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

تتحمك من الجانب األسر واألمن ولن ( ORوتعن ) ) || ( المعامالت المنطمة

، إذا كان هنان جانب خطؤ وآخر صحح خطؤما شرطهن كان الجانباتعط خطؤ إال إذا

.ألنه وجد على األلل أحدهما صححتج صحح فستتجاهل الخطؤ وتعط نا

if( أي أنه لك تم تنفذ الكود الذي بداخل XOR) ^ ( وتعن ) المعامالت المنطمة

ناتج ، إذا كانن أي أن أحدهما صحح واآلخر خطؤجب أن كون الجانبان مختلف

صحح فلن تم تنفذ الكود الشرط ف الجانبنناتج الشرط ف الجانبن خطؤ أو كان

. جب أن كونا مختلفن .أضا

A B A & B A | B A ^ B

0 0 0 0 0

0 1 0 1 1

1 1 1 1 0

1 0 0 1 1

أسرجانب && جانب أمن

: ثالم

if ( name == "Mahmoud" && age == 30 || gender == "Male"||

phone == "00000000" )

م كل شرطن معا وبعد اإلنتهاء من الشرطن كون عندما وجد أكثر من شرط فإنه مس

.ناتجهما مدخل للشرط الذي له

لمته أضا صححة ageلمته صححة و nameعلى سبل المثال نفرض أن

Page 66: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

، ثم أحدهما خطؤ فكون ناتج الشرط خطؤ أما إذا كانت ا فناتج الشرط كون صحح إذا

وسارها أا ا صحح( || ) هذا الناتج كون مدخل للشرط الذي بعده أي كون سار الـ

تحتاج جانب واحد صحح على ( || ) كن فكون ناتج الشرط صحح لكلهما ألن

phone، تبمى آخر فحص وهو الـ لهذا الشرط ا الناتج النهائ صحح األلل فكون

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

.تنفذ ما بداخلها صحح فتم ifلجملة

1

&&

0

--------

( 0 )

||

1

-------

( 1 )

&&

1

----------

( 1 )

بدون وضع ( وكتبنا الجملة boolإذا كانت جملة الشرط عبارة عن متؽر من النوع )

حمل الممة فمط فستظل هذه الممة ثابتة يوكتبنا المتؽر الذ أي عالمات تحدد الشرط

.أبدا ifفلن تم تنفذ ما بداخل falseأما إذا كانت ،دائما ستنفذ ifفإن trueفلو كانت

Page 67: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

bool variable=false;

if( variable )

{

Console.WriteLine(" C# ");

}

عندما كون المتؽر من (variable == true) تكون بهذا الشكل ملة الشرط تلمائا ج

ف الشرط. falseأو trueلو لم نكتب لمة ( boolالنوع )

المتؽر المراد نف لمته نضع عالمة تعجب لبل ذا أردنا النف ف جملة الشرطإو

.) ! (

bool variable = false ;

if( variable )

{

Console.WriteLine(" Hello ") ;

}

والممة الت trueف هذه الحالة لن نفذ الكود الذي بداخل الموسن ألن ناتج الشرط

.falseف االصل حملها المتؽر

فجب أن تكون false حمل الممة إذا أردت أن تم تنفذ الكود ف حالة أن المتؽرأما

...جملة الشرط هكذا

if( ! variable )

أو

if( variable == false )

Page 68: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

if( true)إذا كتبنا

{

//code

}

ننا حددنا أن الشرط صحح ف كل الحاالت.أل ifف هذه الحالة سنفذ الكود الذي بداخل

else

لكن إن كان الشرط صححا ،خطؤ ifالذي ف جملة طهذه الجملة عندما كون الشر فذ نت

.elseجملة فلن تنفذ

مثال :

int num=5;

if( num == 2 )

Console.WriteLine("this is true");

else

Console.WriteLine("this is false");

else ف هذه الحالة الشرط خطؤ إذا سنفذ جملة

.{ } داخلها فجب وضع لوسن سطرإذا أردنا كتابة أكثر من

Page 69: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

( Nested if) متداخلةشرط ملج

أو ifبداخل ifكننا كتابة أكثر من مف مكننا كتابة أكثر من شرط بداخل بعضهم البعض

else بداخل جملة ifكتابة

مثال:

int number = 5 ;

if ( number == 2 )

{

// else الشرط خطؤ فلن نفذ وسنفذ ما بداخل

Console.WriteLine("this is true");

}

else

{

if ( number > 1 )

{

number += 3 ;

if ( number < 10 )

{

number += 5 ;

}

else

{

number -= 10 ;

}

}

Console.WriteLine(number);

}

سطبع //

Page 70: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

إذا this is trueسطبع معنى هذا الكود أنه فحص لمة المتؽر أوال فإذا كانت

فجد بداخلها جملة شرط أخرى وفحص الممة elseكانت ؼر ذلن فإنه دخل إلى

؟ اخل المتؽر هل الممة أكبر من الت بد

ؽر مرة أخرى متثم فحص ال وتزد لمة المتؽر بممدار ifإذا كانت كذلن فدخل إلى

ولو ؟ إذا كانت ألل فنفذ ما بداخلها وتزد لمة المتؽر بممدار هل لمته ألل من

وتنمص لمة elseهذه ونزل إلى جملة ifفلن نفذ جملة لم تكن لمته ألل من

الت بداخلها كل elseف أول جملة وبعد ذلن طبع لمة المتؽر المتؽر بممدار

.الشرط هذهجمل

Page 71: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

if …..else if

else if مكننا إختبار أكثر من شرط معا من خالل

using System;

namespace First_program

{

class Program

{

static void Main( )

{

Console.WriteLine("enter your grade");

int grade = int.Parse(Console.ReadLine( ));

if ( grade == 50 )

Console.WriteLine(" your grade=50");

else if ( grade == 60 )

Console.WriteLine("your grade=60");

else if ( grade == 70 )

Console.WriteLine("your grade=70");

else if ( grade == 80 )

Console.WriteLine("your grade=80");

else if ( grade == 90 )

Console.WriteLine("your grade=90");

else

Page 72: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

{

Console.WriteLine("you didn't success if

your grade less than 50 !");

}

}

}

}

دخله المستخدم فإذا تحمك أول شرط سنفذه ولن نفذ أي شء آخر سفحص أول متؽر

، إذا كانت ثم الذي له إال أن تحمك الشرطوإذا لم تحمك ستجه إلى الشرط الذي له

ونفذ ما بداخلها. elseستجه إلى ل االحتماالت خطؤكل الشروط وك

تمارن :

إذا كان عددا وعرض نوع الرلم اكتب برنامج فحص الرلم الذي دخله المستخدم

زوجا أم فردا .

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int number = int.parse(Console.ReadLine( ));

if( number%2 == 0 )

{

Console.WriteLine("this number is Even");

}

Page 73: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

else

{

Console.WriteLine("this number is Odd");

}

}

}

}

Inline Condition

: ifوجد نوع آخر من الجمل الشرطة وتكتب ف سطر واحد وتعمل عمل

) الشرط ( ? خطؤ : صحح

مثال :

int x =10 ;

( x > 5 && x <20 ) ? " true" : " false " ;

ما عدا ذلن trueأطبع وألل من بر من كأ xهذا الكود معناه أن ف حالة أن

.falseاطبع

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

stringفمكننا إستمبالها ف متؽر نوعه stringف هذا الشرط تكون النواتج من النوع

فمكن أن تكون بهذا الشكل :

elseتمثل ifتمثل

Page 74: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

string str = ( x > 5 && x < 20 ) ? " True " : " False " ;

Console.WriteLine( str );

الناتج :

True

.strسخزن بداخل المتؽر falseأو trueأا كان الناتج

.رد تنفذها ال شترط جملة طباعةمكننا كتابة أي جملة ن

: مثال

int num = 20 ;

num = ( num > 10 && num < 35 ) ? num +5 : num -1 ;

Console.WriteLine( num );

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

الناتج :

25

Page 75: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

switch

if مثل للتؤكد من المدخالت ما إذا كانت صححة أم خاطئةستخدم ت شرطة ه جملة

لكن هنان بعض الفروق البسطة بنهما :

If Switch

تستطع التعامل مع أكثر من عملة . بداخل الشرط الواحد

ال تستطع التعامل إال مع عملة واحدة بداخل الشرط

أو & ال نستطع استخدام == < أو > . % بداخلها فه محددة

تكون صعبة ف عملات المراءة وفهم الكود ف حالة الشروط الكثرة جدا وعند إستخدام كم كبر من االرلام

switchللفحص عنها فضل إستخدام

تكون سهلة ف عملة المراءة والفهم if للكود أكثر من

فضل إستخدامها ف حالة العملات البسطة والت ال تحتوي على أشاء محددة فه شمولة أكثر ، على كل ه الشائعة ف اإلستخدام للجمل

الشرطة .

الة إستخدام االرلام ف ح if أسرع منإلى مباشرة النها تتوجهالمحددة

الشرط الصحح وتنفذه .

وتكون صؽتها بهذا الشكل ...

switch( variable)

{

case لمة :

statement;

break; م لتولؾ الفحص عندما تحمك تستخد

الشرط

case لمة :

Page 76: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

statement; الجملة المراد تنفذها إذا كان

الشرط صحح

break;

default:

تنفذ هذه الجملة ف حالة عدم وجود شرط صحح

if ف جملة elseتشبه

statement;

الجملة المراد تنفذها إذا كان الشرط صحح

break;

}

: مثال

int x = 10 ;

switch( x )

{

case 5:

Console.WriteLine(" this is number 5 ");

break;

case 3:

Console.WriteLine(" this is number 3 ");

break;

case 10:

Console.WriteLine(" this is number 10 ");

break;

case 2:

Console.WriteLine(" this is number 2 ");

break;

default:

Page 77: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

Console.WriteLine(" false ");

break;

}

ف بعض الحاالت. breakستؽناء عن كلمة مكننا اإل

...عند الممة كذا أو كذا، مثال كشؾ عن أكثر من لمة ف نفس الحالةإذا كنا نرد ال

نفذ.

مثال:

. الكلدخله المستخدم وطبع له التمدر أكتب برنامج للكشؾ عن تمدر الطلبة،

int grade=int.parse(Console.ReadLine());

switch(grade)

{

case 50:

Console.WriteLine("Accepted");

break;

case 65:

Console.WriteLine("Good");

break;

case 76:

Console.WriteLine("Very Good");

break;

case 85:// ال جب كتابة أي كود ف هذه الحالة

case 95:

Console.WriteLine("Excellent");

break;

default:

Console.WriteLine("Didn't pass");

Page 78: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

break;

}

: معنى الكود أن

سطبع امتاز 9 أو 2ممبول وإذا كان سطبع ف حالة إذا كان التمدر

.if ـب بأن كت فضل و هذه الكود ؼر منطم

.ح فمطللتوض هذا كان

.breakجب علنا كتابة default ـلكن ف جملة ال

.إذ لم تكتب ف آخر جملة سحدث خطؤ ف الكود

تلها "إذا كان الشرط صحح" و الت الة أألن عند عدم كتباتها فهذا معناه أنه ف هذه الح

فحدث خطؤ ألنه تولع وجود حالة بعدها كشؾ عنها ، فكؾ نفذ وال توجد حالة . نفذ

؟!بعدها

.ر جملةوجب كتابتها ف آخ تجاهلها إذا فال جوز

Page 79: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

77

حلمات التكرار

(Loop Statements )

جدا ، وه مهمةن من الكود لعدد معن من المراته عبارة عن تكرار جزء مع

عتمد على شرط وطالما الشرط تحمك ، تنفذ هذه الجملةالنها توفر الولت والمجهود

وتم إستخدامها عن ،أخرى إلى أن تصل إلى نهاة الشرطوتنته ثم تبدأ مرة ذ ف نفه ت

.مل الت تستخدم ف عملة التكرارطرك بعض الج

شكال الحلمات ه :أ ىحدإ

while

: وتكون جملة التكرار بالشكل التال

while ( شرط )

{

الكود المراد تكراره

}

.ومعنى الكود أنه طالما أن هذا الشرط تحمك نفذ

: مثال

Page 80: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

72

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int i = 1;

while( i < 10 )

{

Console.WriteLine( i );

لكن إذا كتبناها بدون عملة الزاده فستظل تعمل بدون تولؾ ألن الشرط دائما صحح

نهائة .طالما الممة لن تتؽر، وستكون حلمة ال

فجب أن نزود لمة المتؽر بالممدار الذي نرده، فمثال إذا لولنا

i++ سزد بممدار

i+=2 سزد بممدار

i+=3 سزد بممدار

وهكذا....

}

}

}

}

: لنكتبه بصورة صححة

using System;

namespace First_program

{

class Program

{

Page 81: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

79

static void Main( )

{

int i = 1;

while( i < 10 )

{

Console.Write( i ) ;

i++;

}

}

}

}

: سطبع

1 2 3 4 5 6 7 8 9

الشرط لن تحمك ألن ألنها وصلت لنهاة الشرط، حث أن ثم ستولؾ عمل الحلمة

.وتتولؾ حلمة التكرار عندها ستولؾ الشرط لست ألل من

ار وبالزادة الت نرد وكتابة أي كود بداخل جملة التكر مكننا وضع الشرط الذي نرده

.الشرط صححأن تم تنفذه طالما وس

إذا تتكون جملة التكرار من :

.العداد ( ) + ممدار الزادة( الشرط ) while لمة إبتدائة للمتؽر +

:تمارن

A :Zأكتب برنامج طبع حروؾ الهجاء من

using System;

namespace First_program

{

Page 82: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

class Program

{

static void Main( )

{

char alphapet = 'A';

while( alphapet<= 'Z' )

{

Console.WriteLine(alphapet);

alphapet++;

}

}

}

}

مكننا كتابتها بهذا الشكل :أو

using System; namespace First_program { class Program { static void Main( ) { char alphapet = 65; while(alphapet<= 90) { Console.WriteLine(alphapet);

alphapet++; } } } }

Page 83: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

ف حالة كبرة أما إذا أردناها الحروؾ ال الهجاء ف حالة حروؾهذا ف حالة إذا أردنا

.ونضع الشرط ألل من أو ساوي 97ـ صؽرة سنبدأ بالحروؾ ال

سكون الناتج :

a

b

.

.

z

do….while

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

رط ؼر صحح فإنها تفحص الشرط وتتؤكد ما إذا كان صححا أم خطؤ حتى إذا كان الش

.على األللواحدة فمط تنفذ الكود مرة

وتكون بالشكل التال:

using System; namespace First_program { class Program { static void Main( ) { int i = 1; do

Page 84: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{ Console.WriteLine( i );

i++; } while( i < 10 ) ; } } }

من : هذه إذا تتكون جملة التكرار

.( الشرط) while+ العداد ( ) ممدار الزادة + do +للمتؽر لمة إبتدائة

تمارن :

أكتب برنامج ؤخذ األرلام والرموز والحروؾ وطبع الرلم العشري الممابل لها ف الـ

ascii.

using System ; namespace ConsoleApplication1 { class Program { static void Main( ) { char check ; do

{ Console.Write( " enter character : " ) ; check = char.Parse( Console.ReadLine( ) ) ; int decim = check ; Console.WriteLine( decim ) ; } while ( true ) ; } } }

Page 85: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

for

.لتكرار وه الشائعة ف اإلستخدامه شكل من أشكال حلمات ا

وتكون بهذا الشكل :

forلمة إبتدائة للعداد ( ;الشرط ;ممدار الزادة أو العداد )

وتكتب الجملة ف سطر واحد بخالؾ الجمل السابمة الت كانت كتب كل جزء منها ف

مكان مختلؾ ف الكود.

.ستخدم ف الجمل الت نعرؾ عدد مرات تكرارها، ففضل إستخدامهات

whileوالفرق بنها وبن

while رتستخدم عندما ال نعرؾ عدد مرات التكرا.

مثال:

using System;

namespace First_program

{

class Program

{

static void Main( )

{

bool question=true;

int choice;

while(question==true)

// ) ==true ( مكننا اإلستؽناء عن

false ف الشرط إذا لم نؽرها بـ true النها تلمائا تكون

{

Page 86: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

choice=int.parse(Console.ReadLine());

switch(choice)

{

case 1:

statement;

break;

case 2:

statement;

break;

case 3:

statement;

break;

default:

question=false;

break;

}

}

}

}

}

مثال على for لتوضح الفرق بنهما

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int number=1 ; number<=10 ; number++ )

{

Page 87: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

Console.WriteLine(number);

}

}

}

}

إلى الرلام من أكتب برنامج لجمع ا

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int sum = 0;

for( int number=1 ; number<=100 ; number++ )

{

sum += number;

}

Console.WriteLine( sum );

}

}

}

سطبع

مكننا إستخدام و متداخلة ومكننا إستخدام بداخلها جملة تكرار أخرى، وتكون حلمات

.إذا أحتجنا إلها if بداخلها جملة

Page 88: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

بهذا الشكل forمكننا أضا كتابة جملة

ا كتابة الممة اإلبتدائة ومكنبشرط أن نكتب الممة اإلبتدائة والشرط والعداد بداخلها

لم نكتب شء وتركناها هكذا فستكون حلمة ال نهائة ال تتولؾ. اإذفولها، و

for( ; ; )

مثال:

إذا وجده إلى أكتب برنامج بحث عن رلم دخله المستخدم من بن االرلام من

طبع هذا الرلم.

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int search = int.Parse(Console.ReadLine( ));

for( int i = 1 ; i<= 1000 ; i++ )

{

if ( i == search )

{

Console.WriteLine("the number is "+i);

}

}

}

}

}

Page 89: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

27

: مثلت تستخدم بداخل جملة التكرار توجد بعض الكلمات ال

break : التكرار.حلمة تستخدم إلماؾ

continue : تكرارها.ض الخطوات وتجاهلها وعدم لتخط بعتستخدم

مثال :

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=10 ; i++ )

{

if( i == 4 )

break;

Console.WriteLine( i );

}

}

}

}

التكرار ولن كمل وسطبع فمط...سخرج من حلمة عندما تكون لمة المتؽر بـ

Page 90: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

22

أما إذا كتبنا..

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=10 ; i++ )

{

if( i==4 )

continue;

Console.Write( i );

}

}

}

}

:هنا ستجاهل هذه الخطوه وستخطاها وطبع

1 2 3 5 6 7 8 9 10

كن جب أن تكون بداخل حلمة ل ifوتكتب أضا مع switchتكتب مع breakإذا كلمة

.تكرار

Page 91: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

29

Nested for ) حلمات تكرار متداخلة (

forبداخل forب تكت

سنفهم معناها وكفة عملها بمثال.

مثال :

إلى أطبع جدول الضرب من

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=12 ; i++ )

{

for( int j = 1; j<=12 ; j++ )

{

Console.WriteLine( i * j );

}

}

}

}

}

أخرى بداخلها forبعدها سجد i = 1عند لمة forف هذا الكود سدخل بداخل أول

كون الشرط خطؤ ثم تنته أي الداخلة إلى أن forأضا فظل نفذ الكود الذي بداخل

Page 92: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

وطالما أن الشرط صحح فإنه سظل بممدار iولى زود لمة األ for صعد إلى

األولى خطؤ. forن شرط كرر هذه العملة إلى أن كو

: ف المثال السابك

i , jفطبع ناتج ضرب j=1الثانة وتكون لمة forسدخل إلى i=1عندما تكون لمة

فطبع j=12وهكذا إلى أن تكون لمة i*jوضرب فتكون بممدار j ثم زود لمة

j=13ناتج الضرب ألننا تضمنا ف الشرط ) ألل من أو ساوي ( وبعدها تزد لمة

.من أو تساوي لست ألل فكون الشرط ف هذه الحالة خطؤ ألن

عملة تكرار األولى وتزد لمة ثم دخل نفذ forفتتولؾ هذه الحلمة وصعد إلى

.حنها سكون الشرط خطؤ وستولؾ i = 13أخرى وظل كرر إلى أن تكون لمة

1*1 , 1*2 , 1*3 , 1*4 , 1*5 , 1*6 , 1*7 , 1*8 , 1*9 , 1*10 , 1*11 ,

1*12

2*1 , 2*2 , 2*3 , 2*4 , 2*5 , 2*6 , 2*7 , 2*8 , 2*9 , 2*10 ,

2*11 , 2*12

وهكذا....

الت بداخلها ف هذا الكود. forـ عملة ل تعادلها forأي أن كل عملة واحدة ألول

Page 93: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

أطبع هذا الشكل :

*

**

***

****

*****

******

لطباعة هذا الشكل. nested forسنستخدم

for الخارجة تعبر عن عدد الصفوؾ و for الت بداخلها تعبر عن عدد األعمدة، ف

صفوؾ، ال شترط أن كون عدد األعمدة ساوي عدد أعمدة و هذا المثال وجد

)" * "( ف كل صؾ الصفوؾ. نالحظ أن الشكل بدأ بعمود واحد ثم زد بممدار

جدد.

using System; namespace First_program { class Program { static void Main( ) { for( int i = 1 ; i<=6 ; i++ ) { for( int j = 1 ; j<= i ; j++ ) {

Console.Write( "*" ); } Console.WriteLine( );

} } } }

Page 94: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

عدد ف ذلن المثال حددنا له الشرط ف جملة التكرار الثانة أال تتكرر إال إذا كان

ول طبع نجمة واحدة ، فمثال الصؾ األعدد الصفوؾألل من أو ساوي األعمدة

والصؾ الثان طبع نجمتن وف الصؾ الثالث طبع ثالث نجوم وهكذا إلى أن تتولؾ

حلمة التكرار الخارجة.

نجعل األعمدة تطبع بجانب بعضها حتى خرج ل هذا الشكل أي أننا ال أثناء الطباعه

فمط ( )Writeـ األعمدة بب الحلمة الخاصة بل نطبع داخل ( )WriteLineنطبع ف دالة

( )WriteLineالخاصة باألعمدة خرج منها فجد دالة الحلمةالشرط ف نهوعندما

أنتهى.لد ك نزل إلى صؾ جدد ألن هذا الصؾ

مثال آخر :

أطبع هذا الشكل .

******

*****

****

***

**

*

مع كل صؾ جدد. مكتمل ثم نمص بممدار نالحظ أن عدد األعمدة

مكننا كتابة الكود بؤكثر من طرمة فمثال مكننا كتابته بهذا الشكل ...

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=6 ; i++ )

{

Page 95: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

for( int j=i; j<= 6 ; j++ )

{

Console.Write( "*" );

}

Console.WriteLine( );

}

}

}

}

أو بتلن الطرمة...

using System; namespace First_program { class Program { static void Main( ) { for( int i = 1 ; i<= 6 ; i++ ) { for( int j = 6 ; j>= i ; j - - ) {

Console.Write( "*" ); } Console.WriteLine( );

} } } }

Page 96: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

: مثال

أطبع هذا الشكل ...

*

* *

* * *

* * * *

* * * * *

* * * * * *

* * * * * * *

* * * * * * * *

ف هذا الشكل نحتاج إلى طباعة مسافات على الجانب األسر أوال ونالحظ أن هذه

سنطبع مسافات وأعمدة وصفوؾ، مع كل صؾ جدد، إذا المسافات تمل بممدار

للصفوؾ بداخلها حلمتن تكرار أحدهما للمسافات واألخرى لألعمدة. forسنحتاج إلى

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=8 ; i++ )

{

for( int k = 1 ; k<=8 –i ; k++ )

{

Console.Write( " " );

}

for( int j = 1 ; j<=i ; j++ )

{

Page 97: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

Console.Write( "*" );

}

Console.WriteLine( );

}

}

}

}

مثال :

أطبع هذا الشكل...

*

* * *

* * * * *

* * * * * * *

* * * * * * * * *

* * * * * * * * * * *

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

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

النجوم فمط .هو نفس المثال السابك لكننا سنضاعؾ عدد

using System;

namespace First_program

{

class Program

Page 98: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

{

static void Main( )

{

for( int i = 1 ; i<=8 ; i++ )

{

for( int k = 1 ; k<=8 - i ; k++ )

{

Console.Write( " " );

}

for( int j = 1; j<= i*2-1 ; j++ )

{

Console.Write( "*" );

}

Console.WriteLine( ); /*

نهاة كل صؾ لد أكتملت دورته لك نزل إلى سطر جدد مع/*

}

}

}

}

Page 99: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

97

مثال :

أطبع هذا الشكل...

*

* * *

* * * * *

* * * * * * *

* * * * * * * * *

* * * * * * * * * * *

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

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

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

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

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

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

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

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

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

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

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

using System;

namespace First_program

{

class Program

{

static void Main( )

{

for( int i = 1 ; i<=12 ; i++ )

{

for( int k = 1 ; k < =12 - i ; k++ )

{

Console.Write( " " );

}

Page 100: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

92

for( int j = 1; j < = i*2-1 ; j++ )

{

Console.Write( "*" );

}

Console.WriteLine( );

}

for( int i = 8 ; i<=12 ; i++ )

{

for( int k = 1 ; k < =12 - i ; k++ )

{

Console.Write( " " );

}

for( int j = 1 ; j< = i*2-1 ; j++ )

{

Console.Write( "*" );

}

Console.WriteLine( );

}

}

}

}

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

لكون ها التكرار الخاصة باألعمدة تدور إلى ضعؾ عدد الصفوؾ. ثم أنمصنا من

.ولست رأس المثلث نجمة واحدة

ثم بدأنا من منتصؾ الصفوؾ بعدما أنتهنا من المثلث متساوي السالن لتتكون الشجرة.

التكرار بداخل بعضها.هذه األمثلة فمط لتجعلن متمكن من إستخدام حلمات

Page 101: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

99

foreach

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

ع من البانات مثل المصفوفة " ." Arrayالمرتبطة معا ومخزنة معا بداخل مجم

: بهذا الشكلتعرفها كون و

foreach+ نوع البانات ( inالبانات + الكلمة المحجوزة ) المصفوفة أو مجموعة

foreach( DataType variable in data )

{ code ; }

مثال:

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int[ ]arr = new int[ 5 ] { 1 , 2 , 3 , 4 , 5 } ;

foreach( int i in arr )

{

Console.WriteLine( i );

}

}

}

}

.وسؤشرح المصفوفات الحما فمط هذا مجرد مثال للتوضح

Page 102: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

المصفوفات

(Arrays )

)المصفوفة االحادة أو الفردة (

وتكون وتكون من نفس نوع البانات وعة من المتؽراتالمصفوفة عبارة عن مجم

وكون ( RAM) ، أي أنها تحجز خالا متتالة ف الذاكرة المإلتةف الذاكرةمتتالة

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

، فائدة المصفوفة أنها تمكننا من التعامل مع أكثر من العناصر الت سنحتاج استخدامها

ي عملة بطرمة سهلة ونؽر من لمته وتحدث عله أ ل عد عنصر ف نفس الولت ون

بإستخدام ، وذلنلمة آالؾ البانات ف سطر واحد ، مكننا أن نؽرجدا وبسطة

.المصفوفة

: تعرؾ المصفوفة كون بالشكل التال

.اسم المصفوفة ] [ نوع البانات = new + نوع البانات + [ حجم المصفوفة ] ;

Data Type + [ ] + Array_Name =new DataType [ size ];

بداخل كل عنصر هو عبارة عن متؽر وأثناء التعرؾ، المصفوفة حجمجب أن نحدد

.المصفوفة

أن المصفوفة دنامكة أي بداخل الس شارب وه تعبر عن newأضفت كلمة

تنشء و من المصفوفة المدمة تؤخذ نسخة فعند تؽر حجمها ،جوز تؽر حجمها

Page 103: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

حجمها ثابت حث أن المصفوفة سابما كانت ،وفة جددة بنفس الحجم الذي حددتهمصف

.لا جوز تؽر حجمها متى أردناأما حاللتعدل، ؼر لابل

العنصر مصفوفة نكتب اسم المصفوفة وموضع لك نشر إلى عنصر معن بداخل ال

.[ ] بداخل المصفوفة، نكتب موضع العنصر بداخل لوسن

.ل عنصر ف المصفوفة ترلمه صفرترلم المصفوفة من صفر حث كون أو وبدأ

: مثال

int [ ] arr = new int *10+;

.فة من المستخدم بالطرمة العادةؤخذ حجم المصفوومكن أن ت

int size = int.Parse(Console.ReadLine( ) ) ;

int [ ] arr = new int[ size ];

ناصر )متؽرات( معن هذه الجملة أننا أنشؤنا مصفوفة بداخلها عشرة ع

طرح أو لسمة أو ضرب أو ، جمع أوم، ومكننا إجراء أي عملة عله(intمن النوع )

وفة لم إبتدائة بهذه الطرمة...أي عملة، مكننا أن نعط لعناصر المصف

int * + arr = new int *10+ , 1 , 4 , 12 , 65 , 14 , 16 - ;

أو بهذه الطرمة مباشرة ..

int [ ] arr=, 1 , 4 , 12 , 65 , 14 , 16 - ;

من المصفوفةبال العناصر ، أماالمصفوفةخالا من سضع هذه المم ف أول

سضع لها لمة إفتراضة صفر.

Page 104: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

1

4

12

65

14

16

0

0

0

0

-حجم المصفوفة دائما ما كون موضع آخر عنصر ف المصفوفة =

: مثال

نضؾ على لمة و الخامس ف المصفوفة العنصرإذا أردنا إجراء عملة جمع على

.ألن المصفوفة تبدأ بصفر سكون العنصر رلم إذا ، الممة العنصر

فتحدث العملة بالشكل التال...

arr* 4 + += 20 ;

ومكننا أضا إضافة عنصر بداخل المصفوفة إلى عنصر آخر بداخلها

أو نسخ لمة عنصر إلى عنصر آخر

arr*0+

arr*1+

arr*2]

arr*3+

arr*4+

arr*5+

arr*6+

arr*7+

arr*8+

arr*9+

Page 105: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال:

arr*2+ = arr*1+;

لعنصر الثالث، ت ف اخ نس ف المصفوفة معنى هذه الجملة أن لمة العنصر الثان

صبحت لمة العنصر الثالث بنفس لمة العنصر الثان.وأ

arr*5+ += arr*2+;

ضع ناتج و سادس وإلى لمة العنصر ال ضفت لمة العنصر الثالثف هذه الجملة أ

.الجمع بداخل العنصر السادس

arr*3+ /= arr*4+;

وضع ناتج المسمة عنصر الرابع على العنصر الخامس وف هذه الجملة لسم لمة ال

.بداخل العنصر الرابع

int sum = arr*2++arr*4+;

مع لمة العنصر الثالث ووضع ناتج الجمع بداخل المتؽر العنصر الخامس لمةت ع م ج

sum.

arr*0+ موضع العنصر االول ف المصفوفة.

arr*1+موضع العنصر الثان ف المصفوفة.

arr*2+موضع العنصر الثالث ف المصفوفة.

وهكذا ...

المصفوفة بهذه الطرمة... حجمنستطع تؽر

: تؽر مساحتهاونرد أنشؤنا مصفوفة بهذه الطرمةنفترض أننا

int [ ] numbers = new int * 10 +;

Page 106: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

هذا الشكل :حدث التعدل ب

Array.Resize( ref numbers , 20 ) ;

طع إعادة تعن حجم حتوي بداخله على دالة تست classه عبارة عن Arrayكلمة

تنشء، حث وتدخله ف المصفوفة الجددةالمدمة تنسخ محتوى المصفوفة المصفوفة ف

.مصفوفة جددة بالحجم الجدد

Resize : وه دالة جاهزة ف اللؽة، حجم المصفوفةه دالة التعدل وإعادة تعن.

ref :ـ ه اختصار لreference ومعناها أن هذه التؽر سحدث فعلا ف هذا المكان

(. RAMبداخل الذاكرة )

.والحجم الجدد اسم المصفوفة نمرر لهذه الدالة

foreachأو forوتم التعامل مع العناصر داخل المصفوفة من خالل حلمات التكرار

.whileأو

مثال :

.أرلام و ضع لم أولة بداخلها ثم اطبع هذه المم أنشء مصفوفة مكونة من

using System ;

namespace First_program

{

class Program

{

static void Main( )

{

int [ ] num=new int[ 10 ] { 11 ,2 , 3 , 4 , 5 ,

12 , 14 , 16 , 17 , 9 } ;

for( int counter = 0 ; counter<num.Length ; counter++ )

Page 107: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

Console.WriteLine( num[ counter ] );

}

}

}

}

length : ممكن أن نكتب المصفوفة، كان من الترجع أو تحسب لنا حجم خاصةه

لكن من المفضل أن نكتب الجملة بهذا الشكل حتى إذا تؽرت المساحة بشكل مباشر

، فهذه المصفوفةهذه المساحة فلن نضطر إلى تؽرها ف كل الشروط المتعلمة ب

.وسنعرؾ ماه الخصائص فما بعد .تلمائا تحسبها الخاصة

.وتؤت بنفس النتجة forفه أبسط ف الكتابة من foreachأو مكننا إستخدام

foreach ( int count in num)

Console.WriteLine( count ) ;

.، ثم طبع محتوى المصفوفةأنشؤنا عداد لك دور على عناصر المصفوفة

: مثال

، ثم ل المستخدم دخل لم لهذه العناصرعنصر وأجع 15مصفوفة مكونة من أنشء

إلى لمة العنصر العاشر وأطبع كل لم العناصر. 5الممة أضؾ

using System; namespace First_program { class Program { static void Main( )

{

Page 108: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

int [ ] num = new int*15+; for( int counter = 0 ; counter<num.Length ; counter++ ) {

num[counter]=int.Parse(Console.ReadLine)); } for( int counter = 0 ; counter<num.Length ; counter++ ) { if ( num*counter+==10 ) num*counter++=5; } for( int counter = 0 ; counter<num.Length ; counter++ ) { Console.WriteLine( num[counter] );

} } } }

ثم تكتب ف الشرط ال جوز أن تبدأ العداد بصفر وأن تجعله زد بممدار —مالحظة

(، النن إذا كتبت أو ساوي فؤنت تمول أن حجم المصفوفةألل من أو ساوي ) لمة

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

سكون عدد الممةعناصر بصفر وانتهت ب إذا بدأت مصفوفة مكونة من

، جب أن تبدأ بصفر وتنته وسحدث خطؤ اثناء ولت التشؽل ولس العناصر

9 بـ

counter < = num.Length---------------x ( خطؤ )

Page 109: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

:تمارن

، أي أن تجعل العنصر األخر ف مصفوفة ثم اعكس هذه المصفوفة عناصر ادخل

كون ف ممدمة المصفوفة والعنصر األول نتمل إلى آخرها.

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int * + arr=new int*10+;

for( int counter = 0 ; counter<arr.Length ; counter++ )

{ arr[counter]=int.Parse(Console.ReadLine)); }

for( int counter = 0 ; counter<arr.Length/2 ; counter++ )

{ int temp; temp = arr[counter];

arr[counter] = arr[arr.Length-1-counter];

arr[arr.length-1-counter] = temp; } }

}

}

Page 110: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

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

مرات 5، أي أنه ستحدث عملة التبدل منتصؾ المصفوفة نصل إلى العملة إلى أن

فوفة إلى ما كانت عله مرات سترجع المص 10ألننا لو أجرنا عملة التبدل 10ولس

.ف السابك

1 2 3 4 5 6 7 8 9 10

مع

9مع

2مع

7مع

مع

.م مرة أخرىالمصفوفة فإنها ستبدلهتدور إل ما بعد منتصؾ forـ لو جعلنا ال

؟11طول المصفوفة عددا فردا مثل لكن ماذا لو كان

ال مبل إال أعداد صححة فخارج المسمة سكون intلن إثر ذلن ف شء ألن النوع

وسكون ف ،5 ساوي 2على 12عدد صحح وستجاهل االعداد العشرة فناتج لسمة

أرلام، سنبدل المن بالسار 5أرلام وعلى ساره 5على منه رلممنتصؾ المصفوفة

.ف المنتصؾسظل والمنتصؾ لن تؤثر ألنه ف كل الحاالت

Page 111: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

: مثال

- - -

، هل إذا أردت أن تبدل الثالثة أرلام الت على من الصفر بالثالثة الت على ساره

؟ستؤثر مكان الصفر

نفس الفكرة لن تؤثر مكان العنصر الذي ف منتصؾ المصفوفة ذات الحجم ، الجواب ال

الفردي.

ووضعنا به أول عنصر ثم حتى تتم عملة التبدل أنشؤنا متؽر لحمل الممة مإلتا و

، بعدها وضعنا الممة الت بداخل المتؽر وضعنا آخر عنصر ف مكان أول عنصر

.وهكذا المإلت ف مكان آخر عنصر

:مثال

.عناصر ثم رتب العناصر تصاعدا مصفوفة و أدخل بها انشء

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int [ ] arr = new int[ 10 ] ;

for( int i= 0 ; i<arr.Length ; i++ )

{

arr[i]=int.Parse(Console.ReadLine));

}

for( int i = 0 ; i <arr.Length-1 ; i++)

{

for( int j = i ; j <arr.Length ; j++)

Page 112: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

if( arr[ i ] > arr[ j ] )

{

int temp;

temp = arr[ i ] ;

arr[ i ] = arr[ j ] ;

arr[ j ] = temp ;

}

}

}

}

}

}

ل ه فإنه سبد فكرة هذا البرنامج أننا نمارن كل عنصر بالذي له فإذا كان ما له ألل من

الممتن ببعضهما.

، تتم عملة التبدل بن لمتن عن طرك وجود متؽر ثالث حمل لمة وكما عرفنا

.التبدلأحدهما حتى تتم عملة

تمارن :

مصفوفة، خالل فهرس هذه المم ف الجعل المستخدم بدل بن لمتن من كتب كود أ

.عناصر المصفوفة مكونة من

using System ;

namespace ConsoleApplication

{

class Program

Page 113: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

static void Main ( )

{

int [ ] arr = new int * 10 + , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 - ;

int index1 = int.Prase( Console.ReadLine( ) );

int index2 = int.Parse( Console.ReadLine( ) );

int temp ;

for ( int i = 0 ; i < 10 ; i++ )

{

for ( int j = i ; j < 10 ; j++ )

{

if ( i == index1 && j == index2 )

{

temp = arr * index1 + ;

arr * index1 + = arr * index2 + ;

arr * index2 + = temp ;

}

}

}

}

}

}

Page 114: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

المصفوفة ثنائية االبعاد

ن طرك إستخدام بعدن وتم التخزن بها عه شكل من أشكال المصفوفات وكون لها

رلم الصؾ والعمود.

ساوي عدد الصفوؾ ف عدد فمساحتها تجب أن تحدد عدد األعمدة والصفوؾ الت بها

.األعمدة

مثال :

12 54 6

76 23 3

4 1 8

الصؾ أو العمود من بدأ ترلم أعمدة وأضا صفوؾ و هذه المصفوفة تحتوي على

.صفر

وتتم عملة تعرؾ المصفوفة بهذا الشكل:

DataType + [ , ] + name = new DataType [ rows , cols ];

int * , + arr = new int * 5 , 4 + ;

.أعمدة صفوؾ و وبها arr أننا أنشؤنا مصفوفة ثنائة اسمها الكودمعنى هذا

2عمود

0صؾ

0عمود

1صؾ

1 عمود

2صؾ

Page 115: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

فة فإننا نحدد مكان الصؾ إذا أردنا تخزن لمة ف مكان محدد ف المصفو فمثال

.والعمود

مثال :

بؤي عمود ، نحدد بؤي صؾ وبداخل هذه المصفوفة ن الممة تخز ف حالة

.(س ، ص ) ، تماما كالرسم البان للمحورنتالل الصؾ مع العمود نضع الممةوب

.ثال الصؾ الثالث والعمود الثانلنحدد م

:فتكتب بهذا الشكل

arr[ 2 , 1 ] = 100 ;

100

تتم عملة اإلدخال لهذه المصفوفة بتلن الطرمة :

وسنحفظ بداخلها أسماء أعمدة صفوؾ و المصفوفة هسنفرض أن مساحة

.الطالب

عمود 0عمود عمود

0صؾ

صؾ

صؾ

3عمود

3صؾ

4صؾ

Page 116: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

using System; namespace First_program { class Program { static void Main( ) { string [ , ] arr = new string [ 4 , 3 ] ;

for( int i = 0 ; i<4 ; i++ ) { for( int j = 0 ; j<3 ; j++ ) { arr[ i , j ]= Console.ReadLine( ); } } } } }

أو أن نؤخذ واألعمدة ف عملة تعرؾ المصفوفة جب أن نحدد لها عدد الصفوؾ

.لمتهما من المستخدم

مثال :

using System; namespace First_program { class Program { static void Main( ) {

int row = int.Parse( Console.ReadLine( ) ) ; int col = int.Parse( Console.ReadLine( ) ) ;

Page 117: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

string [ , ] arr=new string[ row , col ]; for( int i = 0 ; i< row ; i++ ) { for( int j =0 ; j< col ; j++ ) { arr[ i , j ] = Console.ReadLine( ); } } } }

}

تمارن :

.مرتب وألل مرتب أعلىفن ثم أطبع لتخزن مرتبات موظ * مصفوفة أنشء

using System; namespace First_program { class Program {

static void Main( )

{

int row=3;

int col=3;

int max_value = 0 ;

int mini_value ;

int [ , ] arr = new int[ row , col ];

for( int i = 0 ; i< row ; i++ )

{

for( int j = 0 ; j< col ; j++ )

Page 118: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

arr[ i , j ]=int.Parse(Console.ReadLine());

}

}

mini_value = arr[ 0 , 0 ];

فرضا أن أول لمة ف المصفوفة ه ألل لمة //

for( int i = 0 ; i< row ; i++ )

{

for( int j = 0 ; j< col ; j++ )

{

if ( arr[ i , j ] > max_value)

{

max_value = arr[ i , j ] ;

}

if ( arr[ i , j ] < mini_value)

{

mini_value = arr[ i , j ] ;

}

}

}

Console.WriteLine("the maximum salary="+max_value);

Console.WriteLine("the minimum salary="+mini_value);

Page 119: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

}

}

}

تمارن :

ثم أضرب المصفوفتن ف بعضهما وخزن ناتج * امأنشء مصفوفتن مساحته الضرب ف مصفوفة جددة.

مالحظة :

( ضرب ف كل أعمدة المصفوفة األولى ) ف عند ضرب مصفوفتن فإن كل صؾ (. ) المصفوفة الثانة

: بهذه الطرمةالمصفوفتان ب فتضر

12

15

18

11

14

17

10

13

16

3

6

9

2

5

8

1

4

7

مصفوفة مصفوفة

X

1*10+2*13+3*16 1*11+2*14+3*17 1*12+2*15+3*18

4*10+5*13+6*16 4*11+5*14+6*17 4*12+5*15+6*18

7*10+8*13+9*16 7*11+8*14+9*17 7*12+8*15+9*18

Page 120: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

using System; namespace ConsoleApplication1 { class Program { static void Main( ) { int multi = 1 , temp = 0 ; int [ , ]arr = new int[ 3 , 3 ] ; int [ , +arr2 = new int[ 3 , 3 ] ; int [ , +arr3 = new int[ 3 , 3 ] ; Console.WriteLine("---------Enter values of array 1--------");

for( int i = 0 ; i<3 ; i++ ) { for( int j = 0 ; j<3 ; j++ ) { Console.Write(" [ " + i + " , " + j + " ] = "); arr[ i , j ] = int.Parse(Console.ReadLine( )); } } Console.WriteLine("---------Enter values of array 2--------"); for( int i = 0 ; i<3 ; i++ ) { for( int j = 0 ; j<3 ; j++ ) { Console.Write(" [ " + i + " , " + j + " ] = "); arr2* i , j ] = int.Parse(Console.ReadLine( ));

} } for( int k = 0 ; k<3 ; k++ ) { for( int i = 0 ; i<3 ; i++ ) { for( int j = 0 ; j<3 ; j++ ) {

Page 121: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

multi = arr[ k , j ] * arr2* j , i ]; temp += multi; } arr3* k , i ] = temp; temp = 0 ; } }

Console.WriteLine(" multiplication Result of array1 and array2 : ");

for( int i = 0 ; i<3 ; i++) { for( int j = 0 ; j<3 ; j++ ) { Console.Write( arr3* i , j ] + "\t" ); } Console.WriteLine( ); } } } }

تمارن :

.X Oأكتب برنامج بإستخدام المصفوفات لتنفذ لعبة

O X X

X O X

O X O

X-O

Page 122: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

using System;

namespace ConsoleApplication7

{

class Program

{

static void Main(string[] args)

{

const char player1 = 'x', player2 = 'o', empty = ' ';

char*,+ game = new char*3, 3+;

char winner = ' ';

int pos1;

int pos2;

bool choice = true ;

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

if (choice == true)

{

Console.WriteLine(" X Playing ");

Console.WriteLine(" enter your positions ");

pos1 = int.Parse(Console.ReadLine());

pos2 = int.Parse(Console.ReadLine());

if (pos1 > 2 || pos2 > 2)

{

Console.WriteLine("\t \t wrong position");

j--;

}

else if (game*pos1, pos2+ == 'o' || game*pos1, pos2+ =='x')

{

Page 123: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Console.WriteLine("\t \t wrong position");

j--;

}

else

{

game*pos1, pos2+ = 'x';

Console.WriteLine();

choice = false ;

}

}

else

{

Console.WriteLine(" O Playing ");

Console.WriteLine(" enter your positions ");

pos1 = int.Parse(Console.ReadLine());

pos2 = int.Parse(Console.ReadLine());

if (pos1 > 2 || pos2 > 2)

{

Console.WriteLine("\t \t wrong position");

j--;

}

else if (game*pos1, pos2+ == 'x' || game*pos1, pos2+ =='o')

{

Console.WriteLine("\t \t wrong position");

j--;

}

else

{

game*pos1, pos2+ = 'o';

Console.WriteLine( );

Page 124: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

choice = true ;

}

}

for (int a = 0; a < 3; a++)

{

for (int b = 0; b < 3; b++)

{

switch (game[a, b])

{

case player1:

Console.Write("X");

break;

case player2: Console.Write("O");

break;

case empty:

Console.Write(" ");

break;

}

if (b < 2)

Console.Write(" | ");

}

if (a < 2)

{

Console.WriteLine();

Console.WriteLine(" ------");

}

}

Console.WriteLine(); Console.WriteLine();

for(int k=0;k<3;k++)

{

Page 125: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

for(int g=0;g<1;g++)

{

if (game[k , g]=='x' && game[k , g+1+ == 'x'

&& game[k , g+2+ == 'x')

{

Console.WriteLine("\t \t X Wins ");

winner = player1;

break;

}

else if (game[g , k] == 'x' && game*g+1 , k]== 'x'

&& game*g+2 , k] == 'x')

{

Console.WriteLine("\t \t X Wins ");

winner = player1;

break;

}

else if(game*0,0+=='x' && game*1,1+=='x' &&

game*2,2+=='x')

{

Console.WriteLine("\t \t X Wins ");

winner = player1;

break;

}

else if(game*2,0+=='x' &&

game*1,1+=='x' && game*0,2+=='x')

{

Console.WriteLine("\t \t X Wins ");

winner = player1;

break;

}

Page 126: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

}

if (winner == player1 || winner == player2)

break;

}

for(int k=0;k<3;k++)

{

for(int g=0;g<1;g++)

{

if(game*k,g+=='o' && game*k,g+1+=='o'

&& game*k,g+2+=='o')

{

Console.WriteLine("\t \t O Wins ");

winner = player1;

break;

}

else if(game[g,k]=='o' &&

game*g+1,k+=='o' && game*g+2,k+=='o')

{

Console.WriteLine("\t \t O Wins ");

winner = player1;

break;

}

else if(game*0,0+=='o' && game*1,1+=='o'

&& game*2,2+=='o')

{

Console.WriteLine("\t \t O Wins ");

winner = player1;

break;

}

else if(game*2,0+=='o' && game*1,1+=='o'

Page 127: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

&& game*0,2+=='o')

{

Console.WriteLine("\t \t O Wins ");

winner = player1;

break;

}

}

if (winner == player1 || winner == player2)

break;

}

if (winner == player1 || winner == player2)

break;

}

if (winner == player1 || winner == player2)

break;

}

if (winner != player1 && winner != player2)

Console.WriteLine("\t \t Draw ");

Console.WriteLine(); Console.WriteLine();

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

switch (game[i, j])

{

case player1:

Console.Write("X");

break;

case player2:

Page 128: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Console.Write("o");

break;

case empty:

Console.Write(" ");

break;

}

if (j < 2)

Console.Write(" | ");

}

if (i < 2)

{

Console.WriteLine( );

Console.WriteLine("------");

}

}

Console.WriteLine( );

}

}

}

كان مجرد مكن تنفذ اللعبة بشكل أبسط من هذا لكن لم نتطرق لهذه األجزاء إلى اآلن لذا فهذا تمانها أكثر ومعرفة كفة عملها.تطبك على المصفوفات فكل ما همنا هو إ

Page 129: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

النصوص

(Strings )

فمكنن فعل ما تشاء ف النصوص ه عبارة عن متسلسلة أو مصفوفة من الحروؾ،

النص من حذؾ أو إضافة أو إلتصاص.

فمكنن تعرؾ النص بهذه الطرمة :

string var_name = " value ";

وضع بن عالمتن تنصص وبداخلها مكنن أن تكتب أي ة أو النص جب أن مالم

فإنه ستعامل معها أو أو مسافة خالة أو نص مدمج مع رلم شء حتى إذا كانت أرلام

على أنها نص ألنها وضعت بن عالمتن تنصص.

مثل :

string name = "123 mahmoud";

Console.WriteLine( name );

الناتج :

123 mahmoud

على لمة المتؽر الذي كون charأو stringومكنن أن تضؾ أي لمة من النوع

stringمن النوع

string name1 = "mahmoud" , name2="soliman", name3;

name3 = name1 + name2;

بطرمة مباشرة. على المدم أو مكننا أن نضؾ النص أو الحرؾ الجدد

Page 130: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

مثال :

string name ="Mahmoud";

name +=" Soliman";

Console.WriteLine( name );

الناتج :

Mahmoud Soliman

ومكنن أن تؤخذ المم من المستخدم بالطرمة العادة.

كما ف المصفوفة ألنه كما للت هو 0( indexأول حرؾ ف النص ؤخذ الترلم )

عبارة عن مصفوفة من الحروؾ.

مثال :

string x = "Hello";

o l l e H

Console.WriteLine(" the result ,0- ,1- ", x * 1 + , x * 4 + );

الناتج :

e o

(. Lengthلمعرفة عدد حروؾ نص معن نستخدم الخاصة ) -

Console.WriteLine( x.Length );

الناتج :

5

0 3 2 1 4

Page 131: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

مثال :

ف نص دخله المستخدم. mأبحث عن الحرؾ

static void Main( )

{

string search = Console.ReadLine( );

bool check = false;

for (int i = 0; i < search.Length; i++)

{

if ( search[ i ] == 'm' )

check = true;

}

if (check == true)

Console.WriteLine("exist ");

else

Console.WriteLine("not exist");

}

ثم أخذنا لمته من المستخدم، وعرفنا متؽر stringف هذا الكود عرفنا متؽر نوعه

أي أن falseولد مررت له لمة إبتدائة flaseأو trueؤخذ الممة boolنوعه

وعداد forالحرؾ الذي نبحث عنه ؼر موجود إال أن نجده، ثم أنشؤنا حلمة بإستخدام

والت تمثل حجم النص أو search.Lengthبدأ من الممة صفر إلى ألل من الممة

عدد حروفه. من الممكن أن تسؤل نفسن لماذا ال نكتب عدد حروؾ النص بشكل

رامج ال نعرؾ عدد حروؾ النص ألنها تؤت من مباشر؟! ببساطة ألنه ف بعض الب

المستخدم فال مكن التولع بحجم النص، وفضل دائما إستخدام هذه الخاصة ف حالة

المصفوفات.

نستخدم شرط أنه إذا وجد الحرؾ الذي نبحث عنه نجعل لمة forوبداخل الحلمة

check = trueالمتؽر

.falseبـ كما كانت وهذه فائدة أن تمرر لمة إبتدائة falseولو لم جده فتظل لمته بـ

Page 132: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

أي هل الحرؾ checkوبعد أن تنته الحلمة نستخدم شرط آخر لنتؤكد هل تؽرت لمة

الذي نبحث عنه موجود أم ال.

مثال :

استمبل نص من المستخدم ثم أعكس هذا النص.

Hello ------> olleH

static void Main( )

{

string str = Console.ReadLine( );

string str2 = string.Empty; ;

char[ ] x = new char[ str.Length ];

for (int i = 0; i < str.Length; i++)

{

x[ i ] = str[ str.Length - 1 - i ];

str2 += x* i +;

}

Console.WriteLine( str2 );

}

أي من النوع حرؾ وكون charتخدم ثم أنشؤنا مصفوفة نوعها أخذنا الممة من المس

لك ترجع لنا حجم str.Lengthحجمها نفس حجم النص ولذلن أستخدمنا الخاصة

مصفوفة.النص خزن ف بداة النهاة منالنص، ثم أنشؤنا حلمة وجعلنا كل حرؾ

ت من لك نعد فه تخزن الحروؾ الت تؤ string وأنشؤنا متؽر آخر نوعه

المصفوفة.

مالحظة :

string.empty موجودة بهذا المكان مسبما . لمهذه لتفرػ المتؽر من أي

Page 133: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

لكن تعمدت كتابتها بهذه charأو مكننا اإلستؽناء عن المصفوفة الت من النوع

وأنهما charالطرمة لتعرؾ طرمة التعامل مع النص والمصفوفة الت من النوع

متماثالن.

static void Main( )

{

string str = Console.ReadLine( );

string str2 = string.Empty; ;

for (int i = 0; i < str.Length; i++)

str2 += str* str.Length - 1 - i ];

Console.WriteLine( str2 );

}

تمارن :

أطبع أكبر عدد مكون من رلمن + 0 ,9 ,9 ,8 ,8 ,5 ,4 ,1 *أمامن مصفوفة مكونة من

متجاورن.

99ف هذا المثال كون الناتج

static void Main( )

{

int* + arr = , 1, 4, 5, 8, 8, 9, 9, 0 -;

int max = arr*0+;

o l l e H

o

النص

x المصفوفة

Page 134: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

string res = string.Empty;

int num = 0;

for (int i = 0; i < arr.Length - 1; i++)

{

res = arr* i +.ToString( ) + arr* i + 1 +.ToString( );

num = Convert.ToInt32( res );

if (num > max)

max = num;

}

Console.WriteLine(max);

}

لك حمل أكبر لمة موجودة، ثم عرفنا intنوعه maxمتؽر الالكود عرفنا ف هذا

لك حمل كل عنصرن متجاورن ألننا سنضطر إلى دمج stringونوعه resالمتؽر

كل عنصرن متجاورن وال مكن الدمج إال ف النصوص لذا سنستمبل كل متؽر والذي

وبذلن تحول الرلمن إلى ( )ToStringله ثم سنحولهم إلى نصوص من خالل الدالة

ص المكون من الرلمن ، بعد ذلن نحول النresنص ثم ندمجهم ونخزنهم ف المتؽر

المدمجن إلى أعداد صححة مرة أخرى لك نستطع ممارنتهم بؤالعداد األخرى، ألنه

ال مكن ممارنة نص بعدد صحح.

توجد الكثر من الخصائص والدوال الجاهزة الخاصة بالنصوص.

Length خاصة تحسب عدد حروؾ النص

( )string.Concat لدمج أكثر من نص مع بعضهم

أو trueللبحث عن ممطع معن داخل النص وتعد

false Contain( )

للتؤكد من نهاة النص هل نته بممطع أو حرؾ معن falseأو trueانت تحدده أم ال فه تعد

EndsWith( )

للتؤكد من بداة النص هل بدأ بممطع أو حرؾ معن falseأو trueأنت تحدده أم ال وتعد

StrartsWith( )

( )ToUpper ( capitalلتحول النص إلى حالة الحروؾ الكبرة )

Page 135: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( )ToLower ( smallلتحول النص إلى حالة الحروؾ الصؽرة )

( )Substring لمطع حرؾ أو أكثر من النص

( )Replace إلستبدال حرؾ أو ممطع ف النص بممة جددة

الخاصة بالنصوص. ووجد الكثر من الدوال األخرى

مثال :

string x = "C# is a programming language" ;

string y = " and it's a high level language";

Console.WriteLine( x.Length ); ------> 28

Console.WriteLine( string.Concat( x , y ) );

C# is a programming language and it's a high level language

Console.WriteLine(x.EndsWith("uage")); ------> true

Console.WriteLine(x.StratsWith("is")); ------> false

Console.WriteLine(x.ToUpper());

C# IS A PROGRAMMING LANGUEAGE

Console.WriteLine(x.ToLower());

c# is a programming language

Console.WriteLine( x.Substring( 6 , 13 ) );

ف هذه الدالة نحدد بداة ونهاة الممطع الذي نرده من النص.

a programming

أو مكننا تحدد البداة فمط وتكون نمطة النهاة ه نهاة النص.

Console.WriteLine( x.Substring( 6 ) );

a programming language

Console.WriteLine(x.Replace("pro","PRO"));

C# is a PROgramming language

Page 136: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

(. Binary Systemأكتب برنامج حول النص إلى النظام الثنائ )

using System; namespace Test { class Program { static void Main( ) { string str = "Mahmoud soliman"; string result ; int bin = 0; Console.WriteLine( str ); for (int i = 0; i < str.Length; i++) { result = string.Empty; bin = str[ i ]; Console.Write(str[ i ] + " = " + bin + " ---> "); while ( bin != 0 ) { result = ( bin % 2 ).ToString( ) + result; bin /= 2; } Console.WriteLine(result + " "); } } } }

كل حرؾ كون له لمة عددة صححة مناظرة له كما ذكرت ف ممدمة الكتاب والنص هو

عبارة عن مجموعة من الحروؾ حتى المسافة الفارؼة تعد حرفا فإننا نؤخذ الممة العددة لكل

ونحولها إلى النظام الثنائ ونطبع لمة أول حرؾ بالنظام الثنائ ثم نفرغ المتؽر الذي حرؾ

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

binف هذه العملة المتؽر

ؤخذ الممة العددة للحرؾ

المحدد من النص.

عملة تحول الرلم إلى النظام

باليالثنائ من خالل أخذ

ثم لسمته على 2المسمة له على

2

Page 137: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

البرمجة كائنية التوجه

(Object Oriented Programming )

( OOP )

تابة الكود لكنها جعلت الكود أسهلالتوجه ه عبارة عن طرمة لكالبرمجة كائنة

وفرت من الولت والمجهود بشكل كبر جدا فه تتعامل مع كل وأختصرت فه كثرا و

ن هو كائن له صفات شء على أنه كائن وهذا الكائن له صفات ووظائؾ فمثال اإلنسا

.تمزه ووظائؾ موم بها

(لون العن : الطول : لبشرة : من صفاته ) لون ا فمثال

( ؤكل : مش : نام : ومن أفعاله )

وهكذا....

، أي واألفعال لكن بتفاصل مختلفة فكل كائن من نفس النوع متلن نفس اسم الصفات إذا

.الخاصة بهكل كائن صفاته وأفعاله تختلؾ بانات هذه الصفات واألفعال ألن ل

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

كود برمج خاص المولع مصمم، عند إدخال باناتن هل كتب لن مولع الفس بون

حسابا لن فإنن ؟ بالطبع ال، عندما تنشءبصفحتن عند إنشائن لحساب على المولع

وتمألها أنت أي بدون بانات األصل لكن البانات مجردة من المولع تؤخد نسخة

،بباناتن الخاصة

Page 138: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

شكل ، وناتن أنتامن المولع وأدخلت فه ب) نسخة ( ف ذلن الولت أنت أخذت كائن

المولع ووظائفه متشابهه تماما عند كل الناس والبانات المجردة أضا متشابهه عند كل

هذه ه ،والعمر وهكذا وأنت تدخل باناتن هو طلب منن تحدد الجنس الناس فمثال

، وأي شخص جدد رد إنشاء نها ال تزال ال تحتوي على لمالبانات المجردة أي أ

بباناته الخاصة. ومألها من المولع النسخةحساب فإنه سؤخذ نفس

.فمط هذه مجرد أمثلة تشبيهية

علها لؽة الس شارب كما لولنا ف ممدمة الكتاب. وهذه ه الطرمة الت بنت

؟ئن نسخة من البانات الت بداخلهأن كتب الكود الذي ؤخذ منه الكا إذا

التحتة للبرمجة كائنة التوجه. هو البنة classوالـ classكتب بداخل

ستطع ، أي حدد من عملة تسمى عملة تؽلؾ الباناتف classالـ وتكمن لوة

.وصول إلى البانات والتعامل معهاال

. لكن أوال سنتحدث classخص البرمجة كائنة التوجه والـ وسنتحدث عن كل شء

عن طرق الوصول للبانات أو التؽلؾ.

Page 139: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

التغليف

(Encapsulation )

، أو تسمى طرق الوصول للبانات.لؾ البانات ف لؽة الس شاربأنواع لتؽ توجد

و عبارة عن هكم أن المشروع أو البرنامج ذكر لبل البداة ف شرح هذه األنواع سؤ

الـ عبارة عن مجموعة من namespaces والـ namespaces من مجموعة

classes.

بداخل classومكننا إنشاء أكثر من ف المشروع namespace مكننا إنشاء أكثر من

الخصائص والدوال )الصفات class، وكون بداخل كل namespace نفس الـ

.الخاصة بهوالوظائؾ (

مثال من classالبانات الت تكون بداخل الـ ف هذه الحالة نحتاج إلى حماة بعض

لممكن أن تكون بعض البانات لـ من ا، فامل معها بداخل المشروعالتعستطع رإتها و

class ة ف مرئclass كن التعامل معها إال آخر وبعض البانات ؼر مرئة وال م

البانات بداخل حدد من ستطع رإة ، المبرمج فمطالذي كتبت بداخله classبداخل الـ

أخرى namespaceف classأو namespaceـ ف نفس ال classالمشروع سواء

بداخل المشروع.

Page 140: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

أول طرمة للتؽلؾ ه :

public - 1

المشروع وستطع أي البانات الت تكون من هذا النوع فإنها ستكون مرئة ف كل

class داخل namespace أو أيnamespace .أخرى رإتها والتعامل معها

:أو الخصائص تكون بهذا الشكل الدوالتعرؾ طرمة

طرمة الوصول + نوع البانات + األسم

: مثال

public int variable;

using System;

namespace First_program

{

class Program

{

static void Main( )

{

Program2 pro = new Program2( );

pro.x = 10;

}

}

class Program2

{

public int x;

}

}

Page 141: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

classف الـ Xكل ما علن معرفته ف هذا الكود أننا استطعنا إسناد لمة للمتؽر

classالـ وتم الوصول إلى محتوى .، وأستطعنا رإته والتعامل معهProgramاآلخر

(dot( ).ثم النمطة ) class(من هذا الـ objectمن خالل كائن أو نسخة )

وهو :النوع الثان

private – 2

ة المكتوب classلت من نفس نوعه تمتصر على الـ هذا النوع جعل إستخدام البانات ا

آخر حتى لو classلبانات الت من نوعه إلى أي أي أنه حرم إستخدام ا ،فمط بداخله

class ف نفس الnamespace ت الت من هذا النوع بداخل ومكننا التعامل مع البانا

فإن privateنا تنفذ الكود السابك على النوعولو حاول ،الذي كتبت به فمط classالـ

.سخرج لن خطؤ أنه ال مكن الوصول لهذا المتؽر بسبب الحماة الت متلكها المترجم

Page 142: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

: النوع الثالث

protected – 3

آخر إال إذا classانات وال التعامل معها ف أي وهذا النوع معناه أنه ال مكننا رإة الب

الذي كتبت بداخله البانات الت من هذا النوع. وسنفهم مفهوم الوراثة classث الـ ر و

الحما .

using System;

namespace First_program

{

class Program : Prog

{

static void Main( )

{

Program p = new Program( ) ;

p.x = 10 ;

}

}

class Prog

{

protected int x ;

}

}

ومكنه " class " prog" لد ورث الـ class "Programالنمطتان تعن أن الـ

تبت بداخله لكن لس كل البانات، فمط المسموح التعامل مع البانات الت بداخله كؤنها ك

وراثة سنفهم كل شء ، وعندما نصل إلى الإلى اآلن، protectedو public، مثل به

.عنها

Page 143: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

;( )Program p=new Program< --هذه الخطوة

class (Program)نسخة ) كائن ( من هذا الـ تعن أننا أخذنا

p< ----- (object ) كائن

class ----- >Program

Page 144: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

النوع الرابع :

internal – 4

assemplyـ نستطع رإة البانات الت من هذا النوع ف كل ال وه تعن أننا

للبرنامج

namespaceمكن أن تحتوي على أكثر من assemply ـال

assemply--- الـ< ملؾ DLL الـ أو exe

النوع الخامس :

protected internal – 5

جب أن كون الـ لكن assemplyـ نستطع رإة البانات والتعامل معها ف كل ال

class ت بداخله موروث للـ ب ت الذي كclass .الذي سنستخدمها فه

protected internal int x;

Page 145: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

(Static )

تكون ثابتة أي أنه ال staticوكون نوعها classتؽرات والدوال الت بداخل الـ الم

.نفسه classسم الـ عامل معها إال من خالل امكن الت

بدون الحاجة classعندما نرد التعامل مع الدالة أو الحمل خارج الـ staticنستخدم

داخل staticه دالة ( )WriteLineفمثال الدالة ( objectإلى أخذ نسخة منه )

Console والـConsole هو الـclass فعند الخاص بدوال اإلدخال واإلخراج .

.مباشرة بدون أن نؤخذ منه نسخة classإستدعاء هذه الدوال نستخدم اسم الـ

، وأي دالة نرد إستدعائها مباشرة ف staticوالدالة الرئسة جب أن تكون من النوع

ال نستطع static. بإختصار أي نوع staticجب أن تكون staticدالة من النوع

مكن التعامل مع المتؽرات لكن ،آخر staticالتعامل معه مباشرة إال من خالل نوع

عكس خطؤ، لكن ال staticحتى لو لم تكن الدالة ، من خالل الدوال staticالت من نوع

.staticمع دالة نوعها staticأي أننا ال نستطع إستخدام متؽر لس

مثال :

using System;

namespace First_program

{

class Program

{

int x;

static void Main( )

{

x = 10;

Page 146: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

staticخطؤ ألن الدالة من النوع

أضا staticجب أن كون المتؽر staticوطالما الدالة

}

}

}

using System;

namespace First_program

{

class Program

{

static int x;

static void Main( )

{

x = 10;

}

}

}

staticف هذه الحالة جوز إسناد لمة للمتؽر والتعامل معه بشكل طبع ألن نوعه

.staticوالدالة نوعها

using System;

namespace First_program

{

class Program

{

static int x;

void name( )

{

x = 4;

Page 147: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

//من خالل الدالة ف الحالة العادة static جوز إسناد لمة للمتؽر الذي من النوع

}

static void Main( )

{

}

}

}

: مثال

using System;

namespace First_program

{

class A

{

public static int x ;

}

class B

{

public static void variables()

{

A.x = 5 ;

}

}

}

Page 148: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الدوال

(Methods or Functions )

لبل وجود فكرة الدوال كنا ،عن الدوال أو الوظائؾ وما عملها تحدثنا ف ممدمة الكتاب

مرة أخرى فكان جب كتابته ثانة إذا أردنا إستخدام جزء معن من الكود الذي كتبناه

ود مرة معن من الك، فلما ال نكتب جزء ومجهود، فكان ؤخد ولت كلما أحتجنا إله

؟!واحدة ونستخدمه متى أحتجنا إله

؟!ا الكود الذي كتب بداخل الدالةإذا م

تستخدم . والدوال، أي كود نرد تنفذهثر من مرةنكتب الكود الذي نرد إستخدامه أك

لبل وجود البرمجة . وجدت فكرة الدوالوالتعامل معها classإلعطاء لم لخواص الـ

. البرمجة فال مكن اإلستؽناء عنهاوالدوال عامل رئس ف ،التوجه كائنة

ال ( void) ما عدا نوع واحد من الدوال ما كتب بداخلها،أي دالة كون لها لمة عائدة ل

كون لها لمة واحدة مكن إستخدامها معنى لمة عائدة أن الدالة كلها، عد لمة

سنعرؾ طرمة سنفهم معنى المم العائدة بمثال. أوال ، عملات أخرىفوإدخالها

تعرؾ الدالة.

مكننا تسمة الدالة بؤي اسم نرده.

طرمة الوصول) ( + اسم الدالة + الممة العائدة من الدالة +

{

}

Access_Modifier + Return_Type + Name_of_function + ( )

Page 149: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

{

//نكتب الكود داخل الموسن هنا .

}

ها ومن ستطعصالحات إستخدام الدالة، أن نستخدم طرمة الوصول تعن

.إستخدامها

: لد تكون

public , private , protected , internal , protected internal.

اسم الدالة :

مجرد طرق ، هسواء كان متؽر أو دالة classجد طرق لكتابة أسماء أعضاء الـ تو

لكن فضل ها بالشكل الذي نرد،، مكننا التؽاض عن هذه الطرق وكتابتمتعارؾ علها

كتابتها بهذه الطرق.

أول طرمة :

Pascal case - 1

وإذا كانت الكلمة مكونة من ( Capital كون أول حرؾ من االسم حرؾ كبر )

ؾ من الممطع الثان كبر ممطعن فكون أول حرؾ من الممطع األول كبر وأول حر

مثل :

UserName

User_Nameأو

Page 150: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

: ثان طرمة

Camel case – 2

وف هذه الحالة كون أول حرؾ من الممطع األول صؽر و أول حرؾ من الممطع

الثان كبر مثل :

userName

passWord

وهكذا...

ثالث طرمة :

UpperCase – 3

كبرة وتستخدم مع االسماء الت تمتلن حروؾ لللةهذه الحالة تكون كل حروؾ االسم

.مع الثوابتمثل حرفن أو ثالث و

ل :امث

const string NAME = "mahmoud" ;

int GPA;

وهكذا ...

جب أن كون اسم الدالة متصل وال تفصله مسافة فمثال ال نستطع تسمة دالة أو متؽر

user name بهذا الشكل

، وف حالة األسماء الت تتكون من أكثر م وهذا ال جوزتفصل االسد مسافة النه توج

.First_Name... نستخدم ) _ ( فتكون First Nameمن ممطع مثل

تسمة الدالة.نتهنا من أ

Page 151: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

نوع الدالة كون :

int , float , double , long , short , string , char , bool

إذا كانت فمثال نفس نوع الممة العائدة منها كون منهذه األنواع تعن أن نوع الدالة

جب أن تعد نص أو stringإذا جب أن تعد لمة صححة ولو كانت intالدالة

وهكذا... falseأو trueتعد boolجب أن تعد لمة كسرة. float،كلمة

ة بناء هكل الدالة وماذا سنفهم معنى الممة العائدة للدالة لكن مإلتا حاول أن تتعلم كف

خدم.كتب بداخلها وكؾ تست

؟ ا كؾ نستخدمها وكم مرة نستخدمهابعد كتابة الدالة واإلنتهاء منه

ستطع ن، عن طرك إستدعاءها بإسمها فمط ونستدعها بعدد المرات الت نرد

.داخلهاالمكتوب ب إستدعاءها وإستخدامها مالن المرات بدون إعادة كتابة الكود

؟دة عائدة ما عدا نوع واحد فما هواتفمنا أن الدالة كون لها لمة واح

ستطع إستخدامها ف أي ال ترجع أي شء وال كون لها لمة ن voidهذا النوع هو

.الدالة ال نرد منها أي شء آخر عملات أخرى، أي عندما ننته من تنفذ

مالحظة :

".عله "مإلتا ك ب ط . سن سنكتب بداخله الدوال الت نردهاالرئس و classسنستخدم الـ

فوق الجددة مكننا كتابة الدالة وكون بداخله الدالة الرئسة الت بدأ تنفذ الكود منها.

.، ال وجد فرقأو تحتها( Main) الدالة الرئسة

" classب الدوال بداخل " تكت

مثال :

using System; namespace AnyThing { class Program {

Page 152: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

سنكتب كل الدوال هنا static void Main( ) { } } }

هذا هو الشكل الذي سنعمل عله .

مثال:

.Hello Worldأكتب دالة تطبع

، بعدها نكتب الخوارزمات لهذه جب أن نحلل السإال أوال لبل البدء ف كتابة الكود

بطرمة ونحل المسؤلةزمات أي نحدد خطوات الحل خطوة بخطوة المسؤلة " الخوار

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

لنحلل هذه المسؤلة ...

نحتاج لمة لهذه الدالة فما بعد؟ هل سنجري هل Hello Worldنرد إنشاء دالة تطبع

؟ تها ندخلها ف دالة أو متؽر آخرلسمة أو سنؤخذ لم؟ جمع أو طرح أو علها أي عملة

.voidلمة عائدة وستكون نوع الدالة كون لهانحتاج أن فلن ... إذا كان الجواب ال

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

أي اسم viewأو showأو printنسمها مثال ..إذا كانت دالة طباعة مثال الدالة،

نرده فلن حدث هذا فارق ف أي شء.

مالحظة :

ارج إنما خ class، ألننا لن نستخدم الدالة ف تصنع فارق هنا طرمة الوصول لن

أو publicالمكتوبة بداخله فلن فرق ما إذا كانت classسنستخدمها بداخل الـ

private أوprotected الكل سان ف هذا الولت. اتفمنا أن هذا لمجرد التطبك

علم كؾ نستخدمها ف مإلتا فمط وبعدما ننته من تعلم كتابة الدوال والتعامل معها سنت

آخر. classأكثر من

Page 153: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

using System;

namespace ConsoleApplication1

{

class Program

{

public void print()

{

Console.WriteLine("Hello World") ;

}

}

}

؟الخاص بالدالة كؾ سننفذها وأن إذا أنتهنا من كتابة الكود

مكتوب والدالة الرئسة الت بدأ تنفذ classفؤنت تجد visual studioعندما تفتح

.مكتوبة بداخله الكود منها

بواسطة كتابة اسمها ف الدالة الرئسة وبما أن الدالة فنستدع الدالة الت أنشؤناها

أضا حتى staticفجب أن تكون الدالة الت سنكتبها نوعها staticالرئسة نوعها

طرمة أخرى عن طرك إنشاء كائن مكننا إستدعائها ب تستطع الدالة الرئسة رإتها،

وكفة التعامل معه وطرمة classلكن عندما نصل إلى شرح الـ classمن هذا الـ

.classكل طرق التعامل معها بداخل الـ إنشاءه سنتعلم كل شء خص الدوال و

جب أن كون ما سنستدعه بداخلها سواء دالة أخرى أو staticأي دالة نوعها حالا

.staticأي ..متؽر من نفس نوعها

وستم تعرفها بهذا الشكل :

+ الممة العائدة من الدالة + اسم الدالة ) ( } الكود { staticطرمة الوصول +

Access_Modifier + static + Return_Type + Name_of_function + ( )

{ The code }

Page 154: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System;

namespace ConsoleApplication1

{

class Program

{

public static void print()

{

Console.WriteLine("Hello World");

}

static void Main( )

{

print ( ) ;

}

}

}

تم ذهب إلى المكان الذي كتبنا فه كود الدالة وعند كتابة اسم الدالة ونشؽل البرنامج س

.هاتنفذ ما بداخل

Hello Worldسطبع

كنا سنستخدم متؽرات ف هذه الدالة فمكن أن نمرر هذه ف عملة إنشاء الدالة إذا

( ال وجد حد Parametersالمتؽرات للدالة أثناء التعرؾ وتسمى ف هذا الولت )

وهذه ،فمط ما سنستخدمه وما نحتاج إله "parameters " معن لعدد مدخالت دالة

الة حتى تحدث العملة المدخالت عند إستدعاء الدالة سنضطر إلى تمررلمها إلى الد

ختاري لكن هنان بعض الدوال أمر إل للدالة هو دخ وإعطاء م من الدالة، الت نردها

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

لبرد االلكترون وكلمة فمثال عند تسجل الدخول لحساب فس بون فإنن تدخل ا

البانات الت تدخلها تكون مدخل لدالة تفحص كلمة المرور والبرد فهذهالمرور،

االلكترون الخاصن بن المسجلن على لواعد البانات.

Page 155: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

وتم تعرؾ المدخل بالطرمة العادة النه متؽر عادي.

Access_Modifier + static + Return_Type + Name_of_function +

( parameter1,parameter2,…… )

مثال :

دالة لجمع رلمن ثم اطبع ناتج الجمع. انشء

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Print_Sum( int num1 , int num2 )

{

int sum = num1 + num2 ;

Console.WriteLine( sum ) ;

}

static void Main( )

{

int number1 , number2 ;

number1 = int.Parse(Console.ReadLine() ) ;

number2 = int.Parse(Console.ReadLine() ) ;

print( number1 , number2 ) ;

}

}

}

Page 156: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الجمع بداخل الدالة، ثم ف هذا الكود أنشؤنا الدالة وأنشؤنا لها مدخلن وتمت عملة

، لكن الدالة الت أنشؤناها تؤخذ مدخلن لذا جمع الرلمن ف الدالة الرئسة أستدعنا دالة

سنضطر إلى تعرؾ متؽرن وتمررهما إلها ولد أخذنا لم المتؽرات من المستخدم،

الة ذهب وعندما صل المترجم إلى السطر الذي استدعنا به الدعند تشؽل البرنامج

إلى هذه الدالة أا كان مولعها ف الكود ونفذ ما بداخلها.

ف ال نستطع عمل أي عملات علها فال مكن أن ندخلها voidالدالة الت من النوع

دالةى وال نستطع إجراء عملة طباعة علها بإستخدام أي عملة أخر

Console.WriteLine( )

وال نستطع فعل ذلن :

int temp = print( number1 , number2 ) +2;

.ةعائدلمة ال نستطع تمررها إلى متؽر أو فعل أي شء فها ألنها لس لها

؟تج الجمع ونسندها إلى متؽر آخرماذا إذا أردنا أن نستخدم لمة نا

لنحلل المسؤلة ...

ماذا سكون نوع ناتج الجمع؟ intناتج جمع رلمن من النوع

.عدد صحح أضا

.intكون نوع الدالة ف intإذا سكون نوع الممة العائدة من هذه الدالة

ف نهاة الكود returnوجب ف هذه الحالة أن نستخدم الكلمة المحجوزة ف اللؽة

.ةوكل دالة كون لها لمة واحدة فمط عائد تب الممة العائدة من هذه الدالة،نك

return الممة +

ل :مثا

using System; namespace ConsoleApplication1 {

Page 157: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

class Program { public static int Print_Sum( int num1 , int num2 ) { int sum = num1 + num2 ;

return sum ; } static void Main( ) { int number1,number2 ;

number1 = int.Parse(Console.ReadLine( )) ;

number2 = int.Parse(Console.ReadLine( )) ;

int temp = print( number1 , number2 ) + 100 ;

Console.WriteLine( temp ) ;

}

}

}

الدالة كاملة ف intأي الممة العائدة منها intالكود أنشؤنا الدالة وأصبح نوعهاف هذا

ذلن الولت ه عبارة عن لمة واحدة مكن أن نفعل بها أي شء، وأستدعناها ف

، بعد ذلن رفناها وأخذنا لمهم من المستخدمالدالة الرئسة ومررنا لها المدخالت الت ع

ى لمة مررنا الدالة كاملة إلى متؽر، إذا هذا المتؽر حالا حمل لمة الدالة. ثم أضفنا إل

وسضؾ علها سكون ناتج الدالة و ، فمثال إذا أدخل المستخدم لة الدا

. tempالمتؽرثم سضع الممة الجددة ف

ال أن دالة ه لسمة ولست جمع إذا فوجد إحتمتم ف الماذا لو كانت العملة الت ست

لة لنفس نوع الممة العائدة منها. ، فجب أن نؽر نوع الداكون ناتج المسمة عدد كسري

.doubleأو floatأي كون نوعها

Page 158: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مالحظة :

أما إثناء إستدعاء الدالة وتمرر " Parameters " مدخالت الدالة أثناء اإلنشاء تسمى

." Arguments " لم لها فتسمى المدخالت

مثال :

أكتب دالة تؤخذ رلمن ثم تعد الرلم األكبر فهما.

using System;

namespace ConsoleApplication1

{

class Program

{

public static int Max_Value( int num1 , int num2 )

{

if ( num1 > num2 )

return num1;

else if ( num2 > num1 )

return num2 ;

else

return 0 ;

}

static void Main( )

{

int number1 , number2;

number1 = int.Parse(Console.ReadLine( ));

number2 = int.Parse(Console.ReadLine( ));

Console.WriteLine(Max_Value( number1 , number2 ) ;

Page 159: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

}

}

}

تمارن :

أكتب دالة تؤخذ من المستخدم األس واألساس وتخرج الناتج.

= واألس مثال االساس

2= واألس األساس

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Power( int Base_num , int power_num )

{

int result = 1;

for ( int i = power_num ; i > 0 ; i-- )

{

result *= Base_num ;

}

Console.WriteLine( result );

}

static void Main( )

{

int Base = int.Parse(Console.ReadLine( ) );

int Power = int.Parse(Console.ReadLine( ) );

Page 160: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

Power ( Base,Power ) ; // ( 2,6 )

}

}

}

الناتج :

64

Mathسمى classداخل powوتوجد دالة جاهزة بداخل اللؽة تسمى

Math.Pow ( 2 , 6 ) ;

سخرج لن نفس النتجة لكن جب أن تعتمد على نفسن ف مرحلة التعلم وتتعلم كؾ

تنشئ دوال بنفسن .

تمارن :

.ن وجدأكتب دالة تؤخذ رلم من المستخدم وتعد الجذر التربع لهذا الرلم إ

using System;

namespace ConsoleApplication1

{

class Program

{

public static void SQRT( int num )

{

Page 161: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

for ( int i = num ; i > 0 ; i-- )

{

if ( i * i == num )

{

Console.WriteLine ( i );

}

}

Console.WriteLine ( result );

}

static void Main( )

{

int number=int.Parse ( Console.ReadLine ( ) );

SQRT ( number ); // ( 25 )

}

}

}

الناتج :

5

تمارن :

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

.ف تلن المصفوفة

using System;

namespace ConsoleApplication1

{

class Program

{

public static int count_item( int [ ]arr, int num ) {

Page 162: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

int count = 0; for ( int i = 0 ; i < arr.Length ; i++ ) { if ( num == arr [ i ] ) { count++; } } return count; } static void Main( ) { int [ ] x = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 4 , 7 , 9 , 4 , 5 }

int num = int.Parse ( Console.ReadLine( ) );

Console.WriteLine ( " item " + num + " repeated " + count ( x , num ) + " times " );

}

}

}

تمارن :

أكتب دالة لتنفذ العملات الحسابة، تؤخذ الممة األولى والعملة الت تتم سواء ضرب أو

جمع أو لسمة ثم تؤخذ الممة الثانة وتعد ناتج العملة الت ستتم وتحدد من لبل

المستخدم.

using System;

namespace ConsoleApplication1

{

class Program

Page 163: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

static float Math_Operation(float operand1, char operation,

float operand2)

{

float result = 0.0f;

switch ( operation )

{

case '+':

result = operand1 + operand2;

break;

case '-':

result = operand1 - operand2;

break;

case '/':

result = operand1 / operand2;

break;

case '*':

result = operand1 * operand2;

break;

case '%':

result = operand1 % operand2;

break;

}

return result;

}

static void Main( )

{

while ( true )

{

Console.WriteLine("Enter operand1 : operation : operand2 :");

Page 164: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

float op1 = float.Parse(Console.ReadLine( ));

char op = char.Parse(Console.ReadLine( ));

float op2 = float.Parse(Console.ReadLine( ));

Console.WriteLine(Math_Operation(op1 , op , op2));

}

}

}

}

الدوال الت تعد لم مكن تمرر الممة العائدة منها إلى دالة أخرى .

مثال :

using System; namespace ConsoleApplication6 { class Program { static int a(int x , int y) { if (x > y) return x; else return y; } static int b(int x, int y) { return x + y; } static int c(int x, int y) { return x - y; } static int d(int x, int y) { return x * y;

Page 165: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

} static void sum(int a,int b,int c) { Console.WriteLine(a + b + c); } static void Main( ) { sum(a(7, b(3, c(5, d(2,4) ) ) ), 5, 2); } } }

الناتج :

" تؤخذ aدوال، كل دالة لها وظفة مختلفة عن األخرى، فالدالة " ف هذا الكود أنشؤنا

تؤخذ لمتن ثم تعد ناتج جمعهما، والدالة "b"لمتن ثم تعد الممة األكبر فهما والدالة

"cوالدالة " " تؤخذ لمتن وتعد ناتج طرحهماd ،تؤخذ لمتن وتعد ناتج ضربهما "

" تؤخذ ثالث لم وتطبع ناتج جمعهم.sumوالدالة "

وه تؤخذ ثالث لم كما ذكرت، ثم مررنا لها sumأستدعنا الدالة Mainوف دالة الـ

bوالممة األخرى كانت عبارة عن الدالة 7الممة aوبعد ذلن مررنا للدالة aالدالة ومررنا لها الممة cوالممة األخرى كانت عبارة عن الدالة الممة bومررنا للدالة

.و الممتن dومررنا للدالة dوالممة األخرى كانت عبارة عن الدالة

عند تنفذ هذا الكود فإن الدوال الداخلة ه الت تنفذ أوال وبما أن هذه الدوال ذات لمة عائدة فإن كل دالة تعد لمة واحدة فمط. وتكون هذه الممة ه المدخل اآلخر للدالة الت

تسبمها .

إذا تكون الممتان 2ووتعد ناتج ضربهما أي وتؤخذ الممتن dف هذا المثال الدالة

، -ناتج طرحهما فتعد الممة c، ثم تعد الدالة 2و هما cاللتان ممرناهما للدالة

ناتج جمعهما b، ثم تعد الدالة -و ه bوبذلن تكون المم الممررة إلى الدالة

aوتعد الدالة 7ه صفر و aمم الممررة للدالة فتعد الممة صفر، وبذلن تكون ال ، 7الممة األكبر فهما فتعد الممة

(2, 5 , 7 )ه : sumوبذلن تكون المم الت مررت للدالة

وتطبع ناتج جمعهم فكون

Page 166: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ref

من هذه المم وحدث التؽر فها أما المم نمرر لم للدالة فإننا نؤخذ نسخة عندما

.لم حدث بها أي تؽر ولم تتؤثرذاكرة الكمبوتر ساسة ف األ

سبدل المم ا تنفذ عملة تبدل بن لمت متؽرن عن طرك دالة فإنه فمثال إذا أردن

.صلةفمط ولس ف المتؽرات األ ةلكن سبدلها ف النسخ

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Swap( int num1 , int num2 )

{

int temp=num1;

num1=num2;

num2=temp;

}

static void Main( )

{

int number1 = 10 , number2 = 20;

Swap ( number1 , number2 ) ;

Console.WriteLine("number1 = " + number1);

Console.WriteLine("number2 = "+number2);

}

}

}

Page 167: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

: الناتج

number1 = 10;

number2 = 20;

. لكن ماذا لو أردت إحداث فمط ف المم ألننا ؼرنا ف النسخلن حدث أي تبدل فعل

؟ الذاكرة تؽر فعل ف المتؽرات األصلة ف

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

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Swap( ref int num1 ,ref int num2 )

{

int temp = num1;

num1 = num2;

num2 = temp;

}

static void Main( )

{

int number1 = 10 , number2 = 20;

Swap ( ref number1 , ref number2 ) ;

Console.WriteLine("number1 = " + number1);

Console.WriteLine("number2 = "+number2);

}

}

}

Page 168: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الناتج :

number1 = 20;

number2 = 10;

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Swap( ref int num1 ,ref int num2 )

{

num1 = 40 ;

num2 = 30 ;

}

static void Main( )

{

int number1=10,number2=20;

Swap ( ref number1 , ref number2 ) ;

Console.WriteLine("number1 = " + number1);

Console.WriteLine("number2 = "+number2);

}

}

}

الناتج :

number1 = 40;

number2 = 30;

Page 169: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

مرجعة ف الدالة والمم لمالمتؽرات ألننا مررنا للمتؽرات المم الجددة لن تإثر ف

.عت ف المتؽرات األصلة ال النسخوض

تمارن :

using System;

namespace ConsoleApplication1

{

class Program

{

public static int Swap( ref int num1 )

{

num1 = num1*num1 ;

return num1;

}

static void Main( )

{

int number1 = 10;

Swap ( ref number1 ) ;

Console.WriteLine("number1 = " + number1);

}

}

}

الناتج :

number1 = 100

Page 170: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

out

ة أخرى أو أي مكان ف وأردنا إستدعاء هذه الدالة ف دالمدخلن و إذا أنشؤنا دالة تؤخذ

ومررنا متؽرات للدالة ف االستدعاء لكننا لم نعط لم لهذه المتؽرات ونرد الكود،

، ف الحالة العادة هذا ال جوز وجب أن نعط لم أن نؤت بالمم من الدالة نفسها

المتؽرات لم بتدائة ف لدالة حت إذا أدخلنا لهذه للمتؽرات الت سنمررها كمدخالت ل

الدالة.

إلستخدام المم الت أستخدمناها ف الدالة جب أن نحدد له أنه سؤت بمم لمدخالت

.الدالة من الدالة نفسها

Page 171: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

مثال :

using System;

namespace ConsoleApplication1

{

class Program

{

public static void fun_name( out int num1 ,out int num2 )

{

num1 = 200 ;

num2 = 100 ;

}

static void Main( )

{

int number1 , number2;

fun_name( out number1 , out number2 ) ;

Console.WriteLine("number1 = " + number1);

Console.WriteLine("number2 = "+number2);

}

}

}

الناتج :

number1 = 200

number2 = 100

فإنه ستجاهلها وستخدم المم الخارجة number1 , number2 ـحتى لو أدخلنا لم ل

الت تؤت من الدالة.

Page 172: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

using System;

namespace ConsoleApplication1

{

class Program

{

public static void fun_name( out int num1 ,out int num2 )

{

num1 = 200 ;

num2 = 100 ;

}

static void Main( )

{

int number1 = 60 , number2 = 30 ;

fun_name ( out number1 , out number2 ) ;

Console.WriteLine("number1 = " + number1);

Console.WriteLine("number2 = "+number2);

}

}

}

الناتج :

number1 = 200

number2 = 100

ref .تتطلب أن تدخل لم للمتؽرات الت ستمررها للدالة لحظة اإلستدعاء

Page 173: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

الذي تحت المتؽرن لحظة إسنادهما للدالة عن أنه جب أن نعط لهما لم ولت الخط

تعرفهما.

مثال :

.لة المضروب لرلم دخله المستخدمأكتب دالة لتنفذ عم

: ـمثال لمضروب ال

* * * =

Page 174: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

using System; namespace ConsoleApplication1 { class Program { public static void factorial ( int num ) { int fact=1; if( num<=0 ) Console.WriteLine( 0 ); else { for(int i=1 ; i<=num ; i++) { fact *= i ; } Console.WriteLine(fact); } } static void Main( ) { int number = int.Parse( Console.ReadLine( ));

factorial(number) ; } } }

Page 175: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

params

( الدالة وعدد parameters) عندما ال نعلم عدد مدخالت paramsتستخدم كلمة

المدخالت ف هذه الدالة عبر عن حجم المصفوفة.

مثال :

using System; namespace ConsoleApplication1 { class Program { public static int Max_Value_in_array ( params int [ ] arr ) { int max=arr*0+ ; for( int i =0 ; i < arr.Length ; i++) if ( arr [ i ] > max ) max = arr[ i ]; return max ; } static void Main( ) {

Console.WriteLine ( Max_Value_in_array ( 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 ) );

} } }

الناتج :

عدد مدخالت الدالة كون ؼر محدود أي مكننا تمرر العدد الذي نرده لكن مع كل 2

المصفوفة ف هذا الكود حجم ، فمثال ضفه زد حجم المصفوفة بممدار مدخل ن

سطبع الممة األكبر ف هذه المصفوفة. و، سكون

Page 176: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

الدالة ذاتية اإلستدعاء

(Recursion function )

وجد نوع من الدوال سمى الدالة العائدة، أي الت تستدعى بداخل نفسها

ذا فجب ، لتستدع نفسها إلى أن تولفها بشرطبداخل نفسها فإنها تظل دالة ستدعت إذا أ

تحدد شرط لها لك تتولؾ.

loop، بدون إستخدام سننفذ نفس برنامج المضروب بها

using System;

namespace ConsoleApplication1

{

class Program

{

public static int factorial ( int num )

{

if( num<=0 )

return 0 ;

else if ( num==1 ) // لتولؾ الدالة عند هذا الرلم

return 1 ;

else

return ( num * factorial(num-1));

}

static void Main( )

{

Page 177: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

int number = int.Parse( Console.ReadLine ( ) );

Console.WriteLine ( factorial ( number ) ) ;

}

}

}

الناتج :

، ألن طرمة voidفال مكن أن كون voidجب أن كون نوع الدالة أي نوع ؼر

كان بداخل نفسها فإذاتستدع نفسها مرة أخرى مل هذا النوع من الدوال هو أنها ع

فإننا لن نستطع عمل أي عملة علها فنحن هنا نحتاج إلى أن نضرب voidنوعها

.من الرلم إلى أن صل الرلم المدخل إلى ونطرح الدالة لمة الرلم ف

الصفر بالسالب فإنها سترجع صفر،فإذا أدخل المستخدم صفر أو لمة ألل من

فإن الدالة سترجع وإذا أدخل

وتستدع نفسها مرة فإنها ستضرب الرلم ؾ لمة الدالة نالص وإذا أدخل رلم

اتج ضرب هذه المم مع بعضها فتكون وتتولؾ وتعد ن ثم ثم أخرى فكون الرلم

.أي * * * لمة الدالة كلها تساوي

مثال :

رلم أكبر حدده المستخدم أضا إلى رلم دخله المستخدمأحسب مجموع األرلام من

.loopبدون إستخدام

إلى مثال من

using System;

namespace ConsoleApplication1

Page 178: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

{

class Program

{

public static int sum ( int start , int end)

{

if( start>end ) // لتولؾ الدالة عند هذا الرلم

return 0 ;

else

return ( start + sum(start+1 , end));

}

static void Main( )

{

int start = int.Parse( Console.ReadLine( ));

int end = int.Parse( Console.ReadLine( ));

Console.WriteLine ( sum ( start , end ) ) ;

}

}

}

مثال :

ل وتخرج أكبر لمة بهذه المصفوفة بدون إستخدام دالة تؤخذ مصفوفة كمدخ أنشء

حلمات تكرار.

using System;

namespace ConsoleApplication19

{

class Program

{

static int max = int.MinValue;

static void fun(int[ ] arr, int low)

Page 179: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

77

{

if (low < arr.Length)

{

if (arr[low] > max)

max = arr[low];

fun(arr, ++low);

}

else

Console.WriteLine(max);

}

static void Main(string[ ] args)

{

int[ ] x = {-123,-565,-3555,-293,234,987,265};

fun(x, 0);

}

}

}

الناتج :

987

ووضعنا به لمة إبتدائة وهذه الممة تؤت من maxف هذا المثال عرفنا متؽر سمى

( وتكون هذه الممة ه أصؽر لمة مكن أن حملها متؽر int.MinValueخالل )

فتراض أن األعداد المتواجدة ف إ، مكنن وضع لمة إبتدائة صفر لكن بintمن النوع

بر من الصفر وكون كون هنان رلم سالب أكالمصفوفة كلها سالبة فف هذه الحالة لن

ثم intوكان من الممكن أن تكون voidالناتج صفر وهذه النتجة خاطئة، ثم أنشؤنا دالة

int، وهذه الدالة تؤخذ مصفوفة نوعها returnمن خالل كلمة maxتعد لمة الـ

ف المصفوفة الت سنعمل علها ودائما ما كون الصفر، indexوتؤخذ أضا أصؽر

شرط الذي نرد أن تتولؾ الدالة عنده، متى تتولؾ الدالة ؟! عندما نصل إلى ونكتب ال

عندما صل إلى آخر lowف المصفوفة أي أن المتؽر الذي سمى indexآخر

index فتكون آخر لمة 7فإنها تتولؾ بعد هذه العملة. فمثال إذا كان حجم المصفوفة

Page 180: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

72

ن نتحمك من المم الموجودة بالمصفوفة ما إذا ، ثم بعد ذل 6ه lowصل إلها المتؽر

إذا ستكون maxأم ال، وأي لمة أكبر من الممة الحالة للـ maxكانت أكبرمن لمة الـ

ه هذه الممة الجددة ثم نستدع الدالة داخل نفسها لكن نجعل المتؽر maxلمة الـ

low حتى نتمل إلى الـ 1زد بممدارindex وهكذا إلى أن كون الشرط الذي له

وتطبع elseالخارج خطؤ وبذلن تتولؾ الدالة عن إستدعاء نفسها وتم تنفذ ما بداخل

.maxآخر لمة وصل إلها المتؽر

مثال :

دالة تؤخذ مصفوفة كمدخل وتخرج أكبر لمة بهذه المصفوفة. أنشء

using System;

namespace ConsoleApplication1

{

class Program

{

public static int Max_Value_in_array ( int [ ] arr )

{

int max=arr*0+ ;

for(int i = 0 ; i < arr.Length ; i++)

arr[i]=int.Parse(Console.ReadLine( ));

for( int i =0 ; i < arr.Length ; i++)

if ( arr [ i ] > max )

max = arr[ i ];

return max ;

}

static void Main( )

{

int * +x=new int*10+ ;

Console.WriteLine ( Max_Value_in_array ( x ) ) ;

}

Page 181: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

79

}

}

مكن للدالة أن تؤخذ مصفوفة وتم التعامل معها بطرمة عادة جدا . تم إدخال المصفوفة

، ف هذه الحالة نحن ال نعلم حجم المصفوفة لذا توجد للدالة مدخل ( Parameterكـ )

دالة فنستخدمها وحنما ننشء المصفوفة ف Length.خاصة إلجاد حجم المصفوفة

ونمررها للدالة جب أن نحدد الحجم وحنها هذه الخاصة ستحسب حجم Mainـ ال

كمدخل Mainدالة ال رر اسم المصفوفة الت أنشؤتها فم المصفوفة ف الدالة بعدها ت

ر اسم المصفوفة فمط.مر ، ن للدالة

تمارن :

أنشء دالة تؤخذ مصفوفتن وتنسخ أحدهما ف األخرى.

using System;

namespace ConsoleApplication1

{

class Program

{

public static void Copy_array ( int [ ] arr ,int * + arr2)

{

for(int i = 0 ; i < arr.Length ; i++)

arr2 * i + = arr * i + ;

}

static void Main( )

{

int [ ]x = new int*10+, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 - ;

int * +y=new int* 10 +;

Copy_array ( x , y ) ;

}

}

}

Page 182: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

(Object , Var , Dynamic )

، سواء كانت نهم إستمبال أي بانات من أي نوعوجد ثالثة أنواع من البانات مك

ن وجد فرق بن ، لككسر أو نص أو حرؾ أو أي نوع آخر البانات رلم صحح أو

.الثالثة أنواع

أول نوع هو :

object

.فمكنه أن ؤخذ بانات من أي نوع( object ) كل أنواع البانات ه عبارة عن

الرئس لكل أنواع البانات وكون ف لاعدة هرم أنواع البانات. classوهو الـ

إجراء أي عملة على ما ال فهم معنى البانات الت بداخله، فال مكنه( object)لكن

.آخرمع متؽر بداخله

مثال :

object x = " aaa " ;

string y = xخطؤ

ال مكن ألي نوع بانات آخر من األنواع المعروفة أن حمل لمة متؽر من النوع

object بانات بداخله لكن ال علم نوعهاألن نوعه عتبر ؼر معلوم، هو فمط حمل .

مثله. لكن ماذا لو أردنا تخزن الممة الت تؤت من objectفال مكنه التعامل إال مع

جب ف ذلن الولت أن نحولها لنفس النوع الذي ستخزن فه، objectمتؽر نوعه

.yإلى نفس نوع الـ x ـفمثال لو أردنا تنفذ نفس العملة السابمة سنضطر إلى تحول ال

Page 183: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

object x = " aaa " ;

string y = ( string ) x ;

. ننا فعل العكس بدون تحوللكن مك

string y = " aaa " ;

object x = y ;

مكنه أن حمل أي نوع آخر.object ـألننا أتفمنا أن ال

ومبل أن نؽر نوع البانات الت بداخله بدون أن حدث خطؤ.

: فمثال

object x = " aa ";

x = 4;

Console.WriteLine( x ) ;

الناتج :

4

إذا كنا ال نعرؾ النوع الراجع objectمكن أن كون الممة العائدة من دالة من النوع

تحددا .

. ف حالة أننا ال نعرؾ الممة الت objectخل أضا أن كون من النوع ومكن للمد

سدخلها للدالة هل ه نص أم حرؾ أم رلم.

using System;

namespace ConsoleApplication1

{

class Program

Page 184: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{

public static object fun ( params object [ ] arr ) { return arr*3+ ; } static void Main( ) { Console.WriteLine ( fun ( 3 , 4 , "aa" , 's' , true , 8 , 1 , 3.44 , 3 , 4 , 5 ) ); } } }

الناتج :

S

عد لمة لذا مكنها أن تحتوي على أي نوع بداخلها، والدالة ت objectالمصفوفة نوعها

فالممة العائدة منها إذا objectما أن المصفوفة نوعها من نفس نوع المصفوفة وب

.object النوع ستكون من

أكتب دالة لطباعة هذه المصفوفة الت أدخلنا فها البانات سابما .

using System;

namespace ConsoleApplication1

{ class Program { public static void fun ( params object [ ] arr ) { foreach( object i in arr ) Console.WriteLine ( i ) ; } static void Main( )

Page 185: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{ fun ( 3 , 4 , "aa" , 's' , true , 8 , 1 , 3.44 , 3 , 4 , 5 ) ; } } }

is

ه كلمة محجوزة للتؤكد من نوع البانات .

مثال :

object x =10 ;

objext y = " aa " ;

if ( x is int )

{

Console.WriteLine(" Yes ");

}

ألن الشرط صحح. ifف هذا المثال سنفذ جملة الطباعة الت بداخل

: إذا لولناأما

if ( x is string )

{

Console.WriteLine(" Yes ");

}

نوع تتؤكد من is، إذا فالكلمة المحجوزة عدد صحح ولس نصا xفلن نفذ ألن المتؽر

.البانات هل هو متطابك أم ال

Page 186: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

var

لكن وجد بعض اإلختالفات بنهم. object ه مثل

ال مكن تؽر الممة الت بداخله لنوع آخر. varفمثال عند تعرؾ متؽر نوعه

مثال :

var x = 3 ;

; " x = " aaaخطؤ

int فهو تعامل مع المتؽرعلى أنه هو مبل نوع واحد فمط فعندما مررنا له الممة

مرر له لمة أثناء تعرؾ المتؽر.وجب أن ن

بدون تمرر لمة له ف مرحلة التعرؾ. varفال جوز أن نعرؾ المتؽر من النوع

خطؤvar x ;

متؽر من عرؾ ف أنه عندما ن objectمكنه أن ؤخذ أي لمة. لكنه تمز عن أن

خر من نفس خله ومكننا أن ندخلها ف متؽر آنوعه فإنه عرؾ نوع الممة الت بدا

.نوعها

مثال :

var x = " aaa " ;

string y = x ;

ومكننا إجراء أي عملة عله طالما أننا نستخدمه مع متؽرات من نفس نوعه.

عه أوال لنفس النوع الجدد.لكن إذا أدخلناه ف متؽر من نوع آخر فجب أن نحول نو

مثال :

var x = 3.4f ;

int y = ( int ) x;

Page 187: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

فإننا float، إذا أردناها أن تكون doubleمالحظة : المم الكسرة كون نوعها تلمائا

بجانب الممة. fنكتب حرؾ

فهو ستخدم لتعرؾ المتؽرات فمط، ال ستخدم لتعرؾ الدوال أو حتى المصفوفات

.بداخل الدوال

dynamic

هو عبارة عن نوع بانات ستطع أن خزن أي شئ بداخله وتستطع أن تؽر لمته

. هذا النوع ال تعرؾ على ما بداخله إال ده وأن تدخله ف أي عملة تردهاألي نوع تر

ولت التشؽل.

dynamic c =" ttt " ;

string s = c + " aaa " ;

c = 6 ;

int n = c-3 ;

Console.WriteLine( s +" "+ n );

الناتج :

tttaaa 3

حتى إذا وجد خطؤ فإنه ال تعرؾ عله إال عند التشؽل ألنه ترجم ما بداخله ف ولت

التشؽل فمط.

مثال :

dynamic x = ' a ' ;

string y = x ;

البرنامج.لن ظهر الخطؤ ف الكود لكنه سظهره عند تشؽل

مكننا أن نستخدمه ف تعرؾ دالة أو مصفوفة بدون مشكلة.

Page 188: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

تمارن :

له برد إلكترون وكلمة سر أو مولع أكتب دالة لتسجل عملة دخول إلى نظام

اعدة البانات هو بإفتراض أن البرد اإللكترون المسجل على ل

[email protected]

mahmoud12345وكلمة السر ه

using System; namespace ConsoleApplication1 { class Program { public static void Login ( string _Email , string _Password ) {

if ( _Email == " [email protected] " && _Password ==" mahmoud12345 ")

Console.WriteLine(" welcome "); else

Console.WriteLine( " invalid data "); } static void Main( ) { string E_Mail = Console.ReadLine ( ); string password= Console.ReadLine ( ); Login ( E_Mail , password ); }

}

}

Page 189: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

27

(Classes )

نشءسنتعلم كؾ ن classـذكرت مسبما نبذة عن البرمجة كائنة التوجه وعن ماهة ال

.classـ ال

من البانات التى نستطع أخذ عدد ؼر محدود نوعنشء فإننا ن classنشء عندما ن

، ولد شرحت مثال لمولع الفس بون، فمثال صفحتن من هذا النوع الواحد النسخمن

كون عند تسجل الدخولالشخصة، و به كل باناتن classالشخصة تكون عبارة عن

class كل شخص كون له باناته الخاصة أي أن كل به دوال لتنفذ عملة الدخول ،

ومألها بباناته الخاصة. class ـشخص لد أخذ نسخة من هذا ال

وكل مستخدم له بانات كنت ترد إنشاء برنامج أو مولع ووجد عله مستخدمونإذا

، كؾ ستربط كل هذه البانات لعمر واالسم وتارخ المالد ...بؤنواع مختلفة مثل ا

؟!م واحدبمستخد

ت البرمجة عامة سهلة ومرنة.هذه التمنة جعل

.عبارة عن كائنتمول أن كل شء هو البرمجة الكائنةتوجد لاعدة ف

طرمة التعرؾ :

ل أن مكن أن نسمه بؤي اسم نرده، لكن فض ، class ـثم اسم ال classنكتب كلمة

class ـر عما موم به هذا الكون اسم عب

class Name

{

}

Page 190: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

22

تلمائا internalتكون class، طرمة الوصول ألي namespaceكتب بداخل و

privateتكون class، والبانات الت تكون بداخل ال publicومكنن تؽره إلى

تلمائا ما لم نؽرها إلى نوع آخر.

؟classإذا ماذا نكتب بداخل ال

ستخدمها، عملة معنة، والمتؽرات الت سننكتب بداخله كل الدوال الت نحتاجها لتنفذ

نستخدمها من خالل الدوال، و privateؼالبا ما تكون class ـبداخل الالمتؽرات الت

تعارؾ علها أن كتب أول حرؾ من اسم الطرمة الم . publicكون نوع الدالة و

class Loginمثل بحرؾ كبر، classـال

مثال :

using System;

namespace ConsoleApplication1

{

class First

{

}

class Program

{

static void Main( )

{

}

}

}

Page 191: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

29

ف classمكننا إنشاإه عن طرك كتابته مباشرة كما فعلت، لكن فضل أن كون كل

صفحة مستملة لك كون شكل الكود منظم وسهل ف المراءة والتعدل.

فتظهر بالمإشر من ضؽطة نذهب إلى اسم المشروع على الفجوال ستودو ثم نضؽط

، هكذا نكون لد enterونسمه ونضؽط class ونضؽط على Addلائمة بها كلمة

.classأنشؤنا

()

Page 192: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

()

بكل البانات الت بداخله " المسموح الوصول إلها class لك نؤخذ نسخة من هذا ال

( object ثم اسم المتؽر، لكن ف هذه الحالة سمى كائن ) class ـفمط " نكتب اسم ال

ولس متؽر.

using System;

namespace ConsoleApplication1

{

class First

{

public int age ;

string name ;

Page 193: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

}

class Program

{

static void Main( )

{

First obj = new First ( );

}

}

}

تبعه لوسن سمى classـ، واسم الجددلخلك كائن newتستخدم الكلمة المحجوزة

constructor " (سنعرؾ ماهو مشد ) "كل ما علن معرفته مإلتا أن الحما ، المشد

وأخذ نسخة منه أو إنشاء كائن جدد منه. classـهذه طرمة تعرؾ ال

فإنه ف ذلن الولت حتوي على كل خواص class( من objectنشء كائن )عندما ن

المسموح له رإتها. class ـهذا ال

( object) الكائن اسممن خالل " class ـنستطع الوصول إلى كل خصائص ال -

) . ( نمطة "متبوعا ب

.بعدها مكننا أن نمرر له الممة

( Object) كائن

classنسخة من الـ

Class

Page 194: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

مثال :

: لموظؾ حمل البانات اآلتة classأكتب

، المرتب ، رلم الموبال "(.)" االسم ، العمر

using System;

namespace ConsoleApplication1

{

class Employee

{

public string Name;

public int Age;

public int Salary;

public string Mobile_number;

}

class Program

{

static void Main( )

{

Employee emp = new Employee( );

emp.Name = " ali " ;

emp.Age = 30 ;

emp.Salary = 3000 ;

emp.Mobile_number = " +201111111111 " ;

}

}

}

بعد ذلن عرفنا الخصائص الت بداخله وإذا أردنا رإتها خارج هذا classأوال أنشؤنا

مسبما ، كما عرفنا publicجب أن كون نوعها class ـال

Page 195: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

ومررنا لم لهذه البانات المجردة. class( من هذا الـ objectثم أخذنا نسخة "كائن" )

ال تحتوي على أنها تكون مجردة أي class ـكما اتفمنا البانات الت تكون بداخل ال

لمة.

this

class ـوتستطع رإة كل ما بداخل ال classـ تستخدم بداخل ال thisالكلمة المحجوزة

لكن class ـفنستخدمها بداخل الدوال الت بداخل ال class ـوتعمل كؤنها كائن من هذا ال

وال تستطع رإة المتؽرات أو staticؼر مسموح إستخدامها بداخل دوال من النوع

.staticالحمول الت تكون من النوع

عد نفس المثال السابك لكن بإستخدام الدوال.سن

using System;

namespace ConsoleApplication1

{

class Employee

{

string Name ;

int Age ;

int Salary ;

string Mobile_number ;

public void add_employee ( string name , int age , int salary ,

string mobile )

{

this.Name = name ;

this.Age = age ;

this.Salary = salary ;

Page 196: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

this.Mobile_number = mobile ;

}

}

class Program

{

static void Main( )

{

Employee emp = new Employee( );

emp.add_employee ( "ali", 30 , 5000 ,

"+201111111111");

إلضافة موظؾ آخر //

emp.add_employee ( "john" , 34 , 6000

,"+201222222222");

وهكذا//

}

}

}

ولك نستطع class ـلك ترى خارج ال publicأنشؤنا دالة وجب أن كون نوعها

أي class ـوبها المدخالت الت سنمرر لم من خاللها لخصائص الالتعامل معها،

للموظؾ كما ف المثال.

ثم أستدعنا الدالة الت تضؾ البانات ومررنا لها class ـبعدها أنشؤنا كائن من هذا ال

المم بشكل مباشر. مكنن أن تؤخذ البانات من المستخدم بؤن تعرؾ متؽرات ف الدالة

الرئسة ثم تؤخذ لم لها من المستخدم ثم تمرر هذه المتؽرات للدالة.

string name = Console.ReadLine( );

int age = int.Parse(Console.ReadLine( ));

int salary = int.Parse(Console.ReadLine( ));

string mobile = Console.ReadLine( );

emp.add_employee ( name , age , salary , mobile );

وهكذا....

Page 197: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

Constructor ( المشيد )

لكنه ال رجع أي بانات class ـسم الهو عبارة عن دالة وكون بنفس ا

.voidوال حتى Stringأو intمثل " Return valueلمة عائدة " أي ال كون له

كتب ف هذه الدالة لم class ـتعمل هذه الدالة تلمائا عندما نؤخذ نسخة من هذا ال

نشاء دائة نرد أن نمررها لمتؽر ما ومن الممكن أن نمرر له مدخالت أثناء اإلتبإ

.constructor ـلأكثر من نوع ل كالدالة تماما ، ووجد

: هوأول نوع

: " التلمائي" defaultـال -

ومكننا إعطاء لم إبتدائة للحمول الت وهذا النوع ال ؤخذ أي مدخالت أثناء اإلنشاء

فإنه classف الـ default constructor، وحتى لو لم نكتب الـ classتكون ف الـ

لمة إبتدائة صفر وللحمول الت من intنشؤ تلمائا ، وعط للحمول الت من النوع

تعبر عن الال شء. null، و nullلم بتدائة ب stringالنوع

طرمة تعرؾ المشد التلمائ :

public + Class_Name( )

{

}

مثال :

class Test

{

public int id ;

public string name;

public Test( )

{

this.id = 1;

this.name = "ali";

Page 198: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

}

}

class Program

{

static void Main( )

{

Test T = new Test( ); // Default constructor.

Console.WriteLine("My id is "+T.id + "and my name is " +

T.name );

// My id is 1 and my name is ali

}

}

( Parameterized constructorsمشيد له مدخالت ) -

فجب تمرر classوهو ؤخذ مدخالت مثل الدالة تماما وعند أخذ نسخة من هذا الـ

مدخالت له حتى تم تنفذه.

طرمة تعرؾ المشد الذي ؤخذ مدخالت :

public + Class_Name( المدخالت )

{

}

مثال :

class Employee

{

string Name ;

int Age ;

Page 199: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

97

int Salary ;

string Mobile_number ;

public Employee( ) // default constructor

{ }

public Employee( string name , int age )

{ // Parameterized constructors

Name = name ;

Age = age ;

}

public void add_employee ( string name , int age ,

int salary,string mobile )

{

this.Name = name ;

this.Age = age ;

this.Salary = salary ;

this.Mobile_number = mobile;

}

}

فإنه عمل تلمائا وطلب منن أثناء تعرؾ class ـهذا المشد عندما تؤخذ نسخة من ال

لم إبتدائة للبانات الت أدخلتها ف المشد أثناء إنشاإه لكن إذا لم تدخل الكائن أن تضع

ه مجرد لم مإلتة وبالطبع هذه المم اإلبتدائة منن أي شء،له مدخالت فلن طلب

دة الت إذا أستدعت الدالة الت تدخل البانات فالبانات الجد فمثال مكنن تؽرها،

، البانات الت بداخل المشد ه مإلتة وتخزن فمط ف حالة ستخزنأدخلتها ه الت

.خرى للمتؽرأنن لم تدخل أي بانات أ

Employee Emp = new Employee ( " Mahmoud ", 30 ) ;

هكذا كون شكل المشد أثناء إستدعاإه أو أثناء تعرؾ كائن جدد.

Page 200: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

92

- (Copy Constructor )

آخر كائن ( Objectإلى ) كائن ( Objectوهذا النوع وظفته ه أنه نسخ لم من )

كمدخل. classكائن أو نسخة من الـ object، وأثناء تعرفه ؤخذ classمن نفس الـ

مثال :

using System;

namespace Copy_Constructor

{

class Program

{

static void Main(string[ ] args)

{

employee e = new employee(10, "John", 3000);

employee em = new employee( e );

em.print( );

// Employee id : 10 , Employee name : John ,

// Employee salary : 3000

}

}

class employee

{

int id;

string name;

int salary;

public employee(int _id, string _name, int _salary)

{

this.id = _id;

this.name = _name;

this.salary = _salary;

}

Page 201: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

99

public employee(employee emp)

{

this.id = emp.id;

this.name = emp.name;

this.salary = emp.salary;

}

public void print()

{

Console.WriteLine(" employee id is : "+id+" \n Employee name :

"+name+" \n Employee salary : "+salary);

}

}

}

Destructor ) الهد ام (

ام عكس المشد، هو أضا عبارة عن دالة تعمل تلمائا بعد إنتهاء البرنامج، ووظفته الهد

،لم ستخدم كائنأو لكن لم عد له حاجة م ستخد أ كائنلم ستخدم أو كائنهدم أي أنه

فور إنتهاء البرنامج دون إستدعاء وال هو عمل .و لس كالمشد تحتاج أن تستدعهوه

واحد فمط. destructorكون له class، وكل ( Access modifierحتاج إلى )

طرمة التعرؾ :

Class_Name ( ) { }~

هذه العالمة ) ~ ( تسمى تلدا .

مثال :

class Employee

{

Page 202: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

string Name;

int Age;

int Salary;

string Mobile_number;

public Employee( ) // default constructor

{ }

public Employee( string name , int age )

{

Name = name ;

Age = age ;

}

public void add_employee ( string name , int age , int salary ,

string mobile )

{

this.Name = name ;

this.Age = age ;

this.Salary = salary ;

this.Mobile_number = mobile ;

}

~Employee ( )

{

GC.Collect( ) ;

}

}

GC.Collect شر إلى--- >Garbage Collector داة الكتاب الذي تحدثنا عنه ف ب

.لعملا ف الجزء الخاص بإطار

Page 203: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( Properties )

get , set

( Accessorsت ) الموصال

لمستخدم وال ستطع تكون محمة ومخفة على ا classالحمول الت تكون بداخل الـ

بدون classمن خارج الـ كنا نرد تمرر لم لهذه الحمول ، لكن ماذا لوالوصول إلها

؟أن نتعامل مع الحمول بشكل مباشر أو بدون دوال

هما عبارة عن كلمتن محجوزتن ف اللؽة حث و getو setف هذا الولت سنستخدم

تمكنن من لراءة البانات get، و لم لهذه الحمول أي للكتابة فمط من وضع setتمكنن

الت تكون بداخل الحمل أي تكون للمراءة فمط.

: وجد ثالثة طرق للوصول إلى هذه الموصالت

Public

Private

Protected

الموصالت تعامل معاملة الدوال.

، من مكنه رإتها ومن ال تمرر لم للحمول ومن ال ستطعفنحن نتحكم من ستطع

مكنه.

Page 204: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

رتب ، فمثال إذا كنت ستدخل لمة لمد الممة الت دخلها المستخدمف تحد setوتستخدم

جنة ف الشهر فؤنت مكنن أن مرتب موظؾ لكن هذه الممة ؼر منطمة مثل

لم ف المدى المطلوب لك المستخدم تتحكم ف مدى المم الداخلة وجب أن دخل

وإذا كان setفالمم تؤت أوال عن طرك " classتخزن بداخل الحمل " المتؽر ف الـ

أو ال setالمم بداخل الشرط خطؤ فلن تخزن ف الحمل، مكنن تحدد شرط لبل إستمبال

.لكن للتؤكد من المم فمط لبل تخزنها تضع شروط، فالشرط لس إضطرارا

مثال :

class Employee { private string Employee_Name ; private int Employee_Age ; private int Employee_Salary ; public string Name { set { Employee_Name = value; } get { return Employee_Name; } } public int Salary { set { if ( value <1000 ) { Console.WriteLine (" invalid data ") ; }

Page 205: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

else { Employee_Salary = value ; } } get { return Employee_Salary ; } } }

معنى الكود أن :

ثم عرفنا فه الحمول ) " األسم ، العمر ، المرتب " ( وطرق classأوال أنشؤنا

لها لم خصائص لك نتعامل مع هذه الحمول ونمرر، ثم أنشؤنا privateالوصول إلهم

.أو نمرأ منها هذه المم

إنشاء الخصائص تبعا للحمول الت نرد الخصائص ) " األسم ، المرتب " ( تم

، وتسمى خاصة لكل حمل على حدة اشر فننشءللمستخدم التعامل معها بشكل ؼر مب

.لك نمزها الخاصة بؤي اسم نرده لكن فضل بؤن تكون باسم لرب من اسم الحمل

س معا ف نف getو setشترط كتابة ، وال ( set , get) تالموصال ثم ننشء

، أو للكتابة فمط getالخاصة، بل مكننا جعل هذا الحمل للمراءة فمط وعندها نستخدم

أو كلهما. setفمط فنستخدم

وه كلمة محجوزة ف اللؽة تؤخذ الممة الت valueنمرر الممة للحمل من خالل كلمة

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

الحمل او المتؽر.

أنشؤنا شرطا لك نتؤكد من الممة الت تؤت من المستخدم هل Salaryف خاصة الـ

ا إذا المطلوب تخزن بداخل الحمل أموف حالة كانت ف المدى ه ف المدى المطلوب

.كانت خارج المدى فال تخزن

.returnنسترجع الممة الت بداخل الحمل من خالل الكلمة المحجوزة getوف

Page 206: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الوراثة

( Inheritance )

أو الوراثة بالمعنى العام هو أن رث الشخص بعض الصفات أو األشاء الخاصة بؤبه

آخر فإنه رث منه classما class، عندما رث كذلن األمر ف البرمجةأحد ألاربه،

الوارث classوصبح الـ classكل الدوال والمتؽرات أو الصفات الخاصة بهذا الـ

.الموروث سمى أب classالـ سمى أبن و

صر علنا الكثر من الولت الس شارب وه تسهل وتخت والوراثة ه من أهم مباديء

بدون الحاجة classما فإننا نستخدم كل شئ بداخل هذا الـ class، فعندما نرث والجهد

الجدد. classإلى كتابتها مرة أخرى ف الـ

مالحظة :

األب ألن عملة التؽلؾ classنرث كل شئ مسموح لنا من لبل الـ

(Encapsulation ) تلعب دورا هاما ف الوراثة فؤنت تحدد من ستطع رإة البانات

آخر classو employeeاسمه class، فمثال وجد آخر ومن ال ستطع classف

managerاسمه

employee وف والوجد به حمل لألسم والعمر والعنوان والمرتب وبعض الد ،

manager إلى بعض الحمول األخرى، فهل سنكرر باإلضافة نحتاج أضا هذه الحمول

؟نفس الحمول

الذي نحتاج الصفات classالوراثة جعلتنا نستؽنى عن هذا التكرار ومكننا وراثة الـ

.لت بداخله ونستخدمها كفما نشاءا

Page 207: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

األبن class، الوراثة المتعددة تعن أن رث الـ ال تدعم الوراثة المتعددة #Cلؽة الـ

آخر. classأكثر من

interfaceلكن وجد شئ آخر عوض هذا المصور سمى

.حما وسنتطرق لفهم هذا المعنى ال

النمطتن ) : ( آخر عن طرك classلـ classتتم وراثة

: مثال

using System ;

namespace ConsoleApplication1

{

Class Employee

{

public string _Name ;

public int _Salary ;

public int _Age ;

public void show_data ( )

{

Console.WriteLine( " Show ");

}

}

Class Manager : Employee

{

public Enter_Data ( string name , int salary , int age )

{

Page 208: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

_Name = name ;

_Salary = salary ;

_Age = age ;

}

public string Mang_name

{

get

{

return _Name ;

}

}

}

class Product : Manager

{

Console.WriteLine(" show product data ");

}

class Program

{

static void Main ( )

{

Manager child = new Manager( ) ;

string n=Console.ReadLine( ) ;

int ag = int.Parse( Console.ReadLine ( ) ) ;

int sal = int.Parse( Console.ReadLine( ) ) ;

child. Enter_Data ( n , sal , ag ) ;

Console.WriteLine ( child.emp_name ) ;

Product p = new Product ( ) ;

الحمول الـخاصة

class Aبالـ

Page 209: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

}

}

}

معنى هذا الكود أن :

class Managerوعرفنا به الحمول الخاصة به ثم أنشؤنا class Employeeأنشؤنا

المستخدم وتضعها ف هذه الحمول ثم وأنشؤنا دالة تؤخذ المم من Employeeوورثنا الـ

.لتعد األسم getأنشؤنا الخاصة

رى كل ما بداخل الـ Productفؤصبح الـ Managerورثنا class Productف الـ

Manager والـclass الذي رثة الـManager فمكننا إستخدام كل الدوال أضا .

.Productمن خالل الـ classesوالحمول الت بداخل هذه الـ

األب الت كون الوصول classاألبن رإة الخواص الت بداخل الـ classمكن للـ

ماعدا protected internalأو internalأو protectedأو publicإلها

private.

فإنه ال مكن protectedاألب من النوع classعندما تكون خواص الوصول ف الـ

.الذي رثه فمط classآخر رإتها سوى الـ classألي

Page 210: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

إخفاء الدالة

class Aوكان وجد ف الـ Bآخراسمه classثم ورثه Aاسمه classإذا كان وجد

فمكنن إنشاء الدالة class Bوترد إنشاء دالة بنفس األسم ف الـ ( )printدالة اسمها

بنفس االسم وكتبت نفس الدالة new، لو لم تستخدم newوإستخدام الكلمة المحجوزة

ف newلن البرنامج أن تستخدم كلمة تحذر وكتب لن حدث خطؤ لكن سظهر لن

األب classاألبن الت تكون بنفس أسم الدالة الت ف الـ classف الـ تكون الدالة الت

.األب وتعمل على الدالة الجددة classحتى تخف الدالة الت ف الـ

مثال :

class A

{

public void print( )

{

Console.WriteLine(" Hello ");

}

}

class B : A

{

void print( ) newpublic

{

Console.WriteLine(" C# ");

}

}

بالكود الذي بداخلها ف A classأما ف حالة أنن أردت إستخدام نفس الدالة الت ف الـ

ثم نكتب بداخل الدالة الكلمة المحجوزة newنكتب نفس الدالة وكلمة class Bالـ

base.print( ) الكلمة المحجوزة ،base تعمل على الـclass تؤخذ نسخة منه ،األب

Page 211: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

"object " أي أنها ترى كل ما بداخل الـclass حمول أو الدوال الت األب ما عدا ال

.privateكون الوصول إلها

مثال :

class A

{

public void print( )

{

Console.WriteLine(" Hello ");

}

}

class B : A

{

void print( ) newpublic

{

base.print( );

}

}

class Program

{

static void Main( )

{

B child = new B( );

child.print( );

}

}

Helloسطبع :

Page 212: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( Interface )

هو عبارة عن حاوة لمجموعة interface، الـ سابما ف الوراثة interfaceذكرنا الـ

بدون كتابةالدوال المكتوب رأسها فمط بدون كتابة جسم الدالة أي الخصائص أو من

لكن عند interfaceمكننا وراثة هذا الـ ، فتكون مجردةسم الدالة ، فمط اكود داخلها

.الدوال كل إستدعاءه تطلب تنفذ وكتابة األكواد بداخل

بجانب publicتلمائا فال جب كتابة publicتكون interfaceطرمة الوصول للـ

.classحتى نستطع رإتها خارج الـ classالدوال لكن نكتبها ف الـ

وه كلمة محجوزة ف interfaceمن خالل الكلمة interfaceمكننا إنشاء الـ

.اللؽة

ف نفس interfaceومكننا أضا وراثة أكثر من interfaceمكننا إنشاء أكثر من

.فهو دعم الوراثة المتعددةالولت

كفة تعرفه :

أن أول حرؾ من اسم الـ interfaceالطرمة المتعارؾ علها ف تعرؾ الـ

interface كون حرؾi ،هذا ؼر ضروري لكنها ثم تبعه بال االسم الذي ترده

.داولة والمتعارؾ علها ف تعرفهالطرق المت

+ اسمه interfaceمكننا كتابة كلمة

interface emp1

{

void print1 ( ) ;

int sum ( int x , int y ) ;

Page 213: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

}

interface emp2

{

void print2 ( ) ;

int multi ( int x , int y ) ;

}

class A : emp1 , emp2

{

public void print2 ( )

{

Console.WriteLine( " employee 2 " ) ;

}

public void print1 ( )

{

Console.WriteLine( " employee 1 " ) ;

}

public int sum ( int x , int y)

{

return x + y ;

}

public int multi ( )

{

return x * y ;

}

}

ثم Addكلمة على ضؽط ط على اسم المشروع ونأو مكننا إنشاإه من خالل الضؽ

Interfaceنختار و New itemنختار

.الت نردونكتب به الدوال

Page 214: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Page 215: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

interface functions

{

void eat( );

void drink( );

}

class Human : functions

{

public void eat( )

{

Console.WriteLine( " eating " ) ;

}

public void drink( )

{

Console.WriteLine(" drinking ");

}

}

interfaceالت أنشئت بداخل الـ classجب تنفذ كل الدوال ف الـ

classستخدام نفس الدالة بنفس األسم ف أكثر من إأنه أمكننا interfaceأهمة الـ

.interfaceوبؤكثر من تنفذ من خالل وراثة الـ

Page 216: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( Polymorphism )

، والمعنى العام لها أننا م البرمجة كائنة التوجهأهم مفاهتعد من polymorphismالـ

آخر بعدد المرات classأو classمكننا إعادة إستخدام الدالة بنفس األسم داخل نفس الـ

.الت نردها

وه تنمسم إلى :

1- OverLoading

شروط ب لكن ،بنفس األسم classه عبارة عن إنشاء أكثر من دالة بداخل نفس الـ

.معنة

وال تؤخذ مدخالت ونرد إنشاء دالة أخرى اسمها printلنفترض أنه توجد دالة أسمها

print ف هذه الحالة جب أن نضؾ لها مدخل واحد على األلل مثلprint ( int x )

ن بنفس ، الدالتااإلستدعاء وال حدث تشتت للمترجمحتى نمزها عن األخرى ف ولت

؟! فرق بنهما األسم فكؾ

لكن عند إضافة ،هولة ألنه لم عرؾ أي منهما تمصدعتبر الدالة الت تستدعها مجفهو

دخل أم المدخل فحنها سذهب إلى ال .ت لصدتها أه الت بم

جددة بنفس األسم فهذا ؼر لكن لن نضؾ مدخل لن نستخدمه بؽرض إضافة دالة

لا ف الكود وما تستخدمه فمط.فع، تضؾ فمط ما تحتاج إله صحح

فمثال إذا كانت ،أما إذا ف حالة أن الدالتن ؤخذان مدخل فجب أن نؽر نوع أحدهما

، intفجب أن كون نوع المدخل ف الدالة الجددة أي نوع ؼر sum ( int x ) الةالد

. longأو doubleأو floatمن الممكن أن كون

Page 217: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

، جب أن وجد classبإختصار ال جب أن كون هنان دالتان متماثلتان ف نفس الـ

.الؾ ف مدخالت أحدهما على األللإخت

.لدالة ال تؤخذ مدخالت overloadingمالحظة : ال تحدث عملة الـ

ف ولت إستدعاء الدالة و فور فتح لوس الدالة أثناء اإلستدعاء فإن برنامج الفجوال

ال تؤخذ مدخالت بنما ستودو وضح لن أنه توجد دالتان بنفس األسم لكن أحدهما

ف حالة أنن أخترت إستدعائها داألخرى تؤخذ مدخل وجب أن تمرر لها المدخل عن

هما من ، ونختار بنأن كون من نفس النوع الذي حددتهوجب مدخل ذإستدعاء من تؤخ

.خالل األسهم ألعلى وألسفل

Page 218: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System ;

namespace ConsoleApplication1

{ class Calculator { public void sum ( int x , int y ) { Console.WriteLine( x + y ); } public void sum ( int x , float y ) { Console.WriteLine( x + y ); } } class Program { static void Main( ) { Calculator ca = new Calculator ( ); ca.sum( 3 , 4 ); ca.sum( 5 , 4.2f );

// . floatألن المدخل fأضفنا حرؾ

} }

}

Page 219: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

2- Overriding

اسمه class، ف حالة وجود دالة ما ف ف الوراثة overrideتتم عملة الـ

employee وورثت هذا الـclass فclass اسمهmanager وترد إنشاء دالة

.overrideبنفس األسم فهذه تسمى managerبداخل

، األب class" ف الدالة الت ف الـ virtualوتستخدم الكلمة المحجوزة ف اللؽة "

.األبن class" ف الدالة الت بنفس األسم داخل الـ overrideوالكلمة المحجوز "

، وجسم م وعدد المدخالت ونوع المدخالت، ف األسن تماما وتكون الدالتان متماثلت

األب أو األبن تكتب به ما تشاء أو classداخل الدالة ف الـ الدالة أو الكود الذي ب

.وظفة الت ترد تنفذها بالدالةال

مثال :

using System ;

namespace ConsoleApplication1

{

class Employee

{

public virtual void print ( )

{

Console.WriteLine ( " Show data of employee " );

}

}

class Manager : Employee

{

public override void print ( )

Page 220: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{

Console.WriteLine( " Show data of manager " );

}

}

class Program

{

static void Main ( )

{

Manager M = new Manager ( );

M.print ( ); // show data of Manager

Employee E = new Employee ( );

E.print ( ); // show data of employee

}

}

}

Page 221: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

( Abstract , Sealed , Partial )

abstract

( وعندما تؤت Methodأو الدالة ) classه عبارة عن كلمة محجوزة تؤت مع الـ

كون class( أو نسخة من هذا الـ objectفال مكننا أن نؤخذ كائن ) classمع الـ

.أخرى classesلك خدم نشءأ .فمط للوراثة

مثال :

using System ;

namespace ConsoleApplication1

{

abstract class Emp

{

public int x ;

}

class Man : Emp

{

public int num

{

set

{

x = value ;

}

get

{

Page 222: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

return x ;

}

}

}

class Program

{

static void Main ( )

{

Emp e = new Emp ( ) ;

خطؤ ، ال نستطع أخذ نسخة منه //

Man m = new Man ( ) ;

m.num = 2 ;

Console.WriteLine( m.num ) ; // سطبع

}

}

}

.ما عدا الوراثةممنوع التعامل المباشر معه ف abstractالذي كون classإذا الـ

:هي الدوال abstractالنوع الثاني الذي يكون

، وتكون الدالة مجردة abstract classتكون أضا بداخل abstractالدالة الت تكون

جب أن class، لكن بشرط أن من رث هذا الـ أس الدالة فمط بدون الكود داخلهاأي ر

. لكن إلى حد ما interface، ه تشبه للـ abstractكتب الكود بداخل هذه الدالة الـ

.interfaceبنما هذا ( method دالة ) ال تخلط بن األثنن ألن تلن

overrideاألبن ... نكتب نفس رأس الدالة ونكتب classوعند كتابة كود الدالة ف الـ

.ثم نكتب الكود abstractعوضا عن

: abstractو virtualالفرق بن

Page 223: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

virtual : كود الدالة الت تكون جب أن نكتبvirtual أي ال تكون دالة مجردة.

abstract جب أال نكتب كود الدالة الت تكون :abstract أي تكون مجردة.

مثال :

using System ;

namespace ConsoleApplication1

{

abstract class Emp

{

public abstract void print ( ) ; // abstract method

public virtual void view ( ) // virtual method

{

Console.WriteLine( " Hello " ) ;

}

}

class Manager : Emp

{

public override void print ( )

{

Console.WriteLine( " Show " ) ;

}

public override void view ( )

{

Console.WriteLine( " Hi " ) ;

}

}

}

Page 224: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

sealed

فهذا class. عندما تؤت مع الـ ( methodsوالدوال ) classesتؤت مع تعرؾ الـ

، لكن مكننا التعامل معه بطرمة عادة ونستطع classعن أنه ممنوع وراثة هذا الـ

.( objectأخذ نسخ منه أو كائن )

مثال :

sealed class A

{

}

class B : A

{

}

sealedالذي كون classسحدث خطؤ أثناء معالجة الكود ألنه ال مكن وراثة الـ

أما ف حالة الدوال :

لهذه الدالة ف overrideفهذا عن أنه ال مكن عمل sealedفالدالة الت تكون

class آخر.

مثال :

class A

{

public sealed override void print ( )

{

Console.WriteLine( " C# " ) ;

}

}

class B : A

Page 225: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

{

public override void print ( )

{

Console.WriteLine( " Hello " ) ;

}

}

.sealedلدالة overrideسحدث خطؤ أثناء معالجة الكود ألنه ال مكن عمل

آخر أو إعادة classف classأنها تمنع إعادة إستخدام محتوات الـ sealedفائدة

.آخر classإستخدام دالة بنفس األسم ونفس المدخالت ف

partial

وأضؤ مع الـ classesمع الـ partialه كلمة محجوزة ف اللؽة وتؤت كلمة

interface ومعstruct وسنتطرق لشرح الـstruct الحما.

. أي مكننا كتابة على أكثر من ملؾ interface الـ أو classمعناها أنه مكننا تمسم الـ

class بؤسم و class بالطبع هذا ال جوز ف الحالة آخر بنفس األسم وبدوال مختلفة ،

.partialالعادة لكن كون متاحا عندما نستخدم

: classف حالة إستخدامها مع الـ

مكان أو ملؾ مستمل عن اآلخر وبنفس األسم وبدوال مختلفة لكن ف classنكتب كل

واحد أي أنه classفإننا ف هذا الولت نتعامل مع classعند أخذ نسخة من هذا الـ

. معا كل الملفاتف تكون ستدع كل الدوال الت

.interfaceأو الـ classتكتب الكلمة لبل الـ

مثال :

using System ;

namespace ConsoleApplication1

{

Page 226: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

partial class Circle

{

public void Show_Diagonal ( float R )

{

Console.WriteLine( R * 2 ) ;

}

}

partial class Circle

{

public float Circle_Area ( float R )

{

return 3.14f * R * R ;

}

}

class Porgram

{

static void Main ( )

{

Circle c = new Circle ( ) ;

c.Show_Diagonal ( 3.5 ) ;

c.Circle_Area ( 2.3 ) ;

}

}

.ال والحمول الت تكون ف الملفنستظهر كل الدو

.الواحد على أكثر من ملؾ classونستطع كتابة الـ

ه أضا نمسم على أكثر من ملؾ لكن عند وراثة الـ فإن interfaceأما ف حالة الـ

interface فإنه جب أن ننفذ ونكتب كل األكواد للدوال الت بداخل الـinterface

لس ف interfaceالذي ورث الـ class، لكن نكتبها ف الـ الموجودة ف كل الملفات

.كما عرفنا نفسه ألنه ال جوز interface الـ

Page 227: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

partial interface Ifunction

{

void print ( ) ;

}

partial interface Ifunction

{

void view ( ) ;

}

partial interface Ifunction

{

void show ( ) ;

}

class Test : Ifunction

{

public void print ( )

{

Console.WriteLine( " One " ) ;

}

public void view ( )

{

Console.WriteLine( " Two " ) ;

}

public void show ( )

{

Console.WriteLine( " Three " ) ;

}

}

Page 228: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

تمارن :

(. id, name , age , salaryأكتب برنامج لتخزن بانات موظفن )

using System;

namespace Test

{

class employee

{

employee[ ] emp;

int size;

int index;

int id;

int age;

string name;

int salary;

public employee( ){ }

public employee(int size)

{

this.size=size;

index = 0;

emp=new employee[size];

}

public void add_employee(int id,string name,int age,int salary)

{

bool check = false;

for(int i=0;i<index;i++)

{

if(emp[i].id==id)

{

check=true;

break;

وبما أننا سنخزن بانات employeeاسمه classننشء

أكثر من موظؾ أي أكثر من أوبجكت لهذا الكالس فإننا

كلهم من نفس النوع objectsألن الـ arrayسنستخدم الـ

واحد وسنؤخذ منه أوبجكت، فنحدد حجم classأي كلهم

وعرفنا المتؽر ، constructorالمصفوفة من خالل الـ

index حث أنه عبر عن الـindex .الذي سنضؾ بداخله

كون indexهذه دالة اإلضافة حث أن كل

بداخله أوبجكت حمل

id,name,age,salary أي البانات الخاصة

به، وبعدما نضؾ بانات موظؾ جدد نزد

لى المكان الذي لتحرن إ 1بممدار indexالـ

له ف المصفوفة، لكن أوال نتحمك ما إذا كان

موجود مسبما أم ال. idالـ

Page 229: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

}

}

if (check == true)

{

Console.WriteLine(" THis id is exist !! , please use an new id");

}

else

{

emp[index] = new employee();

emp[index].id = id;

emp[index].age = age;

emp[index].name = name;

emp[index].salary = salary;

++index;

}

}

public void search(int id)

{

bool check = false;

int emp_index = 0;

for(int i = 0; i<index ; i++)

{

if(emp[i].id==id)

{

check=true;

emp_index=i;

break;

}

}

if(check==true)

هذه الدالة للبحث عن موظؾ معن من

الخاص به فإذا كان موجود idخالل الـ

فإنها تطبع البانات الخاصة به

Page 230: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{

Console.WriteLine("\t This employee is exist");

Console.WriteLine("\t Employee id : "+emp[emp_index].id);

Console.WriteLine("\t Employee name :

"+emp[emp_index].name);

Console.WriteLine("\t Employee age :

"+emp[emp_index].age);

Console.WriteLine("\t Employee salary :

"+emp[emp_index].salary);

}

else

{

Console.WriteLine("\t \t This employee not exist");

}

}

public void delete(int id)

{

bool check=false;

int emp_index=0;

for(int i=0;i<index;i++)

{

if(emp[i].id==id)

{

check=true;

emp_index=i;

break;

}

}

if (check == true)

{

هذه الدالة لحذؾ بانات موظؾ من

الخاص به idالمصفوفة من خالل الـ

Page 231: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

for (int i = emp_index; i < index - 1; i++)

{

emp*i+ = emp*i + 1+;

}

--index;

}

else

Console.WriteLine("this id not exist");

}

public void print( )

{

for(int i = 0 ; i< index ; i++)

{

Console.WriteLine("\t Employee id : "+emp[i].id);

Console.WriteLine("\t Employee name : "+emp[i].name);

Console.WriteLine("\t Employee age : "+emp[i].age);

Console.WriteLine("\t Employee salary : "+emp[i].salary);

Console.WriteLine( ); Console.WriteLine( );

}

}

}

class Program

{

static void Main( )

{

employee emp = new employee( 5 );

emp.add_employee(1, "aaa", 25, 1500);

emp.add_employee(2, "bbb", 27, 2000);

emp.add_employee(3, "ccc", 32, 4000);

emp.add_employee(4, "ddd", 30, 3500);

هذه الدالة لطباعة بانات كل الموظفن

.Mainلكود ف دالة الـ ثم آخرا نختبر هذا ا

Page 232: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

emp.search(4); // سطبع بانات هذا الموظؾ ألنه موجود

emp.delete(4);

emp.search(4); // حث أنه تم حذفهغير موجودسطبع أن هذا الموظؾ ،

emp.print( );

}

}

}

1,aaa,25,1500 2,bbb,27,2000 3,ccc,32,4000 4,ddd,30,3500

0 1 2 3 4

Page 233: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

(Struct )

لكن توجد بعض ف التعرؾ class، شبه الـ رة عن بناء نوع جدد من الباناتهو عبا

.اإلختالفات بنهما

struct class

ال دعم الوراثة -

ولس value typeكون -

reference type مثل الـclass

، عندما إستخدامه ال تحتاج إلى

. newكلمة

فهو أسرع value typeوبما أنه

inline ألنه خزن classمن الـ

. stackأو بنظام الـ

ال مكن إعطاء لم إبتدائة -

للحمول الت بداخله

public int x = 5 ; هذا ؼر(

.ممبول(

إلنن publicكون كل أعضاإه -

.لو أخفتهم لن تستطع إستخدامهم

للدوال overrideال مكننا عمل -

الت بداخله .

دعم الوراثة -

وعند reference typeكون -

أخذ نسخة منه نستخدم الكلمة

. newالمحجوزة

مكن إعطاء لم إبتدائة للحمول -

الت بداخله

int x = 10 ; ) ممبول (.

Page 234: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

، برنامج classعندما ترد إنشاء برنامج ال حتاج إلى خواص الـ structالـ تستخدم

بناء نوع جدد من البانات. د وربطها ببعضها، وهو ع الباناتتخزن به بعض

مثال :

struct Test

{

public int x ;

public int y ;

public float z ;

}

class Program

{

static void Main( )

{

Test t ;

t.x = 5;

t.y =7 ;

t.z = 9.9f ;

Console.WriteLine( t.x + t.y + t.z ) ;

}

}

:مثال

using System ;

namespace ConsoleApplication1

{

class TestClass

{

public int num1 ;

}

Page 235: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

struct TestStruct

{

public int num2 ;

}

class Program

{

static void Main ( )

{

TestStruct s1 = new TestStruct( ) ;

TestStruct s2 = s1 ;

s1.num2 = 100 ;

s2.num2 = 200 ;

TestClass c1 = new TestClass ( ) ;

TestClass c2 = c1 ;

c1.num1 = 300 ;

c2.num1 = 400 ;

Console.WriteLine( s1.num2 ) ;

Console.WriteLine( s2.num2 ) ;

Console.WriteLine( c1.num1 ) ;

Console.WriteLine( c2.num1 ) ;

}

}

}

الناتج :

100

200

400

400

Page 236: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

فكؤنه ؤخذ نسخة من المم الحممة وؽر بها أما struct الـحمول لم تتؽر المم ف

الـ ف حمول ممال. بنما تؽرت حدث م ف الذاكرة العشوائة لمالتؽر الحمم ف الم

class ألنه عمل بـالـreference )النسخة ر المم األصلة ولستتتؽأي )المرجع

.منها

Page 237: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

(Namespace )

لك namespace مكننا أن نستخدم الـ classesه عبارة عن مجموعة من الـ

ف namespaceتواجد أكثر من ، مكن أنظم الكود أكثر وكون مرتب ومفهومنن

آخر ف classبنفس اسم namespaceف classومكن أن وجد ،نفس المشروع

namespace أخرى.

ثم األسم الذي نرده ونكتب namespaceتم إستخدامها عن طرك الكلمة المحجوزة

.الت نرد classesبداخلها كل الـ

.usingوتم إستدعائها عن طرك الكلمة المحجوز

ه عبارة عن System وكلمة ،using Systemف بداة كل كود نكتب

namespace تحتوي على العدد من الـclasses مثل ،Console تخدمه ف الذي نس

.عملة اإلدخال واإلخراج

( .عن طرك النمطة ) namespaceوتم إستدعاء ما بداخل كل

اإلخراجستدعاء دالة وإ Systemالت بداخل classesفمثال إذا أردنا إستدعاء كل الـ

فكون اإلستدعاء بهذا الشكل : Consoleأضا من

System.Console.WriteLine( ) ;

Page 238: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System ;

using Demo ;

namespace Test

{

class Program

{

static void Main ( )

{

Demo.Prog1 p1 = new Demo.Prog1 ( ) ;

p1.view( ) ;

Asd a = new Asd( ) ;

a.show( ) ;

Prog1 p2 = new Prog1 ( ) ;

p2.view ( ) ;

}

}

class Prog1

{

public void view( )

{

Console.WriteLine( " I'am Namespace Test Class Prog1 " ) ;

}

}

}

namespace Demo

{

class Prog1

{

public void view ( )

Page 239: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

{

Console.WriteLine( " I'am Namespace Demo Class Prog1 " ) ;

}

}

class Asd

{

public void show ( )

{

Console.WriteLine(" I'am Namespace Demo Class Asd " ) ;

}

}

}

ف classلك ذهب إلى الـ Demo.Prog1كتبت Mainف أول سطر داخل دالة الـ

namespaceبنفس األسم ف الـ classالت أحددها ألنه وجد namespaceالـ

الذي كان ف classكان سذهب إلى الـ namespaceفلو لم أحدد الـ ،الرئسة

آخر classال وجد Asdالذي اسمه class، وبما أن الـ الرئسة namespaceالـ

.الت تحتوه namespaceفؤستدعته مباشرة بدون الحاجة إلى تحدد الـ بنفس اسمه

.بنفس الطرمة namespaceكاملة بداخل namespaceمكن أن نكتب

ونستدعها بهذا الشكل :

usingاألولى + namespace( + اسم الـ .الداخلة ) namespaceاسم الـ ;

مثال :

using System ;

using Test1.Test2 ;

namespace Test1

{

class Program

{

Page 240: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

static void Main ( )

{

Console.WriteLine( " Main Function " ) ;

}

}

namespace Test2

{

class Prog2

{

public void Show( )

{

Console.WriteLine( " Hello World " );

}

}

}

}

Page 241: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

تثناءات واألخطاءاإلس

(Errors and Exceptions )

ا العدد ولهأو تحدث ف البرنامج أثناء تشؽله، ه تلن األخطاء الت مع بها المستخدم

فمثال عند لسمة ،كم ف ما سحدث عندما مع أي خطؤلكن مكننا أن نتح ،من األشكال

، أو عند إدخال لمة لمتؽر من نوع دث خطؤأي رلم على صفر فهذا ؼر صحح وسح

أو إضافة لم intمختلؾ عن نوع المتؽر مثل إدخال حرؾ أو نص ف متؽر نوعه

.توجد العشرات من األخطاء ،بداخل مصفوفة أكثر من عدد عناصرها فكل هذه أخطاء

.خطؤ أي نترن مجاال إلحتمالة حدوث جب أن كون الكود تحت تحكمنا الكامل به وال

. try , catchحماة الكود من األستثناءات الت تحدث كون عن طرك :

try

معناها ف حالة catchنكتب بداخلها الكود أو البرنامج المراد تنفذه ودائما ما تبعها

حتى if / elseمكنن أن تشبهها بـ .catchحدوث أي خطؤ أو إستثناء نفذ ما بداخل الـ

.تضح لن كفة عملها فمط

catch

لة حدوث خطؤ تلتمط األخطاء ف حالة حدوثها ومكننا كتبة أي كود نرد تنفذه ف حا .ما

.متتالة catchومكن أن نستخدم أكثر من جملة

Page 242: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

finally

تحت أي ، فما بداخلها سنفذ د تنفذه ف حالة حدوث خطؤ أم النكتب بداخلها كود نر

بعد catch فال شترط كتابتها ف الكود مثل ومكننا كتابتها أو اإلستؽناء عنها،ظرؾ

try.

.حتى نتجنب أي أخطاء try , catchأي كود لنا بدون كتابة جب أال خلو

" namespace " Systemف الـ الخاصة باألخطاء classesتوجد العدد من الـ

مثل :

ظهر لن الخطؤ الذي حدث أثناء

تنفذ البرنامج

Exception

ظهر لن الخطؤ عندما تمسم أي رلم

على صفر

DivideByZeroException

حدث هذا الخطؤ عندما تستدع

دوال كثرة داخل بعضها

StackOverflowException

حدث عندما تمتلئ ذاكرة الكمبوتر

للبرنامجوال وجد مكان ف الذاكرة

OutOfMemoryException

وجود فائض ف العملات الحسابة

أو ف التحول من نوع بانات لنوع

أو إدخال لمة أكبر من حجم آخر .

المتؽر .

OverflowException

حدث عند وجود خطؤ ف البرنامج

أثاء تشؽله

ApplicationException

حدث هذا الخطؤ عندما نوع معامل

الدالة أثناء اإلستدعاء ختلؾ عن

المعامل أثناء إنشاإهنوع

FormatException

Page 243: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

الخاصة classesف فجوال ستودو وسظهر لن كل الـ Exceptionمكنن كتابة

منهم. classلفت بالمإشر علها سظهر لن وظفة كل باألخطاء وإذا و

مثال :

using System ;

namespace ConsoleApplication1

{

class Program

{

static void Main ( )

{

try

{

int x = 5 ;

int y = 0 ;

Console.WriteLine( x / y ) ;

}

catch ( Exception Ex )

{

Console.WriteLine( Ex.message ) ;

}

finally

{

Console.WriteLine( " finished " );

}

}

}

}

Page 244: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

classوأخذنا كائن أو نسخة من الـ catchثم كتبنا tryف ف هذا البرنامج كتبنا الكود

class، هذا الـ سالة الت بداخله عندما حدث خطؤثم نطبع الر Exceptionالذي سمى

تظهر األخطاء األخرى classesشمول أكثر فهو عمل على أي خطؤ حدث بعكس الـ

.الت تعبر عنها فمط

مة على صفر ظهر الخطؤ الذي حدث عند المس DivideByZeroExceptionفمثال

.ظهر أي خطؤ حدث ف البرنامج Exception. أما فما عدا ذلن لن عمل

.سالة خاصة بنوتطبع ر classمكنن أال تؤخذ نسخة من أي

مثال :

try

{

int x = 8 ;

int y = 9 ;

Console.WriteLine( x + y ) ;

}

catch

{

Console.WriteLine( " Error " ) ;

تطبع أي شئ ترده أن ظهر عند حدوث أي خطؤ //

}

Page 245: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System ;

namespace ConsoleApplication1

{

class Program

{

static void Main ( )

{

try

{

int x = 8 ;

int y = 3 ;

Console.WriteLine( x / y ) ;

}

catch ( DivideByZeroException D )

{

Console.WriteLine( D.message ) ;

}

catch (StackOverflowException S )

{

Console.WriteLine( S.message ) ;

}

catch (OverflowException O )

{

Console.WriteLine( O.message ) ;

}

catch (Exception E )

{

Console.WriteLine( E.message ) ;

}

}

}

}

Page 246: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

(Collections )

الت تساعدنا ف التحكم ف classesه عبارة عن مجموعة من الـ Collectionsالـ

خاص بالبانات ، لبل ذلن كان كل شءفة تخزن وإسترجاع هذه الباناتالبانات وك

م.والتعامل معه محك ا ممد

وإذا أكتملت عناصرها فمثال كانت المصفوفة جب أن نحدد لها الحجم أثناء إنشائها

وأنه جب تحدد نوع المصفوفة وتكون كلها وأمتألت فال نستطع إضافة عنصر آخر

أما ف .وهكذا floatأو stringأو intمن نفس النوع أي أنه إما تكون كل العناصر

نستطع إضافة أي عنصر من أي نوع وحجم المصفوفة كون collectionsالـ

.تلمائا كلما أضفنا عنصر جدد ددنامك أي أنه ز

الت تسمى namespaceتستدع الـ جب أن collectionsلك تستخدم الـ

Collections وه موجودة ف الـnamespace " System " .

كون اإلستدعاء بهذا الشكل :

using System.Collections ;

هو : classesأحد هذه الـ

Page 247: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Array List

كلما أضفنا عنصر ازد حجمه " لكن Arrayمصفوفة " خلك classهو عبارة عن

، ومكنه إستمبال أي نوع من البانات دون الحاجة إلى تعرؾ نوعه ومكن بها جدد

ثم العنصر الذي له stringالمزج بن هذه البانات من حث النوع فمكننا إضافة

.بالطرمة العادة class، وتم إستدعاء هذا الـ وهكذا intكون

إذا أردنا إنشاء مصفوفة دنامكة أي تؽر حجمها كلما أضفنا عنصر نستخدم

ArrayList التحكم ف من ونؤخذ منه نسخة ونعمل على الدوال الت بداخله الت تمكننا

.المصفوفة بشكل كامل

أوال طرمة إنشاء مصفوفة دنامكة :

= new ArrayList ( ) ; arr rrayListA

." arrنسخة أي أنشؤنا مصفوفة جددة واسمها " classأخذنا من الـ

constructorومن الممكن أن نحدد حجم المصفوفة أضا من خالل تمرر الممة للـ

وأمتألت وأردت أن 10فعط للمصفوفة لمة إبتدائة فمثال إذا حددت حجم المصفوفة

فه تنشء newتضؾ العنصر جدد سزد حجمها تلمائا وذلن من خالل كلمة

مصفوفة جددة أكبر وتنسخ بها كل بانات المصفوفة المدمة ثم تحذؾ المصفوفة

. الذي عمل تلمائا Garbage Collector بالـالمدمة

.deleteدام كلمة جب أن تحذفها بنفسن بإستخ ++Cبعكس لؽات مثل

تحدد حجم المصفوفة كون كالتال :

ArrayList arr = new ArrayList ( 10 ) ;

Page 248: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

تؤخذ الممة وتضعها كحجم setفه تمثل الـ Capacityأو من خالل الخاصة

المصفوفة كاآلت :

ArrayList arr = new ArrayList ( ) ;

arr.Capacity = 10 ;

". ( )Addإلضافة عنصر ف المصفوفة نستخدم الدالة " -

مثال :

using System ;

using System.Collections ;

namespace Test

{

class Program

{

static void Main ( )

{

ArrayList arr = new ArrayList ( ) ;

arr.Add( " Hello " ) ;

arr.Add( 100 ) ;

arr.Add( ' R ' ) ;

arr.Add( 2,71 ) ;

foreach ( object i in arr )

{

Console.WriteLine( i ) ;

}

}

}

}

فؤحد األؼراض األساسة للـ foreachلعرض محتوات المصفوفة نستخدم -

foreach هو إستخدامها مع الـcollectios وبما أن العناصر الت بداخل المصفوفة .

Page 249: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

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

.dynamicأو varأو objectنحدده بؤنه ، فstringأو int" بنوع مثل iالمصفوفة "

، نستخدم حالة أنن لم تحدد لها حجم معنفة عدد عناصر المصفوفة الحالة فلمعر -

.وترجع حجم المصفوفة getفه تمثل Countالخاصة

سنعمل على نفس المثال السابك :

Console.WriteLine( arr.Count ) ;

عنصر ف مكان محدد ف المصفوفة نستخدم الدالة " ف حالة أنن أردت إدخال -

Insert( ) الذي تحدده للعنصر ولمة العنصر " وهذه الدالة تؤخذ المكان.

arr.Insert( 3 , " Hi " ) ;

، أي أنه وجد حالا ف المصفوفةفعلا موجود لكن جب أن كون المكان الذي تحدده

مكان لعنصر ؼر حددت موضع اإلدخالهذا المكان لبل ذلن ألنن لو عنصر ف

.موجود فسحدث خطؤ

فمثال توجد مصفوفة بها العناصر اآلتة :

true 2.71 R 100 Hello

ألن الترلم ف 4عنصر أكبر من ل ، فال جوز أن تدخل موضع5حجم المصفوفة

.من صفرالمصفوفة بدأ

، لو لم وجد عناصر ف المصفوفة فال مكنن ف حال تواجد عناصر ف المصفوفة هذا

.أكبر من صفر Insertأن تضع مكان للعنصر ف الدالة

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

arr.Insert( 3 , " Hi " ) ;

Page 250: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

بدأ البحث عن الموضع المحدد من المكان صفر إلى أن جده وزد حجم المصفوفة

هذا المكان ستنتمل كل العناصر بممدار عدد العناصر الجددة فإذا كان وجد عنصر ف

. ف الذاكرةف جهة المن الت على منه بممدار خانة واحدة لكل عنصر

فتكون المصفوفة بهذا الشكل :

true 2.71 Hi R 100 Hello

وتؤخذ هذه الدالة ( )RemoveAtلحذؾ عنصر معن من المصفوفة نستخدم الدالة -

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

.واحدة ف جهة السار ف المصفوفةالت على من العنصر المحذوؾ بممدار خانة

arr.RemoveAt( 3 ) ;

Hiستحذؾ

لحذؾ عنصر معن عن طرك لمة العنصر ولس موضعه ف المصفوفة سنستخدم -

.وتؤخذ لمة العنصر فمط ( ) Remove الدالة

Remove( R ) ;

Rسحذؾ الـ

، مكنها ( ) AddRange عناصر ف ولت واحد نستخدم الدالةإلضافة مجموعة من ال -

، رى وتضفها على المصفوفة المدمة، تضاؾ ف آخر المصفوفةأن تؤخذ مصفوفة أخ

.لجددة فمطتؤخذ اسم المصفوفة او

مثال :

object * + test = , 1 , 50 , ' K ' , " XYZ " , 3.14 - ;

arr.AddRange( test ) ;

Page 251: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

وه ( )RemoveRangeلحذؾ مجموعة من العناصر ف ولت واحد نستخدم الدالة -

العنصر الذي ترد أن تؤخذ موضع العنصر الذي ترد أن تبدأ بالحذؾ منه وموضع

.تنته عنده

RemoveRange( 2 , 5 ) ;

.بالترتب إلى ؾ العناصر من حذست

إذا كان عندن مصفوفة وترد نسخ بعض العناصر من مصفوفة أخرى ... تستخدم

GetRange( ) بنسخه وتؤخذ آخر موضع تنته وه تؤخذ موضع أول عنصر تبدأ

. عنده

ArrayList Test = new ArrayList( ) ;

Test=arr.GetRange( 1 , 4 ) ;

" إلى arrف المصفوفة المدمة " إلى الموضع خ العناصر من الموضع ستنس

." Testالمصفوفة الجددة الت تسمى "

.( ) Clearلحذؾ كل عناصر المصفوفة نستخدم الدالة -

arr.Clear( ) ;

Stack

لكنه ختلؾ ArrayListمثل Collectionsداخل الـ classهو عبارة عن stackالـ

ضافة عناصر ف هو مجرد مصفوفة لكنه تعامل بطرق مختلفة إل stack، الـ للال عنه

لة عناصر من آخر المصفوفة وتتم عمالتتم إضافة إخراجها، حث المصفوفة أو

، خرجخر عنصر ضاؾ هو أول عنصر ، أي أن آأضا من آخر المصفوفة اإلخراج

Page 252: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

بانات الت بداخله بطرمة تم عرض الف خرجوأول عنصر ضاؾ هو آخر عنصر

.عكسة

LIFO (Last in First Out )بــ stackوسمى الـ

FILO (First In Last Out )أو

.ا أو من ضاؾ آخرا خرج أوال أي أن من ضاؾ أوال خرج آخر

تظهر لن أوال حثكالبحث ف جوجل stackتعمل معظم التطبمات الضخمة بنظام الـ

البحث آخر ممدمة الفس بون تظهر لن ف تطبك ، كما فآخر عملة بحث لمت بها

. ا مسبما لمت بهبحث عملة

.ا تعمل به الذاكرة المإلتة أضا كم

الشكل اآلت :بوضوح من خالل stackمكنن أن تفهم كفة عمل الـ

( إلى أن ( أوال ثم كرة ) ) ( جب أن تخرج كرة إذا أردت إخراج الكرة )

( . تصل إلى الكرة )

1

3

2

إخراج إدخال

Page 253: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

آخر . classبالطرمة العادة مثل أي stackتم إنشاء الـ

Stack Test = new Stack ( ) ;

.ArrayListومكنن أن تحدد حجمه أثناء اإلنشاء كما الـ

Stack Test = new Stack ( 10 ) ;

.وه تؤخذ لمة العنصر فمط ( )Pushنستخم الدالة stackإلضافة عنصر بداخل الـ -

Test.Push( 12 ) ;

Test.Push(" H ") ;

Test.Push( 2.71 ) ;

Test.Push( False ) ;

foreachنستخدم stackلطباعة ما بداخل الـ

foreach( object i in Test )

Console.WriteLine( i );

ناتج الطباعة :

.فهو عرض باناته بطرمة عكسة stackسبدأ بآخر لمة دخلت ف الـ

- False

- 2.71

- H

- 12

Page 254: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

وال تؤخذ الدالة أي ( )Popثم حذفها منه سنسنخدم الدالة stackعند إخراج لمة من الـ

.حذفهوت stackتخرج آخر عنصر دخل إلى الـ ،مدخالت

Test.Pop( ) ;

.( )Peekبدون حذفها نستخدم الدالة stackإذا أردنا إظهار آخر لمة دخلت ف الـ

Console.WriteLine( Test.Peek( ) ) ;

.( )Clearنستخدم الدالة stackأما لحذؾ كل عناصر الـ -

Test.Clear( ) ;

( )Cotainsنستخدم الدالة stackإذا أردنا التؤكد من وجود عنصر معن ف الـ -

.stackأي العنصر موجود أو ؼر موجود ف الـ falseأو trueوترجع إما

Console.WriteLine( Test.Contains( 12 ) ) ;

stackموجودة ف الـ ألن الـ trueسترجع

Console.WriteLine( Test.Contains( 3 ) ) ;

.stackالـ ؼر موجودة ف ألن الـ falseسترجع

. Countنستخدم الخاصة stackلمعرفة عدد عناصر الـ -

Console.WriteLine( Test.Count ) ;

using System ;

using System.Collections ;

namespace ConsoleApplication1

{

class Program

{

Page 255: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

static void Main( )

{

Stack st = new Stack ( );

st.Push(" Ali ");

st.Push(" Ahmed ");

st.Push(" Mahmoud ");

st.Push(" Khaled ");

st.Push(" Amr ");

Console.WriteLine( st.Count );

foreach( string i in st )

Console.WriteLine( i );

st.Pop( );

Console.WriteLine( st.Count );

foreach( string i in st )

Console.WriteLine( i );

}

}

}

عناصر ثم طبعنا عدد العناصر الموجودة بالـ 5وأدخلنا به stackف هذا الكود أنشؤنا

stack ، ثم حذفنا آخر عنصر دخل إلى الـ ، بدون حذفهابعدها طبعنا كل العناصر

stack صر مرة أخرى ثم طبعنا كل العناصروطبعنا عدد العنا.

.على البرنامجلكود بدون أن تنفذه حاول أن تخرج ناتج هذا ا

Page 256: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Queue

حث أنه stackوهو شبه الـ Collectionsداخل الـ classهو عبارة عن queueالـ

تعامل مع البانات بطرمة مختلفة للال عن الـ queue، ؼر أن الـ مصفوفة أضا

stack.

من أول أو اإلخراج تتم عملة الحذؾتتم إضافة العناصر من آخر المصفوفة و

، وأول عنصر "خرج" خر عنصر ضاؾ هو آخر عنصر حذؾ، أي أن آالمصفوفة

وتم عرض البانات الت بداخله بطرمة عادة "خرج" ضاؾ هو أول عنصر حذؾ

FIFO (First in First Out )بــ queue، وسمى الـ stackولست عكسة مثل الـ

.طابور من ؤت أوال ذهب أوال فهو ببساطة شبه ال .أي أن من ضاؾ أوال خرج أوال

5 4 3 2 1

.لبلها queueأوال ألنه خزن ف الـ 1فجب أن تخرج الـ 2إذا أردت إخراج الـ

.stackتشبه دوال الـ queueمعظم دوال الـ

Pushوه تعادل ( )Enqueueنستخدم الدالة queueإلضافة عناصر داخل الـ -

.stackف الـ

Queue qu = new Queue( );

qu.Enqueue(" A ");

qu.Enqueue( 100 );

qu.Enqueue( 3.7 );

Page 257: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

عناصر بنفس الترتب الذي ، وتخرج الforeachنستخدم queueلطباعة عناصر الـ -

.دخلت به

foreach( object i in qu )

Console.WriteLine( i );

( )Dequeueوحذفه نستخدم دالة queueإلخراج أول عنصر دخل ف الـ -

qu.Dequeue( );

( )Peekبدون حذفه نستخدم دالة queueإلظهار أول عنصر خرج من الـ -

qu.Peek( );

( )Clearنستخدم دالة queueلحذؾ كل عناصر الـ -

qu.Clear( );

ونمرر لها ( )Containsنستخدم دالة queueللتؤكد من وجود عنصر ما داخل الـ -

.الممة الت نبحث عنها

Console.WriteLine( qu.Contains( 100 ) );

.falseأو trueستطبع إما

.Countنستخدم الخاصة queueلمعرفة عدد عناصر الـ -

Console.WriteLine( qu.Count );

Page 258: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

(Generics )

والدوال بدون الحاجة إلى تعرؾ نوعها classesتتح لن إستخدام الـ genericالـ

ومكنن أن داء ف البرنامج أعلى. وهذا جعل األحتى لحظة إدخال لم لهامإلتا

فه متماثلة genericبالـ collectionsخدمتها ف الـ تسالت ا classesتستبدل الـ

. تمربا

نستدع الـ namespaceالموجودة بداخل هذه الـ classesوإلستخدام الـ

namespace : كالتال

using System.Collections.Generic;

< >من خالل هذه العالمة genericتعرؾ الـ

مثل : generic classesتوجد بعض الـ

List< >

ف الـ ArrayList عبارة عن مصفوفة دنامكة تشبه الـ هو classهذا الـ

collections: وتم تعرفها بهذا الشكل ،

List <int> arr = new List <int> ( );

. وتستطع إستمبال بانات intونوعها arrهذا الكود معناه أننا أنشؤنا مصفوفة اسمها

.عناصر أكثر زد حجمها تلمائا . وكلما أدخلنافمط كما حددنا مسبما int من النوع

Page 259: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

إلضافة عنصر لها نكتب :

arr.Add( 5 );

arr.Add( 2 );

لست ضافة إ وبها دوال ArrayListوبها معظم الدوال الت شرحتها مسبما ف الـ

دالة ف ترتب المصفوفة وتستخدم هذه ال ( )Sortمثل ArrayListموجودة ف الـ

.تصاعدا

arr.Sort( );

.هذه الدالة لعكس عناصر المصفوفة وتستخدم ( )Reverseوتوجد بها أضا دالة

arr.Reverse( );

< >Listمثال على الـ

using System ;

using System.Collections.Generic ;

namespace ConsoleApp

{

public class Employee

{

string name ;

string mobile ;

public string _Name

{

get

{

return _Name ;

}

}

Page 260: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

public string _Mobile

{

get

{

return _Mobile;

}

}

public Employee( string name , string mobile )

{

this.name = name;

this.mobile = mobile;

}

public override string ToString()

{

return name+" ( " + mobile + " ) " ;

}

}

class Program

{

static void Main( )

{

List<Employee> emp = new List<Employee>( ) ;

emp.Add( new Employee(" Ahmed ", " 01111111111 " ) );

// Constructor

emp.Add( new Employee(" Ali ", " 01222222222 " ) );

emp.Add( new Employee(" Mohamed ", " 01555555555 " ) );

emp.Add( new Employee(" Khaled ", " 01000000000 " ) );

foreach ( Employee x in emp )

Console.WriteLine( x );

}

Page 261: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

}

}

، األسم ورلم التلفونوبداخله حمل Employeeاسمه classف هذا الكود أنشؤنا

، ثم عملةم التلفون وضع المم ف الحمولؤخذ األسم ورل constructorوأنشؤنا

override للدالةToString علناها وج ،صوصوه دالة جاهزة ف اللؽة لطباعة الن

.ترجع األسم ورلم التلفون

كنوع بانات فهو عد classأي الـ Employeeهو Listوكون نوع الـ Listأنشؤنا و

نستخدم Employeeمن نفس نوع الـ Listولك نستطع إضافة عناصر للـ ،جدد

new ثم نكتب اسم الـconstructor ،وف عملة الطباعة ونمرر له المدخالت

والبانات نوع بانات الذي عد classوكون نوع العداد إما اسم الـ foreachنستخدم

.dynamicأو varأو objectأو نستخدم ع ستكون من نفس نوعه الت ستطب

Stack< >

أول عنصر دخل collection stackبنفس كفة عمل الـ generic stackعمل الـ

المصفوفة هو أول ف المصفوفة هو آخر عنصر خرج منها وآخر عنصر دخل ف

.collection stackـ ال عنصر خرج منها. وبه نفس الدوال الت ف

Stack<int> s = new Stack<int> ( );

s.Push( 10 ) ;

s.Push( 20 ) ;

s.Pop( ) ;

Page 262: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

s.Peek( ) ;

Console.WriteLine( s.Count ) ;

Queue< >

العنصر حث collection queue الـ بنفس كفة عمل generic queueالـ عمل

. وبه نفس الدوال ن دخل آخرا خرج آخرا أوال ومالذي دخل المصفوفة أوال خرج

.collection queueالت ف الـ

Queue <int> q = new Queue <int>( );

q.Enqueue( 1 ) ;

q.Enqueue( 3 ) ;

q.Enqueue( 20 ) ;

q.Dequeue( ) ;

Console.WriteLine( q.Count ) ;

Page 263: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

LinkedList< >

نوعان فردة ومزدوجة LinkedListالـ

( Genericsؼر موجودة ف الـ ) الفردة :

ناصر مرتبطة مع بعضها ، تكون هذه العارة عن سلسلة مترابطة من العناصرعبه

، تكون هذه مكان العنصر اآلخر الذي له إلى شرفكل عنصر من خالل مإشرات

المصفوفة الت تحجز عدد من العناصر مخزنة بطرمة عشوائة ف الذاكرة بعكس

.ماكن ف الذاكرة بطرمة متتالةاال

حاجة إلى تمكننا من اإلضافة أو الحذؾ ف منصؾ السلسلة بدون ال linkedListالـ

" ف عملات Arrayمن المصفوفة " أفضل. لذا فه تبدل أماكن عناصر أخرى

أو المنتصؾ أو نهاة السلسلة، اةمكننا إضافة العناصر ف البدف اإلضافة،الحذؾ أو

أما ف عملات البحث عن عنصر ما فإنه ؤخذ ولت طول ألنه كما للت فعناصرها

نصر خاصة إذا كنت تبحث عن علست متتابعة ف الذاكرة بل إنها مبعثرة ف الذاكرة

. ف منتصؾ السلسلة أو نهاتها

،لى العناصر المخزنة بهاوالوصول إ مصفوفة فه أسرع ف عملات البحثما الأ

بشكل كلما أضفت عنصر تضفه ه ف السلسلة ف ،أبدا ال تمتلء linkedListالـ و

أما المصفوفة جب أن تحدد لها الحجم ولو لم تحدد لها ،مباشر فه لس لها حجم ثابت

المصفوفة خ بها نس مصفوفة جددة بحجم أكبر وت ؤ نش الحجم فإنه كلما تدخل عنصر بها ت

.GC( Garbage collectorؾ المدمة من خالل الـ ) حذ المدمة ثم ت

ال كون لها حجم ثابت فكلما أضفت عنصر بها تشر إله فمط LinkedListأما الـ

ردة كون لها مإشر واحد شر إلىفالسلسلة الف مباشرة ، وعندئذ ضاؾ إلى السلسلة

حتى لكن شرحتها Genericsلت ؼر موجودة ف الـ وه كما ل .العنصر الذي بعده

.السلسلة المزدوجةكفة عمل تستطع أن تفهم

Page 264: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( ستكون بهذا الشكل : 5 , 4 , 3 , 2 , 1لنفترض أنه توجد سلسلة بها هذه العناصر )

null ه كلمة محجوزة ف اللؽة وتعن ال شء، أي أنه ال وجد شء بعد العنصر

األخر ف السلسلة.

head --- .هو مإشر شر إلى أول عنصر ف السلسلة >

tail ---.هو مإشر شر إلى آخر عنصر ف السلسلة >

.nullإشران على head , tailف حالة أن السلسلة ال وجد بها عناصر فكون

وكما نرى كل عنصر شر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر ف

.nullالسلسلة حث شر إلى

( سكون بهذا الشكل : 6ف حالة اإلضافة ف بداة السلسلة إضافة عنصر ) -

إشر عله وبذلن headسنجعله شر إلى أول عنصر ف السلسلة وبعد ذلن نجعل الـ

هو أول عنصر ف السلسلة. 6رتبط بالسلسلة وكون العنصر

1 2 3 4 5

null

6

1 2 3 4 5

null

head

tail

head

tail

Page 265: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ف حالة اإلضافة ف منتصؾ السلسلة أو ف أي موضع آخر بخالؾ البداة والنهاة : -

أوال نحدد الموضع الذي نرد إضافة العنصر فه.

نجعل العنصر الجدد شر إلى العنصر التال للموضع الذي حددناه.

وآخرا نجعل العنصر الذي سبك الموضع المحدد أن شر إلى العنصر الجدد وهكذا

ضاؾ إلى السلسلة.

لو جعلنا العنصر الذي سبك المكان المحدد أن شر أوال على العنصر الجدد ستمع

المحدد. السلسلة من بعد هذا المكان ولن بمى بها سوا العناصر الت تسبك الموضع

1 2 3 4 5

null 6

1 2 3 4 5

null 6

head

tail

head

Page 266: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ف حالة اإلضافة ف النهاة : -

.tailسنجعل آخر عنصر شر إله ثم نإشر عله بـ

ف حالة الحذؾ من البداة ) أول عنصر ( : -

إشر على العنصر الذي ل أول عنصر وبذلن صبح العنصر headسنجعل الـ

هو أول عنصر ف السلسلة headالجدد الذي إشر عله الـ

1 2 3 4 5

null

6

head

tail

1 2 3 4 5

null

6 tail

head

Page 267: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ف حالة الحذؾ من النهاة ) آخر عنصر ( : -

وبذلن صبح هو nullسنجعل العنصر الذي سبك العنصر األخر إشر مباشرة على

.tailآخر عنصر ف السلسلة أي الـ

ف حالة الحذؾ من منتصؾ السلسلة أو أي مكان ف السلسلة بخالؾ البداة والنهاة: -

أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي سبمه شر إلى العنصر

الذي ل العنصر الذي سنحذفه.

( 5 , 4 , 3 , 2 , 1لنفترض أنه توجد سلسلة بها العناصر التالة )

3ونرد حذؾ العنصر

1 2 3 4 5

null

6 tail

head

1 2 3 4 5

null

head

tail

Page 268: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

بما أن الذاكرة تخزن المم بها بطرمة و (، RAMلنفترض أن هذه ه الذاكرة المإلتة )

عشوائة وؼر مرتبة فمكن ان تكون السلسلة بهذا الشكل :

~ ~ ~ ~ 1

~ ~ ~ ~

~ 3 ~

~ ~ ~ ~ 5

~ ~ ~ ~ ~

~ ~ ~ ~

~ 6 ~ ~ ~

~ 4 ~ 2 ~

Page 269: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

:( Double LinkedList) زدوجة مالسلسلة ال

ن لها مإشران ولس ه نفس السلسلة الفردة لكن اإلختالؾ بنهما أن المزدوجة كو

.لبله الذي ر شر إلى، مإشر شر إلى العنصر الذي بعده واآلخمإشرا واحدا

بهذه الطرمة : class ( generic LinkedList ) عرؾ

LinkedList < DataType > Name = new LinkedList < DataType >( ) ;

: intفمثال لو كانت العناصر

LinkedList < int > Link = new LinkedList < int >( );

وه تؤخذ لمة العنصر ( )AddFirstف حالة اإلضافة من البداة نستخدم الدالة -

.فمط

Link.AddFirst( 10 ) ;

وه تؤخذ لمة ( )AddLastف حالة اإلضافة ف نهاة السلسلة نستخدم الدالة -

.العنصر فمط

Link.AddLast( 20 ) ;

.Countلحساب عدد عناصر السلسلة نستخدم الخاصة -

Console.WriteLine( Link.Count ) ;

null 6 2 4

Page 270: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

وتؤخذ لمة العنصر وه ترجع ( )Containsللبحث عن عنصر معن نستخدم الدالة -

true أوfalse.

Console.WriteLine( Link.Contains ( ) ) ;

.وال تؤخذ مدخالت ( )RemoveFirstلحذؾ عنصر من بداة السلسلة نستخدم الدالة -

Link.RemoveFirst( ) ;

.ال تؤخذ مدخالت ( )RemoveLastلحذؾ عنصر من نهاة السلسلة نستخدم الدالة -

Link.RemoveLast( ) ;

، وه تؤخذ العنصر الذي ترد حذفه ( )Removeلحذؾ عنصر معن نستخدم الدالة -

ف السلسلة الذي حمل ولو تكرر العنصر أكثر من مره فإنها تحذؾ أول عنصر تجده

.هذه الممة

: مثال

، 3( وأنت ترد حذؾ الـ 6 , 3 , 5 , 4 , 3 , 2 , 1توجد ف السلسلة هذه العناصر )

.( 6 , 3 , 5 , 4 , 2 , 1تمابلها فتكون السلسلة بهذا الشكل ) 3ستحذؾ الدالة أول

Link.Remove( 3 ) ;

Page 271: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

تمارن :

.بؤولوة الحجزات المرضى والدخول إلستمبال بان برنامج أنشء

using System;

using System.Collections.Generic;

namespace ConsoleApplication2

{

class patient : Ifunctions

{

تعرؾ بانات المرض .

int age;

string name;

string mobile;

int id;

public int Age

{

set{ age = value; }

get{ return age; }

}

public string Mobile

{

set { mobile = value; }

get { return mobile; }

}

Page 272: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

public string _Name

{

set { name = value; }

get { return name; }

}

public int Id

{

set { id = value; }

get{ return id; }

}

public patient( ) { }

public patient( int iD , string N , string M , int A )

{

( إلدخال بانات المرض . constructorمشد )

this.name = N;

this.mobile = M;

this.age = A;

this.id = iD;

}

Queue<patient> P = new Queue<patient>( );

ألنه كما نعرؾ عمل باألولوة فمن حجز أوال Generics Queueأنشؤنا

classهو نفس نوع الـ وكون نوعه .دخل أوال

.ه الت ستخزن به classحث أن بانات الـ

Page 273: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

public void insert( int id , string name , string mobile , int age )

{

المرض .دالة إلدخال بانات

bool check=false;

for ( int i = 0; i < P.Count; i++ )

{

if ( id == P.ElementAt( i ).id )

{

إلرجاع البانات المحددة سواء كانت ( )ElementAtالدالة

(name , id , moblie )

.ةخالل ترلم ) فهرس ( المرض ) العنصر ( ف المصفوفمن

؟ الجدد هل طابك رلم تسلسل لدمفنبحث عن الرلم التسلسل

إذا كان الرلم موجود من لبل فلن تتم عملة إضافة بانات المرض

.ض رلم تسلسل ال تكرر لمرض آخرحث كون لكل مر

check = true;

}

else

check = false;

}

if ( check == true )

{

Console.WriteLine(" this id ( "+id+" ) is exist before , try again ! ");

}

else

Page 274: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

{

P.Enqueue( new patient( id , name , mobile , age ) );

( Enqueueكمدخل للدالة ) constructorلتنفذ الـ newتكتب

constructorفنفذ الـ

.نات الت دخلت إله مدخل للدالةوتكون البا

}

}

public bool Search( int id )

{

. رض من خالل رلمه التسلسلدالة للبحث عن م

bool check = false;

for ( int i = 0; i < P.Count; i++ )

{

if ( P.ElementAt( i ).id == id )

{

check = true;

}

}

return check;

}

Page 275: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

public void delete( )

{

.مرضأول دالة لحذؾ بانات

P.Dequeue( );

}

public void print( )

{

.لطباعة بانات كل المرضىدالة

for ( int i = 0; i < P.Count; i++ )

{

Console.WriteLine("id : " + P.ElementAt( i ).id);

Console.WriteLine("name : " + P.ElementAt( i ).name);

Console.WriteLine("mobile : "+P.ElementAt( i ).mobile );

Console.WriteLine("age : " + P.ElementAt( i ).age);

Console.WriteLine( );

}

}

}

interface Ifunctions

{

void insert( int id , string name , string mobile , int age );

bool Search( int id );

void delete( );

void print( );

Page 276: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

}

class Program

{

static void Main( )

{

try

{

patient pat = new patient( );

int id;

string name;

string mobile;

int age;

while (true)

{

Console.WriteLine("Enter 1 to insert patient data");

Console.WriteLine("Enter 2 to search on patient data");

Console.WriteLine("Enter 3 to delete patient data");

Console.WriteLine("Enter 4 to show all patient data");

Console.WriteLine(); Console.Write("Your choice is : ");

int i = int.Parse(Console.ReadLine( ));

switch ( i )

{

case 1:

Page 277: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

Console.Write(" id : ");

id = int.Parse(Console.ReadLine( ));

Console.Write(" name : ");

name = Console.ReadLine( );

Console.Write(" mobile : ");

mobile = Console.ReadLine( );

Console.Write(" age : ");

age = int.Parse(Console.ReadLine( ));

pat.insert(id, name, mobile, age);

break;

case 2:

Console.Write("\t enter patient id :");

id = int.Parse(Console.ReadLine( ));

Console.WriteLine(pat.Search(id));

Console.WriteLine( );

break;

case 3:

pat.delete( );

break;

case 4:

pat.print( );

break;

Page 278: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

default:

Console.WriteLine(" false choice ");

Console.WriteLine( );

break;

}

}

}

catch( Exception Ex )

{

Console.WriteLine( Ex.Message );

}

}

}

}

Page 279: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

77

هياكل البيانات

(Data structures )

( إنما ه فمط أسالب لتخزن البانات Data structureهاكل البانات )

والـ stackبها بطرق معنة، مثلما تحدثت سابما عن الـ وإستراجعها والبحث عنها وترت

queue هما مصفوفة عادة لكن نحن نتحكم ف طرمة إدخال وإسترجاع البانات وأن

بشكل معن.

( Searchingالبحث )

منها : طرق للبحث عن البانات توجد عدة

( Linear searchالبحث الخطي ) -

فحص كل العناصر من بداة أول عنصر ف المصفوفة إلى وهذه الطرمة تعن أنه تم

وربما كون ؼر موجود ف آخر عنصر بها إلى أن تم إجاد العنصر الذي نبحث عنه

.المصفوفة

عناصر كما ف المثال 10ف مصفوفة مكونة من 16فمثال إذا كنا نبحث عن الممة

." 16 الممة الت نبحث عنها "فستم فحص كل العناصر إلى أن صل إلى التال

100 16 15 9 76 34 8 12 2 4

هذه الطرمة ف البحث ؼر عملة وبطئة ف الحاالت الت تكون فها المصفوفة ذات

برنامج ألل مساحة كبرة جدا ألنه مر على كل عناصر المصفوفة، لذا فتكون كفاءة ال

.ألنه ستهلن ولت أطول

1 0 2 3 4 5 6 7 9 8

Page 280: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

72

مثال :

عنصر وأضؾ لها لم عشوائة ثم أجعل المستخدم 15أنشء مصفوفة مكونة من

.linear searchبإستخدام بها ةمعن لمةبحث عن

using System;

namespace First_program

{

class Program

{

static void Main( )

{

int[ ] arr = new int[ 15 ];

Random r = new Random( );

for ( int i = 0; i < arr.Length; i++ )

{

arr[ i ] = r.Next( ) % 10;

}

bool check = false;

int search = int.Parse(Console.ReadLine( ));

for( int i = 0 ; i <arr.Length ; i++ )

{

if (arr[ i ] == search)

{

Console.WriteLine(" Exist ");

check = true;

break;

}

}

if (check == false)

Console.WriteLine(" Not Exist ");

}

Page 281: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

79

}

}

classوهو عبارة Randomعنصر ثم أستخدمنا 15ف هذا الكود أنشؤنا مصفوفة بها

لتؤت ( )Next( وأستدعنا الدالة objectستخدم لتولد لم عشوائة وأخذنا منه كائن )

" لنحدد المدى الذي ؤت بالمم العشوائة منه، فمثال %لنا بالمم العشوائة وأستخدمنا "

إلى 0سولد لم من 50%فمط، وإذا كانت 10إلى 0فإنه ولد لم من 10%إذا كتبنا

فمط وهكذا، أو مكنن تحدد مدى معن وتختار نمطة البداة والنهاة من خالل 50

.Next( Start_Point , End_Point )الدالة

فمط. 150إلى 100أرلام ف المدى من سولد Next( 100 , 150 )مثل

( Binary searchالبحث الثنائي أو المزدوج ) -

وهو موم على طرمة أنه مسم المصفوفة إلى نصفن ومارن العنصر الذي تبحث عنه

تجاهل كل العناصر بالعنصر الذي كون ف منتصؾ المصفوفة فإذا كان أكبر منه فإنه

األلل منه ونتمل إلى العناصر األكبر من منتصؾ المصفوفة ثم مسمهم إلى نصفن

العنصر الذي تبحث عنه فإذا كان ألل فإنه تجاهل ومارن منتصؾ المصفوفة الجدد ب

صر األلل وظل مسم العناصر وظهرالشك ال به عناصر أكبر ونتمل إلى العنا

ه مرة أخرى مع العنصر الذي نبحث عنه إلى أن صل إله أو أنه ومارنجدد منتصؾ

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

ولو لم تكن مرتبة فجب تكون المصفوفة كبرة، هذا ف حالة أن المصفوفة كانت مرتبة

هذه الطرمة. اترتبها أوال لتعمل عله

مكنن ترتب العناصر بؤي طرمة تعرفها.

classة داخل وه دالة جاهز Sort( array_name )أو مكنن إستخدام الدالة

.ونمرر للدالة اسم المصفوفة المراد ترتبها فمط تستخدم لترتب المصفوفة Arrayالـ

Page 282: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

مثال :

.binary searchبإستخدام 20أبحث عن الممة

األصل المصفوفة منتصؾ

20 >12

27 20 18 16 15 12 8 6 3 1

الجدد المصفوفة منتصؾ

20 >18

27 20 18 16 15

27 20

20

مثال :

using System;

namespace ConsoleApplication3

{

class Program

{

static void Main( )

{

int[ + arr = new int*10+;

Random r = new Random( );

Page 283: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

for ( int i = 0 ; i < arr.Length ; i++ )

{

arr[ i ] = r.Next( 30 , 100 );

}

Array.Sort( arr );

Console.Write(" enter target : ");

int target=int.Parse(Console.ReadLine( ));

int start = 0;

int end = arr.Length - 1 ;

while(start <= end)

{

int mid = (start + end )/ 2;

if( target == arr[mid] )

{

Console.WriteLine("exist");

break;

}

else if( target < arr[mid] )

{

end = mid-1;

}

else

start = mid+1;

}

}

}

}

ترتب

المصفوفة

نمطة البداة

األولى

نمطة النهاة

األولى

منتصؾ

وفةالمصف

Page 284: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

ونمطة النهاة وه ف هذا الكود عرفنا نمطة البداة ومررنا لها لمة إبتدائة صفر

) الترلم ( حث كون آخر index، ألنها تعبر عن الـ 1 نالصتساوي طول المصفوفة

index ثم جئنا بمنتصؾ المصفوفة حث كون مجموع 1طول المصفوفة نالص ،

، ثم نمارن العنصر الذي نبحث عنه بؤول منتصؾ 2نمطت البداة والنهاة ممسوما على

ما عدا ذلن سمارنه هل Existللمصفوفة فإذا كان هو نفس العنصر فتولؾ وطبع

نبحث عنه أكبر من المنتصؾ أو ألل، إذا كان ألل فإنه ستجاهل كل العنصر الذي

العناصر الت أكبر من منتصؾ المصفوفة وتصبح نمطة النهاة الجددة ه منتصؾ

( مإلتا . صفر، ونمطة البداة تظل كما ه ) 1المصفوفة نالص

صر الذي تصؾ جدد للمصفوفة وتحدث عله نفس العملة وإذا كان العنثم خرج من

نبحث عنه أكبر من المنتصؾ الجدد فستكون نمطة البداة الجددة ه المنتصؾ الجدد

، وتكون نمطة النهاة تحتفظ بآخر لمة مررت إلها طالما أن لمتها لم تتؽر. 1زائد

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

المصفوفة.

تؤخذ ولت ألل ألنها ال تمر على كل العناصر ف المصفوفة.وه

Page 285: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

( Sorting) الترتيب

منها : ملة ترتب للبانات ووجد العدد من طرق الترتب،ه عبارة عن ع

- Bubble Sort

تم الترتب بهذه الطرمة من خالل ممارنة كل عنصر بالذي له فإذا كان العنصر الذي

له أصؽر منه فإنه بدل الممتن ببعضهما ثم بدأ ف ممارنة العنصر الثان بالثالث

الممتن وهكذا إلى أن تم ترتب وإذا كان العنصر الثالث أصؽر من الثان فإنه سبدل

سلسلة الت بها البانات وهذه الطرمة ه من أسهل طرق الترتب لكنها المصفوفة أو ال

تؤخذ ولت أطول وال فضل إستخدامها ف حالة البانات الكثرة جدا .

if ( arr[ j ] > arr[ j+1 ] )

swap ( arr[ j ] , arr[ j+1 ] )

9 , 3 , 4 , 23 , 10 , 1 , 5

3 , 9 , 4 , 23 , 10 , 1 , 5

3 , 4 , 9 , 23 , 10 , 1 , 5

3 , 4 , 9 , 23 , 10 , 1 , 5

3 , 4 , 9 , 10 , 23 , 1 , 5

3 , 4 , 9 , 10 , 1 , 23 , 5

3 , 4 , 9 , 10 , 1 , 5 , 23

1

2

3

4

5

6

7

1

j j+1

Page 286: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

3 , 4 , 9 , 10 , 1 , 5 , 23

3 , 4 , 9 , 10 , 1 , 5 , 23

3 , 4 , 9 , 10 , 1 , 5 , 23

3 , 4 , 9 , 10 , 1 , 5 , 23

3 , 4 , 9 , 1 , 10 , 5 , 23

3 , 4 , 9 , 1 , 5 , 10 , 23

3 , 4 , 9 , 1 , 5 , 10 , 23

.لة إلى أن تم ترتب المصفوفةوتظل تتكرر هذه العم

مثال :

.Bubbleبطرمة أكتب برنامج لترتب مصفوفة

using System;

namespace Buuble_Sort

{

class Program

{

static void buuble( int[ ] arr )

{

for (int i = 0 ; i < arr.Length-1 ; i++)

1

2

3

4

5

6

7

2

Page 287: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

{

for (int j = 0; j < arr.Length-1; j++)

{

if (arr[ j ] > arr[ j+1 ])

{

int temp = arr[ j ];

arr[ j ] = arr[ j+1 ];

arr[ j+1 ] = temp;

}

}

}

}

static void Main(string[ ] args)

{

int[ + x = , 5, 6, 2, 4, 1, 9, 3, 0 -;

buuble( x );

foreach ( int i in x )

Console.Write( i +" ");

}

}

}

الناتج :

[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 9 ]

Page 288: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

- Selection Sort

تم الترتب بهذه الطرمة من خالل البحث عن أصؽر عنصر ف المصفوفة أو السلسلة

نبحث عن أصؽر ف المصفوفة لكن نبدأ من ثم وتبدله مع أول عنصر ف المصفوفة

بعد أول موضع ف المصفوفة ألننا بالفعل حصلنا على أصؽر عنصر ف المرة األولى

أن تم وهكذا... إلى وضع الثان ف المصفوفةثم نبدله مع العنصر الذي كون ف الم

ترتب المصفوفة.

* 9 , 3 ,4 , 23 , 10 , 1 , 5 +

9 , 3 , 4 , 23 , 10 , 1 , 5

1 , 3 , 4 , 23 , 10 , 9 , 5

1 , 3 , 4 , 23 , 10 , 9 , 5

1 , 3 , 4 , 23 , 10 , 9 , 5

1 , 3 , 4 , 5 , 10 , 9 , 23

1 , 3 , 4 , 5 , 9 , 10 , 23

1 , 3 , 4 , 5 , 9 , 10 , 23

1

2

3

4

5

6

7

Page 289: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

27

مثال :

.Selectionأكتب برنامج لترتب مصفوفة بطرمة

using System; namespace Selection_Sort { class Program { static void Selection(int[ ] arr) { for (int i = 0; i < arr.Length - 1; i++) { int mini_index = i; for (int j = i + 1; j < arr.Length; j++) { if (arr[ j ] < arr[ mini_index ]) mini_index = j; } int temp = arr[ mini_index ]; arr[ mini_index ] = arr[ i ]; arr[ i ] = temp; } } static void Main(string[ ] args) { int[ + x = , 5, 6, 2, 4, 1, 9, 3, 0 -; Selection( x ); foreach ( int i in x ) Console.WriteLine( i ); } } }

Page 290: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

22

- insertion sort

عملة الترتب بهذه الطرمة بإفتراض أن المصفوفة عبارة عن جزئن، جزء مرتب تتم

ب فها ثم والجزء اآلخر ال، بحث أن أول عنصر ف المصفوفة عد أول جزء مرت

ننتمل إلى العنصر الذي له فإذا كان أصؽر منه فنبدل العنصرن ببعضهما ثم ننتمل إلى

العنصر الثالث ونمارنه ببال العناصر ونضعه ف مكانه الصحح وتم نمل بال

إلى المن خطوة واحدة لكل عنصر، وتتكرر هذه العملة إلى أن الؽر مرتبة العناصر

تم ترتب المصفوفة.

* 9 , 3 ,4 , 23 , 10 , 1 , 5 +

9 , 3 , 4 , 23 , 10 , 1 , 5

3 , 9 , 4 , 23 , 10 , 1 , 5

3 , 4 , 9 , 23 , 10 , 1 , 5

3 , 4 , 9 , 10 , 23 , 1 , 5

1 , 3 , 4 , 9 , 10 , 23 , 5

1 , 3 , 4 , 5 , 9 , 10 , 23

1

2

3

4

5

6

Page 291: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

29

مثال :

.insertionأكتب برنامج لترتب مصفوفة بطرمة

using System;

namespace insertion_sort

{

class Program

{

public static void insertion(int[ ] arr)

{

for (int i = 1; i < arr.Length; ++i)

{

int key = arr[i];

int j = i - 1;

while ( j >= 0 && arr* j ] > key )

{

arr[ j + 1 ] = arr[ j ];

j = j - 1;

}

arr[ j + 1 ] = key;

}

}

static void Main(string[ ] args)

{

int[ + x = , 6 , 7 , 2 , 3 , 5 , 1 , 0 };

insertion( x );

foreach ( int i in x )

Console.WriteLine( i );

}

}

}

Page 292: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

- Merge Sort

تم الترتب بهذه الطرمة من خالل تمسم المصفوفة إلى نصفن وتمسم كل نصؾ

منهما إلى نصفن وهكذا... حتى نحصل على كل عنصر فردي ثم بعد ذلن نعد دمجهم

بهم تستدع نفسها بداخل نفسها ف مرة أخرى لكن بطرمة مرتبة، فتظل الدالة الت ترت

واألمن حتى تم ترتب المصفوفة كاملة.النصؾ األسر

4 9 5 2 3 7 10

10 7 3 2 5 9 4

10 7 3 2 5 9 4

4 9 5 2 3 7 10

4 9 2 5 3 7 10

2 4 5 9 3 7 10

5 7 9 10 2 3 4

Page 293: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

مثال :

.Mergeأكتب برنامج لترتب مصفوفة بطرمة

using System;

namespace Merge_Sort

{

class Program

{

static void merge( int [ ]arr, int left, int middle, int right)

{

int size1 = middle - left + 1;

int size2 = right - middle;

int [ +L = new int *size1+;

int [ +R = new int *size2+;

for (int i = 0; i < size1; ++i)

{

L[ i ] = arr[ left + i ];

}

for (int j = 0; j < size2; ++j)

{

R[ j ] = arr[ middle + 1 + j ];

}

int index1 = 0, index2 = 0;

int k = left;

while (index1 < size1 && index2 < size2)

{

if (L[ index1 ] <= R[ index2 ])

{

arr[ k ] = L[ index1 ];

index1++;

}

Page 294: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

else

{

arr[ k ] = R[ index2 ];

index2++;

}

k++;

}

while (index1 < size1)

{

arr[ k ] = L[ index1 ];

index1++;

k++;

}

while (index2 < size2)

{

arr[ k ] = R[ index2 ];

index2++;

k++;

}

}

static void sort(int [ ]arr, int left, int right)

{

if (left < right)

{

int middle = ( left + right ) /2;

sort(arr, left, middle);

sort(arr , middle+1, right);

merge(arr, left, middle, right);

}

}

Page 295: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

static void Main(string[ ] args)

{

int[ + x = , 10,7,3,2,5,9,4-;

sort(x, 0, x.Length - 1);

foreach( int i in x )

Console.Write( i+" " );

}

}

}

Page 296: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

Stack

طرمة معنة لتخزن البانات وإسترجاعها وال نظام معن أو عبارة عن هو stackالـ

أنها فمثال نفرض ، Linked Listأو Arrayهم ما إذا كانت هذه البانات ستكون بـ

تتم إضافة العناصر من آخر المصفوفة وتتم عملة اإلخراج أضا من آخر مصفوفة، ف

المصفوفة، أي أن آخر عنصر ضاؾ هو أول عنصر خرج، وأول عنصر ضاؾ هو

عكسة، وتعمل موالع آخر عنصر خرج فتم عرض البانات الت بداخله بطرمة

حث أن google , youtube , facebookمثل stackوتطبمات ضخمة بنظام الـ

آخر عملة بحث لمت بها تكون ف لمة عملات البحث.

LIFO (Last in First Out )بــ stackالـ وتم إختصار طرمة

FILO (First In Last Out )أو

أي أن من ضاؾ أوال خرج آخرا أو من ضاؾ آخرا خرج أوال .

1

3

2

إخراج إدخال

Page 297: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

جاهزة ف اللؽة بل سننفذ كل شء عن طرك classesف هذا الجزء لن نستخدم

stackالكود ونعرؾ كفة تنفذ الـ

فارغ stackف حالة أن الـ

وتكون لمته stackنستخدمه ف عملات اإلدخال واإلخراج ف الـ Topالمتؽر

) الترلم ( الذي مؾ عنده. فإذا بدأ index،حث عبر عن الـ 1اإلبتدائة = سالب

أي أنه توجد لمة ف stackترلمه بصفر فذلن معناه أنه مؾ عند أول موضع ف الـ

.1. فجب أن تبدأ لمته بسالب 0الموضع

Top

3

Stack

2

1

0

4

-1

Page 298: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

Stackف حالة إضافة أول عنصر للـ

أوال ثم تضاؾ 1بممدار Topفإنه تزد لمة المتؽر stackوعند إضافة عنصر للـ

.1-ه حجم المصفوفة Topالممة الجددة، وآخر لمة صل إلها الـ

Top

3

Stack

2000

2

1

0

4

-1

Page 299: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

97

stackعند حذؾ عنصر من الـ

1بممدار Topنخرج الممة أوال ثم تنمص لمة المتؽر

إلى العنصر الذي بعده. Topأوال ثم نزل الـ 6000ف هذا المثال ستخرج الممة

stackإلى أن صبح الـ stackتمل كلما أخرجنا عنصر من الـ Topتظل لمة الـ

.1سالب Topفارغ مجددا ، أي تكون لمة الـ

بهذا الشكل :فتكون

Top

3

Stack

2000

4000

3000

6000

5000

2

1

0

4

-1

Page 300: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

92

وهكذا....

مثال :

using System;

namespace ConsoleApplication4

{

class Program

{

static void Main( )

Top 3

2000

4000

3000

5000

2

1

0

4

-1

Stack

Page 301: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

99

{

Stack s = new Stack( 9 );

s.Push(1);

s.Push(7);

s.Push(5);

s.Push(4);

Console.WriteLine(s.Pop( )); // 4

Console.WriteLine(s.Pop( )); // 5

Console.WriteLine(s.Pop( )); // 7

s.Push(2);

Console.WriteLine(s.Pop( )); // 2

Console.WriteLine(s.Pop( )); // 1

Console.WriteLine(s.Pop( )); // stack is empty

}

}

class Stack

{

int top;

int count;

int[ ] arr;

public Stack(int size)

{

top = -1;

count = size;

arr = new int[count];

}

bool is_Empty( )

{

if (top == -1)

return true;

متؽر لحساب عدد

stackعناصر الـ

( Constructorمشد )

، stackؤخذ مساحة الـ

ونضع به الممة اإلبتدائة لـ

Top 1بسالب

دالة تفحص ما إذا كان

فارغ أم ال stackالـ

Page 302: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

else

return false;

}

bool is_Full( )

{

if ( top == count – 1 )

return true;

else

return false;

}

public void Push( int value )

{

if (is_Full( ) == true)

Console.WriteLine(" Stack is full ! ");

else

arr[++top] = value;

}

public object Pop( )

{

if (is_Empty( ) == true)

return " Stack is empty ";

else

return arr[ top - - ];

}

}

}

لبن لن كفة تنفذه فمط، مكنن أن تضؾ به الدوال stackهذا مجرد شكل أول للـ

به كفما تشاء. الت تردها وتعدل

دالة تفحص ما إذا كان

ممتلء أم ال stackالـ

دالة تضؾ عناصر ف الـ

stack فتتؤكد أوال ما إذا كان

ممتلء أم ال، ألنه ال جوز

إضافة عناصر به وهو ممتلء

دالة إلخراج عناصر من الـ

stack فتتؤكد أوال ما إذا كان

فارغ أم ال، ألنه ال جوز إخراج

عناصر منه وهو فارغ

Page 303: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Queue

تعامل مع البانات بطرمة مختلفة للال queueؼر أن الـ stackشبه الـ queueالـ

.stackعن الـ

تتم إضافة العناصر من آخر المصفوفة وتتم عملة الحذؾ أو اإلخراج من أول

ؾ "خرج"، وأول عنصر اؾ هو آخر عنصر حذ المصفوفة، أي أن آخر عنصر ض

بطرمة عادة ؾ "خرج" وتم عرض البانات الت بداخلهاؾ هو أول عنصر حذ ض

FIFO (First in First Out )بــ queue، وسمى الـ stackولست عكسة مثل الـ

أي أن من ضاؾ أوال خرج أوال . فهو ببساطة شبه الطابور من ؤت أوال ذهب أوال .

4 3 2 1

لبلها. queueأوال ألنه خزن ف الـ 1فجب أن تخرج الـ 2إذا أردت إخراج الـ

Topاسمه ستخدم ف عملات اإلدخال واإلخراج stackمثلما كان وجد متؽر ف الـ

متؽرات تستخدم لعملات اإلدخال واإلخراج لكن ف الـ queueفوجد أضا ف الـ

stack اإلدخال واإلخراج كان حدث من نفس المكان فكان له مدخل واحد وأضا

األمر مختلؾ للال حث تدخل queueالمدخل كان نفسه هو المخرج أما ف الـ

البانات من مكان وتخرج من مكان آخر، مكنن أن تشبهه بالطابور، أول شخص

ما ه وهكذا، وإذا أراد شخصخرج من الطابور هو أول شخص ف الطابور ثم الذي ل

وجد مكان للدخول ومكان مختلؾ آخر الطابور، إذا الدخول ف الطابور فإنه مؾ ف

للخروج من الطابور، ف هذه الحالة سنحتاج إلى متؽرن ولس متؽر واحد، متؽر

مسئول عن إدخال العناصر ومتؽر مسئول عن إخراجها.

فه مجرد متؽرات. مكنن تسمة المتؽرات بؤي اسم

Page 304: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

فارغ queueف حالة إذا كان الـ

فارغ. queueفذلن عبر عن أن الـ 1ونعط لهم لم إبتدائة أضا بسالب

إلى أول خانة ف الـ Lastتحرن المتؽر queueعند إضافة أول عنصر ف الـ -

queue وذلن هو أول ترلم ف المصفوفة. 0فتصبح 1أي تزد لمته بممدار

120

ألننا لم نخرج أي لم فظل والؾ خارج 1كما ه سالب Firstتظل لمة المتؽر

.queueالـ

queueعند إضافة عنصر آخر للـ -

15 80 30 50 120

Last

First -1

-1

Last = 0

First -1

Last = 4

First -1

Page 305: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

وهكذا...

Firstوالـ 1نالص queueساوي طول الـ Lastف حالة أن الـ queueمتلء الـ

.1ساوي سالب

0أي تصبح لمته 1بممدار Firstتزد لمة الـ queueعند إخراج عنصر من الـ -

.queueوعندها خرج أول عنصر ف الـ

15 80 30 50

ف كل مرة 1بممدار Firstوعند إخراج عنصر آخر تحدث نفس العملة فتزد لمة الـ

وخرج العنصر التال.

مؾ عند آخر Lastف الحالة العادة ال مكنن أن تضؾ عنصر آخر طالما أن الـ

فارغ. queueحتى إذا كان الـ queueخانة ف الـ

وف هذا النوع تستطع Circular queueسمى queueوجد نوع آخر من الـ

فهو queueمؾ عند آخر خانة ف الـ Lastإضافة عناصر أخرى حتى إذا كان الـ

عود Lastلد خرج فإن الـ queueسعمل بطرمة دائرة فإذا كان أول عنصر ف الـ

نة وضؾ فها.خا أولإلى

Last = 4 First = 0

First = 4

Last = 4

Page 306: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مكنن أن تشبهه بهذا الشكل :

مرة 0إلى Lastف هذه الحالة إذا أردت إضافة عنصر جدد فجب أن ترجع لمة الـ

أخرى

89

80 100 65

19

110

70

35

0

7

10

First = 4

Last = 12

Page 307: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

89

80 100

65

19

17

110

70

35

0

7

10

First = 4

Last = 0

Page 308: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

آخر إلى أن وصل إلى queueج عناصر من الـ ظل خر Firstوأضا ف حالة أن الـ

فإن أضا لمته ترجع إلى صفر ف حالة أنن أردت إخراج queueخانة ف الـ

عناصر أخرى.

دائري مثلما ذكرت : queueنستخدم هذه المعادلة لجعل الـ

Lastف حالة الـ

last = (last + 1) % queue_Length;

Firstف حالة الـ

First = (First + 1) % queue_Length;

أو المصفوفة بشكل عام. queueأي طول الـ queue_Lengthالـ

30

0

7

10

First = 0

Last = 1

Page 309: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

مثال :

using System;

namespace ConsoleApplication4

{

class Program

{

static void Main( )

{

Queue q = new Queue(5);

q.Enqueue(12);

q.Enqueue(5);

q.Enqueue(8);

Console.WriteLine( q.Dequeue());

Console.WriteLine(q.Dequeue());

Console.WriteLine(q.Dequeue());

q.Enqueue(12);

q.Enqueue(10);

Console.WriteLine(q.Dequeue());

}

}

class Queue

{

int first;

int last;

int count = 0;

int length;

int[ ] arr;

متؽر لحساب عدد عناصر

وتزداد لمته queueالـ

كلما أضفنا عنصر وتمل

لمته كلما أخرجنا عنصر

Page 310: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

public Queue(int size)

{

first = -1;

last = -1;

length = size;

arr = new int[ length ];

}

bool is_Empty( )

{

if ( count == 0 )

return true;

else

return false;

}

bool is_Full( )

{

if (count == length)

return true;

else

return false;

}

public void Enqueue( int value )

{

if (is_Full( ) == true)

Console.WriteLine(" Queue is full ! ");

else

{

last = ( last + 1 ) % length;

count++;

( Constructorمشد )

، queueؤخذ مساحة الـ

ونضع به الممة اإلبتدائة لـ

first , last 1بسالب

دالة تفحص ما إذا كان

فارغ أم ال queueالـ

ص ما إذا كان دالة تفح

ممتلء أم queueالـ

ال

دالة إلدخال عناصر ف

queueالـ

Page 311: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

arr[ last ] = value;

}

}

public object Dequeue( )

{

if (is_Empty( )==true)

return " Queue is empty";

else

{

first = ( first + 1 ) % length;

count- - ;

return arr[ first ];

}

}

}

}

دالة إلخراج عناصر

queueمن الـ

Page 312: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

LinkedList

ه عبارة عن سلسلة مترابطة من العناصر، تكون هذه العناصر مرتبطة مع بعضها

مإشرات فكل عنصر شر إلى مكان العنصر اآلخر الذي له، تكون هذه من خالل

العناصر مخزنة بطرمة عشوائة ف الذاكرة بعكس المصفوفة الت تحجز عدد من

االماكن ف الذاكرة بطرمة متتالة.

تمكننا من اإلضافة أو الحذؾ ف منصؾ السلسلة بدون الحاجة إلى linkedListالـ

" ف عملات Arrayكن عناصر أخرى. لذا فه أفضل من المصفوفة " تبدل أما

الحذؾ أو اإلضافة، فمكننا إضافة العناصر ف البداة أو المنتصؾ أو نهاة السلسلة،

أما ف عملات البحث عن عنصر ما فإنه ؤخذ ولت طول ألنه كما للت فعناصرها

ذاكرة خاصة إذا كنت تبحث عن عنصر لست متتابعة ف الذاكرة بل إنها مبعثرة ف ال

ف منتصؾ السلسلة أو نهاتها.

أما المصفوفة فه أسرع ف عملات البحث والوصول إلى العناصر المخزنة بها،

ال تمتلء أبدا ، فكلما أضفت عنصر تضفه ه ف السلسلة بشكل linkedListوالـ

مباشر فه لس لها حجم ثابت، أما المصفوفة جب أن تحدد لها الحجم ولو لم تحدد لها

الحجم فإنه كلما تدخل عنصر بها تنشؤ مصفوفة جددة بحجم أكبر وتنسخ بها المصفوفة

.GC( Garbage Collectorـ ) المدمة ثم تحذؾ المدمة من خالل ال

ال كون لها حجم ثابت فكلما أضفت عنصر بها تشر إله فمط LinkedListأما الـ

وعندئذ ضاؾ إلى السلسلة مباشرة .

Page 313: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

( ستكون بهذا الشكل : 5 , 4 , 3 , 2 , 1لنفترض أنه توجد سلسلة بها هذه العناصر )

null ه كلمة محجوزة ف اللؽة وتعن ال شء، أي أنه ال وجد شء بعد العنصر

األخر ف السلسلة.

head --- >هو مإشر شر إلى أول عنصر ف السلسلة.

tail --- >هو مإشر شر إلى آخر عنصر ف السلسلة.

.nullإشران على head , tailف حالة أن السلسلة ال وجد بها عناصر فكون

كما نرى كل عنصر شر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر ف و

.nullالسلسلة حث شر إلى

( سكون بهذا الشكل : 6ف حالة اإلضافة ف بداة السلسلة إضافة عنصر ) -

وبذلن إشر عله headوبعد ذلن نجعل الـ إلى أول عنصر ف السلسلة سنجعله شر

.ر ف السلسلةهو أول عنص 6 العنصر رتبط بالسلسلة وكون

1 2 3 4 5

null

6

1 2 3 4 5

null

head

tail

head

tail

Page 314: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

آخر بخالؾ البداة والنهاة :ف حالة اإلضافة ف منتصؾ السلسلة أو ف أي موضع -

. الذي نرد إضافة العنصر فه أوال نحدد الموضع

ي حددناه.ذنجعل العنصر الجدد شر إلى العنصر التال للموضع ال

وآخرا نجعل العنصر الذي سبك الموضع المحدد أن شر إلى العنصر الجدد وهكذا

ضاؾ إلى السلسلة.

لو جعلنا العنصر الذي سبك المكان المحدد أن شر أوال على العنصر الجدد ستمع

العناصر الت تسبك الموضع المحدد. بعد هذا المكان ولن بمى بها سوى السلسلة من

1 2 3 4 5

null 6

1 2 3 4 5

null 6

head

tail

head

Page 315: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

ف حالة اإلضافة ف النهاة : -

.tailسنجعل آخر عنصر شر إله ثم نإشر عله بـ

من البداة ) أول عنصر ( : ف حالة الحذؾ -

إشر على العنصر الذي ل أول عنصر وبذلن صبح العنصر headسنجعل الـ

هو أول عنصر ف السلسلة headالجدد الذي إشر عله الـ

1 2 3 4 5

null

6

head

tail

1 2 3 4 5

null

6 tail

head

Page 316: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

حالة الحذؾ من النهاة ) آخر عنصر ( :ف -

وبذلن صبح هو nullسنجعل العنصر الذي سبك العنصر األخر إشر مباشرة على

.tailآخر عنصر ف السلسلة أي الـ

السلسلة أو أي مكان ف السلسلة بخالؾ البداة والنهاة:ف حالة الحذؾ من منتصؾ -

أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي سبمه شر إلى العنصر

الذي ل العنصر الذي سنحذفه.

( 5 , 4 , 3 , 2 , 1لنفترض أنه توجد سلسلة بها العناصر التالة )

3ونرد حذؾ العنصر

1 2 3 4 5

null

6 tail

head

1 2 3 4 5

null

head

tail

Page 317: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

مثال :

using System;

namespace ConsoleApplication5

{

class node

{

public int data;

public node next;

public node(int data)

{

this.data = data;

}

}

class list

{

node head, last;

public void insert_at_last(int data)

{

node n = new node (data);

if (head == null)

{

head = n ;

last = n ;

}

else

{

n.next = null ;

last.next = n ;

last = n ;

}

}

عبر عن العنصر الذي سضاؾ إلى السلسلة classأنشؤنا

ؤخذ البانات كمدخل له وضفها constructorوأنشؤنا به

ف العنصر وعرفنا مإشر وكون من نفس النوع الذي

) عنصر ( فجب nodeسإشر عله وبما أنه سإشر على

class (node )أن كون من نفسه نوعه لذا سكون نوعه

عبر عن السلسلة وسكون به الدوال classأنشؤنا

وكون head, lastالخاصة بالسلسلة وعرفنا المإشر

من نفس النوع الذي سإشر عله وبما أنه سإشر

) عنصر ( فجب أن كون من نفسه nodeعلى

فالعنصر الواحد ال nodeنوعه لذا سكون نوعه

وجد به بانات فمط بل وجد به أضا مإشر إشر

على العنصر ال له.

أنشؤنا دالة اإلضافة من النهاة وتؤخذ البانات، ف

headحالة أن السلسلة ال وجد بها عناصر أي أن الـ

الذي أنشؤناه constructorنستدع الـ nullساوي

headونمرر له البانات ونجعل الـ node classف

إشر عله، أما إذا كان وجد بها عناصر بالسلسلة

ثم nullنجعل مإشر الـعنصر الجدد إشر على

إشر على العنصر الجدد ثم lastنجعل مإشر الـ

أي آخر عنصر ف السلسلة lastنجعل العنصر الجدد

Page 318: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

public void insert_at_position(int data, int pos)

{

node n = new node(data);

if (pos < 0 || pos > length( ))

Console.WriteLine("\t this position is out of range");

else

{

if (pos == 0)

{

n.next = head;

head = n;

}

else

{

node temp = head;

for (int i = 0; i < pos - 1; i++)

{

temp = temp.next;

}

n.next = temp.next;

temp.next = n;

}

}

}

public void insert_at_start(int data)

{

node newhead = new node(data);

newhead.next = head;

head = newhead;

}

هذه الدالة لإلضافة ف أي موضع ف السلسلة

هذه الدالة لإلضافة ف بداة السلسلة

Page 319: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

public void print( )

{

node temp = head;

if (is_Empty( ))

Console.WriteLine("\t list is empty");

else

{

Console.Write(" head --> ");

while (temp != null)

{

Console.Write(temp.data + " --> ");

temp = temp.next;

}

Console.Write("null");

}

}

public int length( )

{

node temp = head;

int len = 0;

if (is_Empty( ))

Console.WriteLine("\t list is empty");

else

{

while (temp != null)

{

len++;

temp = temp.next;

}

}

return len;

}

هذه الدالة إلظهار عناصر السلسلة

هذه الدالة لحساب طول السلسلة أو عدد

عناصرها

Page 320: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

public bool is_Empty( )

{

if (head == null)

return true;

else

return false;

}

public void remove_by_value(int data)

{

if (head == null)

return;

if (head.data == data)

{

head = head.next;

return;

}

node current = head;

while (current.next != null)

{

if (current.next.data == data)

{

current.next = current.next.next;

return;

}

current = current.next;

}

}

public void remove_by_index(int index)

{

if (index < 0 || index > length( ))

Console.WriteLine("\t this index is out of range");

هذه الدالة للتؤكد من أن السلسلة فارؼة أم ال

هذه الدالة لحذؾ عنصر من خالل ) تحدد

لمة العنصر (

هذه الدالة لحذؾ عنصر من خالل ) ترلمه

ف السلسلة (

Page 321: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

else

{

if (index == 0)

head = head.next;

else

{

node temp = head;

for (int i = 0; i < index - 1; i++)

{

temp = temp.next;

}

temp.next = temp.next.next;

}

}

}

public void remove_from_last( )

{

if (is_Empty( ))

Console.WriteLine(" \t list is empty");

else if (head == last)

{

head = null;

last = null;

}

else

{

node current;

current = head;

node prev = head;

while (current.next != null)

{

prev = current;

current = current.next;

هذه الدالة لحذؾ عنصر من نهاة السلسلة

Page 322: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

}

last = prev;

prev.next = null;

}

}

public void remove_from_first( )

{

if (is_Empty( ))

Console.WriteLine("\t list is empty");

else if (head == last)

{

head = null;

last = null;

}

else

{

head = head.next;

}

}

public void Swap_every_two_node_at_all_node()

{

node curr = head;

int temp;

while (curr != null && curr.next != null)

{

temp = curr.data;

curr.data = curr.next.data;

curr.next.data = temp;

curr = curr.next.next;

}

}

هذه الدالة لحذؾ عنصر من بداة السلسلة

هذه الدالة لتبدل كل عنصرن مع بعضهما

ف السلسلة

Page 323: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

public void reverse( )

{

node var1, var2, var3;

var3 = null;

var1 = head;

while (var1 != null)

{

var2 = var3;

var3 = var1;

var1 = var1.next;

var3.next = var2;

}

head = var3;

}

public void sort_list( )

{

node curr = head;

int temp;

for (int i = 0; i < length( ) - 1; i++)

{

for (int j = i; j < length( ) - 1; j++)

{

if (curr.data > curr.next.data)

{

temp = curr.data;

curr.data = curr.next.data;

curr.next.data = temp;

}

curr = curr.next;

}

curr = head;

}

}

هذه الدالة لعكس عناصر السلسلة

هذه الدالة لترتب عناصر السلسلة

Page 324: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

public void get_element_by_position(int pos)

{

node temp;

temp = head;

if (pos < 0 || pos > length( ))

Console.WriteLine("\t this position is out of range");

else

{

for (int i = 0; i < pos; i++)

temp = temp.next;

Console.WriteLine("\t the element of this position is " + temp.data);

}

}

public void searching(int value)

{

node temp = head;

if (is_Empty( ))

Console.WriteLine("\t list is empty");

else

{

while (temp.data != value && temp.next != null)

temp = temp.next;

if (temp.data == value)

Console.WriteLine("\t" + value + " is exist in the list");

else

Console.WriteLine("\t" + value + " opps! this element is not exist

in the list ");

}

}

هذه الدالة إلظهار بانات العنصر

من خالل موضعه ف السلسلة

هذه الدالة للبحث عن عنصر ف

السلسلة من خالل لمته

Page 325: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

public void swap_two_nodes(int First_Index, int Second_Index)

{

if (is_Empty( ))

Console.WriteLine("\t list is empty");

if ((First_Index < 0 || First_Index > length()) && (Second_Index < 0

|| Second_Index > length()))

Console.WriteLine("\t One of indexes is out of range or both ");

else

{

node temp1;

node temp2;

temp1 = temp2 = head;

for (int i = 0; i < First_Index - 1; i++)

temp1 = temp1.next;

for (int i = 0; i < Second_Index - 1; i++)

temp2 = temp2.next;

int temp = temp1.data;

temp1.data = temp2.data;

temp2.data = temp;

}

}

public void clear( )

{

head = null;

last = null;

}

public int max( )

{

node temp = head;

int max = 0;

for (int i = 0; i < length( ); i++)

{

هذه الدالة لتبدل عنصرن فمط ف السلسلة مع

بعضهما

هذه الدالة لحذؾ كل عناصر

السلسلة

هذه الدالة لترجع أكبر لمة ف

السلسلة

Page 326: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

if (temp.data > max)

max = temp.data;

temp = temp.next;

}

return max;

}

public int mini( )

{

node temp = head;

int mini;

if (is_Empty())

{

Console.WriteLine(" the list is empty");

mini = 0;

}

else

{

mini = temp.data;

for (int i = 0; i < length(); i++)

{

if (temp.data < mini)

mini = temp.data;

temp = temp.next;

}

}

return mini;

}

}

class Program

{

static void Main( )

{

هذه الدالة لتعد ألل لمة ف

السلسلة

Page 327: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Console.Title = " Linked List";

Console.ForegroundColor = ConsoleColor.DarkGreen;

list li = new list( );

int choice;

int value;

int position;

Console.WriteLine("\t \t \t\t\t\t\t< Welcome > ");

Console.WriteLine("\t \t \t\t\t\t\t -------");

try

{

do

{

Console.WriteLine("Select the operation that you want to do it :");

Console.WriteLine("* 1 + insert element at last \t\t\t

* 6 + Remove element by position ");

Console.WriteLine("* 2 + insert element at first \t\t\t

[ 7 + Remove element by value");

Console.WriteLine("* 3 + insert element at any position\t\t

* 8 + Swap every two elements with each other");

Console.WriteLine("* 4 + Remove element from first \t\t

* 9 + Reverse the list");

Console.WriteLine("* 5 + Remove element from last \t\t\t

* 10 + Print the list");

Console.WriteLine("* 11 ] Get element by position \t\t

* 12 + Get length of the list");

Console.WriteLine("* 13 + search in the list by element\t\t

* 14 + Swap two nodes by index ");

Console.WriteLine(" \t\t* 15 + Clear List \t\t\t\t

* 16 + Maximum value in the list ");

Console.WriteLine(" \t\t* 0 + Press 0 to exit \t\t\t\t

* 17 ] Minimum value in the list");

Console.WriteLine(" \t\t* 18 + Sorting list \t \t \t\t ");

Page 328: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

Console.Write(" \t\t\t\t\t Your choice is : ");

choice = int.Parse(Console.ReadLine( ));

switch (choice)

{

case 1:

Console.Write("\t enter data of node : ");

value = int.Parse(Console.ReadLine( ));

li.insert_at_last(value);

break;

case 2:

Console.Write("\t enter data of node : ");

value = int.Parse(Console.ReadLine( ));

li.insert_at_start(value);

break;

case 3:

Console.Write("\t enter data of node : ");

value = int.Parse(Console.ReadLine( ));

Console.Write("\t enter position of node : ");

position = int.Parse(Console.ReadLine( ));

li.insert_at_position(value, position);

break;

case 4:

li.remove_from_first( );

break;

case 5:

li.remove_from_last( );

break;

case 6:

Console.Write("\t enter position of node : ");

position = int.Parse(Console.ReadLine( ));

li.remove_by_index(position);

break;

case 7:

Page 329: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

7

Console.Write("\t enter value that you want to delete it : ");

value = int.Parse(Console.ReadLine( ));

li.remove_by_value(value);

break;

case 8:

li.Swap_every_two_node_at_all_node( );

break;

case 9:

li.reverse( );

break;

case 10:

li.print( );

Console.WriteLine( );

break;

case 11:

Console.Write("\t enter position of element : ");

position = int.Parse(Console.ReadLine( )); Console.WriteLine();

li.get_element_by_position(position);

break;

case 12:

Console.WriteLine("\t Length of this list = " + li.length( ));

break;

case 13:

Console.Write("\t enter element that you search about it : ");

value = int.Parse(Console.ReadLine( )); Console.WriteLine( );

li.searching(value);

break;

case 14:

int index1, index2;

Console.Write("\t enter first index to swap with another : ");

index1 = int.Parse(Console.ReadLine( ));

Console.Write("\t enter second index to swap with the first:");

index2 = int.Parse(Console.ReadLine( )); Console.WriteLine( );

Page 330: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

2

li.swap_two_nodes(index1, index2);

break;

case 15:

li.clear( );

break;

case 16:

Console.WriteLine(" the maximum value in the list = " +

li.max( ));

break;

case 17:

Console.WriteLine(" the Minimum value in the list = " +

li.mini( ));

break;

case 18:

li.sort_list( );

break;

case 0:

Console.WriteLine("\t \t\t Thanks for your Time ");

break;

default:

Console.WriteLine(" False choice ");

break;

}

}

while ( choice != 0 );

}

catch ( Exception ex )

{

Console.WriteLine( ex.Message );

}

}

}

}

Page 331: Introduction to C# · 2019-03-29 · Introduction to C# خٌحش ڑٓپحذ سؿڂٍرٿپ سڂىٷڂ 2 ةمدمم تؽلل ةكرتشملا ةتحتلا ة óنبلا لع لمعلل

#Introduction to C مقدمح نهثزمجح تانس شارب

9

وآخرا ...

الحمد هلل الذي لدر ل التوفك ف كتابة هذا الكتاب وأتمنى أن كون لد نال إعجابكم

الكتاب بمثابة رحلة علمة ممتعة لإلرتماء ، ولد كان وخرج بشكل رض الماريء

بموضوع الكتاب لذلن بذلت الكثر من الجهد ف إخراجه على المستوى المطلوب،

ولكن ال أستطع أن الول أنه كتاب شامل وتصؾ بالكمال، ألن كل شء نالص

وحتاج إلى المزد لصل إلى مستوى مرتفع من العلم والمعرفة.

فمن ف كتابة هذا الكتاب فإن أعتبر ذلن مكافؤة من هللا تعوضا منه وإن كان هللا لد و

عما بذلته فه من جهد، ولد كان ذلن هدف منذ البداة وأتشرؾ أنن وصلت إله.