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

الحجم: px
بدء العرض من الصّفحة:

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

النسخ

1

2 3

3 ممدمة للبرمجة بالسي شارب 3

4 الكتاب : ممدمة للبرمجة بالس شارب المإلؾ : محمود سل مان تصم م الؽالؾ : تمى عبدالحم د الطبعة األولى : أبر ل / 8345 رلم اإل داع : الترل م الدول :

5 ممدمة للبرمجة بالسي شارب محمود سليمان

6

7 المحتوى : - عن الكتاب ممدمة إطار العمل... - بن ة البرنامج ف الس شارب اإلدخال واإلخراج أنواع الب انات المتؽ رات تحو ل انواع الب انات التعل مات... - المعامالت الر اض ة والمنطم ة... - الج مل الشرط ة ( if ) switch - if/else.else حلمات التكرار ( do.while ) For / foreach / While / المصفوفات ( Arrays ) النصوص ( Strings ) 9 - ممدمة ف البرمجة كائن ة التوجه ( OOP )... - التؽل ؾ ( Encapsulation ) static members -

8 - الدوال ( Functions ) Methods or... - الدالة ذات ة اإلستدعاء ( function ) Recursion ( object, var, dynamic( Classes - - الخصائص ( get ) set, الوراثة ( Inheritance ) interface Polymorphism Abstract, Sealed, Partial -... Struct -... Namespace -... ) - األخطاء واإلستثناءات ( Exceptions Errors and 9... Collections -... Generics Data Structure -

9 عن الكتاب هذا الكتاب م ع د للمبتدئ ن لك ساعدهم على فهم أساس ات لؽة الس شارب بطر مة مبسط ة وسهلة وال شترط أن كون الماريء له أي معرفة مسبمة بالبرمجة وأهم خطوة بجانب المراءة ه التطب ك العمل المستمر لتحصل على أكبر لدر من الفهم واإلست عاب والتحص ل. عن اللغة لؽة الس شارب لؽة بس طة جدا وسهلة وحد ثة ولها أؼراض كث رة فه ط و ر ت بواسطة شركة ما كروسوفت ( Microsoft ) بم ادة أندر س ه لسبرج اللؽة ت مك نن من عمل تطب مات للو ب والهاتؾ وسطح المكتب وتعمل شركة ما كروسوفت على تطو رها دائما وه واحدة من أشهر لؽات البرمجة وأكثرهم إستخداما. بدأوا ف تطو ر اللؽة عام 999 وأطلموا عل ها لؽة كوول أي : COOL ----> C Object Oriented Language ثم ؼ روا االسم لس شارب وأعلنوا عنها عام. ولؽة س شارب ( #C ) ه تطو ر وإمتداد للؽة ++C و C وه تعمل بالبرمجة كائن ة التوجه بشكل كل. إذا اكتشفت أي خطؤ ف هذا الكتاب رجاء اعلمن وراسلن على البر د اإللكترون Mahmoudsoliman781@yahoo.com 7

10 ممدمة إن س شارب إحدى لؽات البرمجة المصممة للعمل على البن ة التحت ة المشتركة للؽات البرمجة تسمى ( Common Language Infrastructure ) ( CLI ) معنى هذا المصطلح أنها ت ت ح للمبرمج إمكان ة إستخدامها إلنتاج مكتبات تتوافك مع المواصفات والخصائص الشائعة للبن ة التحت ة أي انه حتوي على الكود التنف ذي الذي ت ح له استخدام شتى لؽات البرمجة عال ة المستوى عل منصات عمل مختلفة. التسلسل الهرمي للبيانات -Bits ه اصؽر وحدة ل اس ف الكمب وتر وه تؤخذ ل مت ن فمط إما 0 أو 1. ت عب ر األصفار واآلحاد عن إشارات كهربائ ة وه ما عمل بها الكمب وتر. 2

11 - Characters وه تتضمن الحروؾ وتساوي با ت ح ث البا ت ساوي 2 بت ثم تتحول الحروؾ إلى أصفار وآحاد ( لؽة اآللة ) لك فمها الكمب وتر و تم ذلن ب : ASCII (American Standard Code for Information Interchange) فكل حرؾ من ( A إلى ) Z وكل رلم من ( 0 إلى ) 9 وكل رمز ف الكمب وتر مثل & ^ $ له عدد عشري ناظره ثم تحول إلى أصفار وآحاد ف النها ة لك فهمه الكمب وتر. 9

12 - بت = ( \ ) - با ت = 2 بت - ك لو با ت = با ت - م جا با ت = ك لو با ت - ج جا با ت = م جا با ت - ت را با ت = ج جا با ت 7- ب تا با ت = ت را با ت 2- إكسا با ت = ب تا با ت 9- ز تا با ت = إكسا با ت - وتا با ت = ز تا با ت ( Fields حمول ) - تتكون من حروؾ او أرلام فمثال ت عب رعن اسم الشخص أو عمره. ( Records سجل ) - حتوي على مجموعة من الحمول معا. ( Files ملفات ) - تتكون من مجموعة من السجالت. ( Database لواعد الب انات ) - عبارة عن مجموعة من الب انات ولد تكون ب انات ضخمة لكن سهل الوصول إل ها والتعامل معها بسرعة وتتكون من حمول وسجالت وهذه الب انات ت خ زن ف جداول بس طة لها اسم وخصائص. ( Big Data ب انات ضخمة ) - كم هائل من الب انات الت ت نت ج ف العالم وم ا.

13 إطار العمل ) The.Net Framework ( ال ( دوت نت ).Net ه إطار عمل أو منصة لتنف ذ التطب مات وتحتوي على مكتبات توفر العد د من االمكان ات الت تستخدم لبناء تطب مات كب رة بالس شارب سواء تطب مات للو ب أو لسطح المكتب أو الهاتؾ سواء ( android windows ios ) phone وذلن من خالل xamarin وه عبارة عن منصة لتطو ر تطب مات الهواتؾ المحمولة ح ث عمل التطب ك الذي أ نش ء بواسطتها على كل أنظمة تشؽ ل الهواتؾ ال.Net ص م مت لتكون منصة عمل لمختلؾ التطب مات تستط ع إستخدامها ف بناء تطب مات من خالل اللؽات اآلت ة : C#, C++, Visual Basic, Python and JavaScript وه تحتوي على كل المكتبات المبن ة ف هذه اللؽات وبها كل الموارد الت تمكنن من إنشاء تطب ك من خاللها. محتو ات إطار عمل ( ).Net : (Common Language Runtime) CLR - ه عبارة عن آلة إفتراض ة مسئولة عن إدارة الكود مع الذاكرة المإلتة ( RAM ) والمعالج ( processor ) ت حو ل الكود إلى لؽة اآللة بعدها هذا الكود ستط ع العمل على أي لؽة برمجة اخرى وهو د ر الذاكرة أ ضا و عالج بها االخطاء و حتوي على " جامع النفا ات ". (Garbage Collector) GC - جمع الب انات المهملة واالماكن الؽ ر مستخدمة ف الذاكرة و موم بحذفها وتنم ة الذاكرة ف جعلها تعمل بكفاءة أكثر.

14 ن رحلة الكود البرمج داخل ال.Net : أوال عالج الكود ف تحول إلى لؽة وس طة ) MSIL Microsoft Intermediate Language ( ألن الس شارب من اللؽات عال ة المستوى فتحتاج إلى لؽة وس طة لبل أن تتحول إلى لؽة اآللة. مالحظة : مكونات تطب مات اللؽة الوس طة و ضعت ف البرنامج التنف ذي ( الملؾ الذي ف ذه الكمب وتر ف نها ة المهام (. ثان ا عندما ن ف ذ البرنامج أ ضا كون بداخل CLR مر على معالج اخر عرؾ ب ( JIT ) just-in-time وهذا و عمل على ترجمة اللؽة الوس طة ف الملؾ التنف ذي إلى لؽة اآللة )1 0(., مالحظة : أي أمر ؤخده الكمب وتر تحول إلى اللؽة الت فهمها الكمب وتر و ستط ع التعامل معها وهو ال فهم ؼ رها وه )1 0(, أي ش ء تحول إلى األصفار واآلحاد.

15 C# Source Code C# Compiler MSIL (.exe or.dll) CLR / GC / JIT Operating System وتوجد أ ضا أداة داخل إطار عمل ال (.Net ) تسمى : CTS (Common Type System)

16 وه جزء من ال CLR وه عبارة عن آداة تستط ع تشؽ ل اكثر من لؽة برمجة معا بمكتبات مختلفة. وتحتفظ باالساس ات بداخلها وعندما تعمل أى لؽة تعود هذه اآلداة لتلن االساس ات الخاصة بهذه اللؽة لك تعمل على إطار العمل ح ث أن كل لؽة برمجة كون لها لواعد خاصة بها ف الكتابة و كون لكل لؽة العد د من المكتبات الت تحتوي على تعر ؾ لكل شئ خاص باللؽة. إن لم تستطع فهم هذه المعلومات فال بؤس ستفهمها ف ما بعد فمحتوى الكتاب ؼ ر معتمد عل ها لكن تعمد ت لولها لك تعرؾ ك ؾ عمل البرنامج الذي تكتب عل ه الكود وماذا حدث مع الكود الذي تكتبه وما حدث وراء الشاشة وك ؾ فهمه الكمب وتر و ظهر على شكل برنامج له واجهه و ستط ع المستخدم العادي التعامل معه سنبدأ ف بناء ه كل أول برنامج ف لؽة الس شارب. إذا أ ن كت ب الكود مكننا كتابة الكود على أي محرر نصوص و كون إمتداد الملؾ الذي نكتب به الكود ).cs ( أو على ب ئة تطو ر متكاملة ) Environment IDE ( Integrated Development وهذه الب ئة ( studio ) visual ه المعتمدة من شركة ما كروسوفت ف التطو ر. مكنن أن ت حم ل أي إصدار منه. بعد تحم ل البرنامج وتثب ته على جهازن... اوال نفتح برنامج visual studio من لائمة Start

17 ثم نضؽط على File بعدها ندخل إلى New ثم نختار project بعدها نختار لؽة #C ثم Console Application

18 س فتح أمامن using System; اسم البرنامج + namespace فمثال إذا اسم ت البرنامج First_project س كون كالتال : namespace First_project Class Program static void Main(string[] agrs) Console.WriteLine("Hello World");

19 بعد اإلنتهاء من كتابة الكود سنضؽط على كلمة 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 ) 7

20 د اتفمنا ف البدا ة على أن لؽة الس شارب ( #C ) وتعمل بشكل كل بالبرمجة كائن ة التوجه. إنما ه مبن ة على اللؽت ن ++C و C إذا ما معنى البرمجة كائن ة التوجه وماهو تمن ات البرمجة إختالؾ الس شارب عن الس وما ه لنتعرؾ على تمن ات البرمجة اوال : - البرمجة الخطية ( Programming ) Linear وه كانت عبارة عن أن الكود كتب ف صفحة واحدة وبعض االجزاء ف الكود لابلة للتكرار بدون شئ جعلنا نستؽن عن هذا التكرار ف جزء مع ن من الكود فمثال أنن تكتب بعض االسطر من الكود لتنف ذ عمل ة مع نة ثم ت كمل الكود وبعدها تمابلن مشكلة تحتاج إلى نفس العمل ة السابمة لكن ف جزء مختلؾ من البرنامج ح نها ال تستط ع إال أن تع د كتابة هذا الجزء مرة أخرى وأ ضا عمل ة البحث عن االخطاء كانت صعبة جدا وتؤخذ الكث ر من الولت كود حتوي على آالؾ االسطر فلم كن من السهل التعامل مع الكود ف عمل ات التعد ل وكان الكود ؼ ر مرتب و ج د ت فكرة البرمجة الخط ة لحل المشاكل المتعلمة بالر اض ات ولتسه ل حلها. - البرمجة الهيكلية ) Programming ( Structure ظهر بعض التطو ر ف هذه الولت واخترعوا الدوال أو الوظائؾ ( Functions ) وه ت م كنن من كتابة )عمل ة مع نة ) عدد من األسطر مرة واحدة وتستدع هم ف كل مره احتجت إل هم دون الحاجة إلى إعادة كتابة هذه االسطر) العمل ة ( فمط نكتب اسم الدالة لكن أ ضا و ج بعض التمص ر ف ها ح ث صعب فصل الب انات عن العمل ات وال توجد حما ة للب انات من حدوث األخطاء والتعد ل بها نتج عنه أخطاء ف أجزاء أخرى من الكود ومن اللؽات الت تعمل بالبرمجة اله كل ة لؽة C. 2

21 - البرمجة كائنية التوجه ) Programming ( Object Oriented وأخ را ظهرت تمن ة جد دة ف كتابة الكود ت م كن ن من تنظ م الكود وأختصرت جدا ف حجم الكود وأصبح مرتبا وسهل عمل ات البحث عن األخطاء وساعد المطور ن على العمل بؤر ح ة ووفرت الكث ر من الولت والجهد أ ضا وأصبح كل ش ء منفصال عن اآلخر ح ث تتم عمل ة التعد ل والتؽ ر ف الكود بدون حدوث أخطاء مترتبة على هذا التؽ ر وأ ض فت الكث ر من التمن ات الت تحافظ على الب انات وتؽل فها وإخفاء الب انات والتحكم الكامل بها ومن اللؽات الت تعمل بالبرمجة كائن ة التوجه )البرمجة الش ئ ة( لؽة ++C و #C و Java و Python ومعظم لؽات البرمجة الحد ثة. Namespace لنتخ ل أننا كتبنا مجموعة من األسطر البرمج ة ف دالة ( Function ( وأنشؤنا أكثر من دالة إذا تحتاج إلى ش ء د ر هذه الدوال معا اسمه.class ال تشؽل تفك رن بمعنى كلمة class سنفهمه ف ما بعد كل ما أر دن أن تعرفه عن ال class أنه مكن أن حتوي على أكثر من دالة و مكن إنشاء أكثر من class ف نفس المشروع إذا نحتاج إلى شئ ل جمع كل هذه ال classes مع بعضها سنضعهم بداخل Namespace ف كون الكود مرتب أكثر. إذا فال ( namespace (ه عبارة عن حاو ة لمجموعة من ال classes و مكن أن حتوي المشروع على أكثر من.namespace ولنستط ع رإ ة وإستخدام ال classes الت بداخل ال namespace جب أن نستدع ال namespace بإستخدام كلمة. using 9

22 Main تسمى الدالة األساس ة الت بدأ منها البرنامج ف تنف ذ الكود فمثال إذا كتبت مئات العمل ات واإلجراءات خارج الدالة االساس ة فلن تم تنف ذهم أوال بل بدأ البرنامج ف تنف ذ ما بداخل الدالة األساس ة. static void Main(string[ ] agrs) Console.WriteLine(" C# ") ; سنفهم معنى كلمة string[ ] args ف الفصل الخاص بالدوال مكن اإلستؽناء عنها ف دالة ال Main نستط ع كتابة ألواس الدالة بدون كتابتها. تكون بالشكل التال : static void Main( ) Console.WriteLine(" C# ") ;

23 اإلدخال واإلخراج ) Input and Output ( عمل ات اإلدخال واإلخراج ه الت ت مك ن المستخدم من التعامل مع البرنامج أو التطب ك على سب ل المثال إذا كنت من مستخدم مولع الف س بون فإنن أوال ت دخ ل البر د اإللكترون وكلمة المرور فهذه ت ع د عمل ة إدخال لن كم ستخدم للمولع والب انات الت تظهر ف ما بعد فهذه عمل ة إخراج. using System ; namespace First_project Class Program static void Main(string[ ] agrs) Console.ReadLine( ); كلمة Console عبارة عن class بداخل (System) Namespace ) -ReadLine( عبارة عن دالة ت ستخدم لعمل ات اإلدخال وتستمبل نصوص فمط.

24 و جب ان نضع فاصلة منموطة ف نها ة كل جملة ف البرنامج ( ; ) وإال س حدث خطؤ. أنواع األخطاء ف الكود : خطؤ ف طر مة كتابة الكود ( error ) Syntax وذلن كون خطؤ ف لواعد كتابة الكود. خطؤ منطم ( error ) Logic وف هذه الحالة كون الكود مكتوب بطر مة صح حة كماعدة ولكنه ؼ ر منطم مثل لسمة واحد على صفر. خطؤ أثناء التشؽ ل ( error ) Runtime هذا الخطؤ حدث أثناء تشؽ ل البرنامج مثل وجود فائض ف الب انات الم دخ ل ة نس ان الفاصلة المنموطة عد خطؤ ف طر مة الكتابة أي ( error (. Syntax using System ; namespace First_project Class Program static void Main(string[ ] agrs) Console.WriteLine(" C# ") ; ) WriteLine( - ه دالة لطباعة المخرجات - Line ت كتب لك نه السطر الحال و بدأ ف سطر جد د.

25 و مكن أن نكتب فمط ) Write( متالصمة بها. لكن األسطر الت تل ها ف عمل ة الطباعة ستكون و وجد طر متان للطباعة : ) Placeholder ) -1 وتكون كالتال : Console.WriteLine(" Hello World,0- ", 5, 20 ) ; وف هذه الحالة س طبع + Hello World أول م دخ ل للدالة بعد الفاصلة وه الم مة ( 5 ) وإذا أردنا طباعة ثان م دخل سنكتب -1, وح نها لن عرض أول م دخل الم مة 20 وس عرض ح ث أن أول ترل م ( index ) بدأ بالم مة صفر - 0,. و مكنن أن تطبع أي ش ء بالشكل الذي تر ده فمثال : 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

26 ) الدمج Concatinatoin( -2 Console.WriteLine(" Hello World " ); لكن هذه الطر مة ثابتة وماهو مكتوب أوال س عرض أوال بعكس الطر مة السابمة انت من تحكم ف ما س ظهر أوال وس عرض الكل. س كون الناتج... Hello World 520 س عرضها بهذا الشكل ولن جمع الرلم ن فهذه األداة )+( بعد النص ف الطباعة ل س أداة جمع إنما ه أداة للدمج ب ن النصوص فهو تعامل مع األرلام الت بعد النص على أنها نص ول ست رلم فمنطم ا ال مكن إضافة رلم على نص لكن إذا أتى الرلمان لبل جملة الطباعة فس جمع الرلم ن أوال و موم بالعمل ة الحساب ة بطر مة عاد ة جدا. Console.WriteLine( "Hello World" ) ; 25Hello World س طبع : \' وعندما ننته من الكود ونر د تشؽ ل البرنامج نضؽط.Ctrl+F5 توجد بعض العالمات تسمى " Sequence " Escape الت لد تساعدن ف عمل ة الطباعة لتخرج النص بشكل منسك أو إنذار عند عمل ة ما خطؤ. لطباعة عالمة تنص ص فرد ة "\ لطباعة عالمة تنص ص زوج ة لطباعة عالمة \ \\ لعمل إنذار \a للنزول إلى سطر جد د \n لعمل ( tab مسافات فارؼة ) \t

27 مثال : Console.WriteLine(" \' Hello " ) ; Console.WriteLine(" \" Hello " ) ; Console.WriteLine(" \\ Hello " ) ; Console.WriteLine(" \a Hello " ) ; Console.WriteLine(" \n Hello " ) ; Console.WriteLine(" \t Hello " ) ;

28 ) أنواع البيانات Data Types ( الب انات الت ت خزن ف الذاكرة جب أن كون لها نوع حت تعرؾ عل ها مترجم اللؽة فمثال تكون نصوص أو حرؾ أو عدد صح ح أو عدد عشري و جب أن نحدد نوعها أوال وإال لن تعرؾ عل ها المترجم وس حدث خطؤ وجد العد د من االنواع ولكن بالتؤك د لن تسخدم كل ش ء فمط ما تحتاج إل ه ف برنامجن... نوع البيانات النوع الموافق في منصة الدوت نث الحجم الوصف أو false ق مح منطق ح صح أو خطأ true System.Boolean bool رقم صح ح موجة أوسانة مساحته 1 تت رقم صح ح موجة مساحته 1 تت رقم صح ح سانة أو موجة مساحته 82 تت رقم صح ح موجة مساحته 82 تت من 821 ان انى انى انى System.Sbyte System.Byte System.Int16 System.UInt16 sbyte byte short ushort

29 رقم صح ح سانة أو موجة مساحته 82 تت 278,17,1872,1 انى 278,17,1872,1 System.Int32 int 0 انى 72,,7,2172,2, رقم صح ح موجة مساحته 82 تت رقم صح ح موجة أوسانة مساحته,2 تت, , انى, , System.UInt32 System.Int64 uint long رقم صح ح موجة مساحته,2 تت قثم حزف مساحته 82 تت قثم رقم كسزي مساحته 82 تت قثم رقم كسزي مساحته,2 تت 0 انى,817,,271,, , U+0000 انى U+ffff 0 انى e+16 E+38 82,02128 انى E+38 System.UInt64 System.Char System.Single System.Double ulong char float double قثم رقم سانة أو موجة مساحته 821 تت E ,12,888,12282 انى E ,12,888,12282 مق د تحسة انذاكزج قثم أي نوع من األنواع انساتقح مثم سهسهح نص ح من جدول ان ونكود System.Decima l System.String System.Object decimal string object 7

30 إذا مما تتكون الب انات الت ت خزن ف الذاكرة تتكون من ( نوع الب انات + المتؽ ر الذي حتوي على الب انات + الم مة ) Data type + variable + value 2

31 المتغيرات ) Variables ( المتؽ ر هو عبارة عن اسم لمكان تخز ن الب انات ف الذاكرة والذاكرة عبارة عن خال ا وكل خل ة ت عادل بت وت ح دد المساحة الت تؤخذها الب انات ف الذاكرة من خالل نوعها وتتؽ ر ل مة المتؽ ر بإستمرار كلما أدخلنا له ل مة جد دة كما مكننا تسم ة المتؽ ر بؤي اسم نر ده لكن ال نستط ع تسم ة متؽ ر ن بنفس األسم و جب أن تكون الم مة الت ست خز ن تتناسب مع نوع المتؽ ر. تتم عمل ة تعر ؾ المتؽ ر بهذا الشكل : الم مة = اسم المتؽ ر + نوع الب انات الت تخزن ف المتؽ ر Data type Variable_Name = value ; Variable_Name D a t a ون سم هذا المكان ف الذاكرة لك نستط ع الوصول إلى الب انات مرة أخرى بسهولة فهو بمثابة صندوق توضع به هذه الب انات. 9

32 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; ف هذا المثال عرف نا متؽ ر من النوع ( int ) ووضعنا به الم مة 5 ومتؽ ر من النوع ( string ) ووضعنا به نص داخل عالمت ن تنص ص و جب أن وضع النص أو الكلمة ب ن عالمت ن تنص ص حتى إذا كانت الم مة عبارة عن أرلام لكنها بداخل عالمت ن تنص ص فإنه تعامل معها على أنها نص ول ست أرلام. ومتؽ ر من النوع ( float ) رلم حتوي على عالمة عشر ة ونكتب ف آخره ( f ) لك تعرؾ المترجم على أنه float ألن الم مة االفتراض ة لألعداد الكسر ة ه.double ثم عرفنا متؽ ر من النوع ( char ) ؤخذ حرؾ و وضع ب ن عالمة تنص ص فرد ة. جب أن نعلم أن لؽة الس شارب حس اسة من ناح ة الحروؾ أي أن a ال تساوي A ف جب أن ننتبه عند الكتابة. : Int خطؤ : int صح

33 فمثال إذا كان : 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 ;

34 مثال : static void Main( ) int x = 10 ; x = 5 ; x = 20 ; أدخلنا ثالث ل م للمتؽ ر تكون ل مة المتؽ ر الجد دة ه آخر ل مة دخلت له. إذا تكون ل مة المتؽ ر x تساوي. مالحظة : ال جوز تعر ؾ المتؽ ر أكثر من مرة ف نفس المكان من الكود. فمثال : static void Main( ) int x =1 ; int x =5 ; خطأ ألن هذا المتؽ ر م عرؾ م سبما. تسمية المتغير جب أن كون اسم معبر عن نوع الب انات الت ست خزن فمثال إذا كان اسم او ع مر شخص. string Name; int Age;

35 وال جوز أن بدأ المتؽ ر بؤي من الرموز اآلت ة :! # $ % ^ & - = + ) (? لكن ممكن أن بدأ ب _ صح ح 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

36 in in (generic int interface modifier) 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

37 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

38 فمثال ال نستط ع تعر ؾ متؽ ر هكذا int void هذا ؼ ر صح ح وس حدث خطؤ جب االبتعاد عن هذه الكلمات ف تسم ة المتؽ رات فه كلمات محجوزة ف اللؽة ولها استخدامات مع نة. كل متؽ ر نعرف ه كون له نطاق ومجال رى ف ه ف الكود فإما أن كون : ( Local محل ) : و كون ذلن ف نطاق محدد ونحن نحدد مدى رإ ة مترجم اللؽة له ف بال الكود من خالل لوس ن المجموعة ( Global شامل أو عام ) : و كون مرئ ف كل الكود داخل ال class أي كون ف بدا ة ال.class مالحظة : عندما تعط ل مة إبتدائ ة للمتؽ ر فإنه ستخدمها فمط ف حالة أنن لم ت دخل له ل مة أخرى. مثال : 1 2 Global 3 Local

39 ف هذه الصورة كون المتؽ ر x الذي سمى Test عام أي مرئ ف كل الكود الذي ف هذا ال class فإذا ك ت ب حرؾ x ف أي مكان ف الصورة تحت اسم ال class س ظهر لن المتؽ ر x لكن بشرط أن كون داخل مجال ال class أي أنه ال مع ب ن خارج أول لوس وآخر لوس لل class كما ش ر السهم ( 1 ) ف الصورة. وال جوز إعادة تعر ؾ متؽ ر آخر بنفس أسم المتؽ ر x ألنه م عرؾ م سبما ح ث أنه متؽ ر عام داخل ال.class أما المتؽ ر y فإنه ألل شمول ة من x ح ث أنه ال تعرؾ عل ه خارج لوس ن المجموعة للدالة رى بؤي مكان داخل لوس ن المجموعة الخاص ن بالدالة كما ش ر السهم ( 2 (. و جوز تعر ؾ متؽ ر آخر بنفس اسمه خارج ألواس الدالة الخاصة به. المتؽ ر z هو األلل شمول ة ف هم ح ث أنه ال ت ع رؾ عل ه خارج الموس ن المح ط ن به كما ش ر السهم ( 3 (. كل لوس مجموعة هو عبارة عن مرحلة ومستوى كلما صعد المتؽ ر أعلى خارج األلواس كلما زادت شمول ته ومعرفته ف أجزاء أخرى ف الكود. ) Constant الثابت ( الفرق ب ن الثابت والمتؽ ر أن الثابت ل مته ثابته لن تتؽ ر طوال البرنامج أما المتؽ ر ف مكن تؽ ر ل مته إذا حاولنا تؽ ر الثابت س حدث خطؤ ف البرنامج. و كون بالشكل اآلت : const + data type + name + value ; const string name="mahmoud" ; 7

40 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); 2

41 تحويل أنواع المتغيرات ) Conversions ( ) -1 تحويل ضمني ( implicit وه أن تؤخذ متؽ ر ما لتضعه ف متؽ ر أكبر منه ف الحجم أو ساو ه ونفس نوع الب انات بدون أن حدث أي فمدان أو إضاعة لجزء من الب انات الت بداخله. مثال : مساحة أكبر ( byte ) 8 عدد صح ح long x; مساحة أصؽر ( byte ) 4 عدد صح ح int y; x = y ; ف هذه الحالة وضعنا ل مة المتؽ ر y داخل المتؽ ر. x ح ث أن حجم المتؽ ر ( x ) بت وحجم المتؽ ر ( y ) بت ف مكن للمتؽ ر ذو الحجم األكبر أن حتوي على المتؽ ر ذو الحجم األلل بدون أي حدوث عمل ة فمد للب انات. أما إذا حاولت فعل العكس ف الحالة الطب ع ة فس حدث خطؤ و حدث فمد للب انات. 9

42 إذا حاولت وضع الصندوق ف الشكل ( 2 ) ف الصندوق ف الشكل ( 1 ) لن حدث أي خطؤ ألن الصندوق ف الشكل ( 1 ) أكبر من الصندوق اآلخر لكن ف حالة عكس هذه العمل ة س حدث خطؤ ألن الصندوق ف الشكل ( 2 ) أصؽر ف الحجم. 2 1 ) Explicit or Casting 2- تحويل صريح ( وه عكس الحالة السابمة وتحدث عندما وجد إحتمال فمدان ف الب انات أثناء عمل ة تمر ر الب انات إلى المتؽ رات الجد دة و مكننا وضع ب انات المتؽ رات ذي االحجام المختلفة واالنواع المختلفة داخل بعضها بشرط تؽ ر نوع المتؽ رالض ؾ إلى نفس نوع المتؽ ر الم ض ؾ. وف حالة األعداد مكننا وضع الم م الكسر ة float أو double int أو long بشرط تؽ ر نوعها. بداخل متؽ رات نوعها مثال : long x; int y; y = ( int ) x;

43 مثال : int x = 10 ; float y = 3.0f ; x = ( int ) y ; أو مكننا إستخدام هذه الطر مة : x = Convert.ToInt32( y ); وف هذه الحالة فإن المتؽ ر الم ض ؾ ستط ع إستمبال المتؽ ر الض ؾ. الفرق ب ن : Convert.ToInt16 أي أنها تحول المتؽ ر إلى النوع short ح ث أن النوع short حجمه بت أي با ت Convert.ToInt32 تحول المتؽ ر إلى النوع int ح ث أن النوع int حجمه بت أي با ت Convert.ToInt64 تحول المتؽ ر إلى النوع long ح ث أن النوع long حجمه 64 بت أي 2 با ت تذكر أن : إذا جاء حرؾ u لبل هذه األنواع من الب انات ) short, int, long, float, double ( معنى ذلن أن هذه األنواع تستط ع أخذ ل مة موجبة فمط وحرؾ u إختصار ل.unsigned

44 توجد بعض الدوال لتحو ل النصوص... مثل : decimal ToDecimal(String) float ToSingle(String) double ToDouble(String) short ToInt16(String) int ToInt32(String) long ToInt64(String) ushort ToUInt16(String) uint ToUInt32(String) ulong ToUInt64(String)

45 وتوجد أ ضا الدالة ---> ) 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( ) ) ;

46 د التعليمات ) Comments ( التعل مات ه عبارة عن شرح موجز لجزء مع ن من الكود البرمج ف جعل الكود سهل المراءة والفهم و تجاهل المترجم التعل مات وال تعامل معها نهائ ا فه مجرد مالحظات أو تنو ه كتبه المبرمج لنفسه أو لمن عمل بعده إذا و ج ف ها خطؤ نحوي أو منطم فال هم فلن حدث أي خطؤ. أنواع التعل مات : تعل ك لسطر فردي ( // ) using System; namespace First_program class Program static void Main( ) int num; // this is the first variable مثال :

47 ) تعل ك متعدد األسطر ( */.. /* أي أنه مكن أن نكتب مالحظات ف أكثر من سطر ف كون هذا الجزء من الكود ؼ ر مرئ بالنسبة للمترجم. مثال : 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 */ س تجاهله المترجم تماما. أ ضا ال جب أن ننشؽل بالتعل مات كث را ت كتب التعل مات ف االجزاء المهمة الت تحتاج إلى توض ح فمط.

48 المعامالت الرياضية والمنطمية ) Arithmetic and Logic operators ( المعامالت الرياضية الجمع ( + ) الطرح ( - ) الضرب ( * ) المسمة ) / ( بال المسمة ( % ) ) ++ ( الز ادة للمتؽ ر بممدار ) -- النمصان للمتؽ ر بممدار ( مثال : بفرض أن... A = 5 and B = 2 A + B = 7 A B = 3 A * B = 10 A / B = 2.5

49 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 7 مثال :

50 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; 2

51 د sum= ( A++ ) + ( ++B ) + ( --A ) + ( B-- ) +( B++ ) + ( A ) - ( B ) ; // ( 10 ) + ( 9 ) + ( 10 ) + ( 9 ) + ( 8 ) + ( 10 ) - ( 9 ) الناتج = 7 // ; ) sum Console.WriteLine( إذا و ج متؽ ران نوعهما string بعضهما. وب نهما عالمة الجمع فإنها ستدمج الن ص ن مع مثال : string x = " Hello " ; string y = " World " ; Console.WriteLine( x + y ) ; س طبع : Hello World معامالت الممارنة : ساوي ( == ) ال ساوي (!= ) أكبر من ( > ) ألل من ) < ( أكبر من أو ساوي ) =< ( ألل من أو ساوي ) => ( 9

52 مثال : بإفتراض أن... A = 10, C = 10 and B = 5 A == C A > B A!= B B < A A >= C B <= A مالحظة : عالمة = ل ست عالمة ساوي إنما تسمى تع ن أو تخص ص ( assignment (. فإذا لولنا أن : A = 5 أو A = B معنى هذا أن ل مة الجانب األ من للعالمة )=( تنتمل إلى الجانب األ سر. الم مة 5 تنتمل إلى المتؽ ر A والمتؽ ر B وضع بداخل المتؽ ر A وتصبح ل مة المتؽ ر A ول مة المتؽ ر B ال تتؤثر وتظل كما ه. نفس ل مة المتؽ ر B

53 مثال : 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 //

54 المعامالت المنطمية : جب أن تكون الم مت ن صح حت ن جب أن تكون إحدى الم مت ن صح حة Logical AND ( && ) : Logical OR ( ) )! ( NOT : Logical عكس الم مة فإذا كانت صح حة ف األصل تنف ها األداة وتصبح خطؤ والعكس. وسنفهم المعنى أكثر عندما نصل إلى " الجمل الشرط ة ". المعامالت الثنائ ة الت تتعامل مع البت ( Bit ) & ^ أي أنها تتعامل مع الب انات على شكل النظام الثنائ ( System (. Binary مالحظة : أي حرؾ أو رلم تم تحو له داخل الكمب وتر إلى النظام الثنائ أي إلى أصفار وآحاد ) ( فكما ذكرت فهذه تسمى لؽة اآللة والكمب وتر ال فهم ؼ رها. تم تحو ل األرلام العشر ة إلى النظام الثنائ بهذه الطر مة : أ س صفر إلى أ س ما ال نها ة لذا سم بالنظام الثنائ =

55 و تم جمع كل الم م الت ت كو ن الم مة ال معطاة والم مة الت نؤخذها نضع مكانها 1 والت لم نستخدمها نضع مكانها 0. ال شترط تكرار مع ن لألساس فمط ما تحتاج إل ه إلخراج الم مة بالنظام الثنائ أو مكنن أن تمسم الم مة الم عطاة على العدد وبال المسمة كو ن الم مة بالنظام الثنائ. مثال : حو ل الم مة 9 إلى النظام الثنائ ثم نبحث عن األرلام الت ت كو ن الرلم 9. فتكون ( 16,2,1 ) فنضع 1 تحت كل ل مة لد أخذناها و 0 تحت كل ل مة لم نستخدمها ف تكو ن الرلم العشري. أو نمسم الم مة 9 على ونخرج بال المسمة وتكون بهذا الشكل : الم مة األساس بال المسمة 9 9

56 10011 <--- فتكون الم مة )9 ( بالنظام الثنائ ه مثال : حو ل الم مة إلى النظام الثنائ. 0 2 أ س نبحث عن األرلام الت ت كو ن الرلم. تحت كل ل مة لد أخذناها و 0 تحت كل ل مة لم نستخدمها ف فتكون ( 8,4,1 ) فنضع 1 تكو ن الرلم العشري فتكون الم مة ) ( بالنظام الثنائ ه ---> شرح هذه الجزئ ة كان فمط لتفهم ك ف ة عمل هذه المعامالت )" & ^ "( مع األرلام. مثال : - ف حالة ( & ) عند جمع 1 و 0 بإستخدام & فإن الناتج كون 0 و كون الناتج 1 ف حالة واحدة... إذا كان الجمع ب ن 1 و 1. A = 5 and B = 20 A & B = & = 00100

57 إذا = 4 B A & - ف حالة ( ) عند جمع 1 و 0 بإستخدام فإن الناتج كون 1 و كون الناتج 0 ف حالة واحدة... إذا كان الجمع ب ن 0 و 0. A B = = إذا = 21 B A ف حالة ( ^ ) عند جمع 1 و 0 بإستخدام ^ فإن الناتج كون 1 و كون الناتج 0 ف حالة أن الم متان متشابهتان 1 و 1 أو 0 و 0 A ^ B = ^ = إذا = 17 B A ^ A B A & B A B A ^ B

58 معامالت النمل أو اإلسناد ( Assigment (: A = 3 and B = 2 = += -= *= /= %= &= ^= = مثال : تعن أن المتؽ ر A ست جمع ل مته على المتؽ ر B ثم س وضع ناتج الجمع A += B بداخل A. إنما ه إختصار لهذا النمط : A = A + B A -= B A = A- B المتؽ ر الثان س ط رح من المتؽ ر األول ثم ست وضع ل مة الطرح ف الجانب األ سر. ( A=A*B ) A*=B حاصل ضرب الم مت ن وضع ف الجانب األ سر. ( A=A/B ) A/=B حاصل لسمة الم مت ن وضع ف الجانب األ سر. ( A=A%B ) A%=B حاصل بال لسمة الم مت ن وضع ف الجانب األ سر.

59 ( A=A&B ) A&=B ناتج العمل ة وضع ف الجانب األ سر. ( A=A^B ) A^=B ناتج العمل ة وضع ف الجانب األ سر. ( A=A B ) A =B ناتج العمل ة وضع ف الجانب األ سر. أولويات العمليات الحسابية : ( ) ن ف ذ ما بداخل األلواس أوال. % / * ت ح سب من الشمال إلى ال م ن وأ هم ؤت أوال فتحدث عمل ته أوال. - ت ح سب من الشمال إلى ال م ن وأ هم ؤت أوال فتحدث عمل ته أوال. + =< > => < ت ح سب من الشمال إلى ال م ن وأ هم ؤت أوال فتحدث عمل ته أوال. =! == ت ح سب من الشمال إلى ال م ن وأ هم ؤت أوال فتحدث عمل ته أوال. = الم مة الت بالجانب األ من تنتمل للجانب األ سر. مثال : ( 6 / ) * 3 % 7 1 الناتج : 2 4 / * 3-5 % 5-1 * ( 3-1 ) الناتج : 8 7

60 توجد أ ضا بعض العوامل الت نستخدمها ف الكود بإستمرار مثل: النمطة ( دوت ) < (. ) تستخدم للوصول إلى الدوال والمتؽ رات وال classes عندما نمول... System.Console.WriteLine( ); System ه عبارة عن namespace و للوصول إلى ما بداخلها من classes نكتب نمطة (. ) Console ه عبارة عن class و للوصول إلى ما بداخله من دوال ومتؽ رات نكتب نمطة (. ) وكذلن دالة ) WriteLine( و ).ReadLine( ] [ ت ستخدم مع المصفوفات وللوصول إلى فهرس المصفوفة. ( ) ت ستخدم مع الدوال أي دالة جب أن تحتوي على هذ ن الموسان أثناء اإلنشاء واإلستدعاء وأ ضا نستخدمها عند تحو ل أنواع الب انات. تمار ن : أكتب برنامج ل بد ل ل مت ن لمتؽ ر ن مع بعضهما : مثال لتبس ط الفكرة : إذا كان معن كوب ماء وكوب آخر من الشاي واردت أن تبدل الماء بالشاي والعكس ستؤت بكوب ثالث فارغ لك حتوي على احد النوع ن إلى أن تبدل الكوب ن اآلخر ن. using System; namespace First_program class Program 2

61 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( ) ) ; 9

62 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 ) ;

63 الج مل الشرطية ) Conditional Statements ( if ه عبارة عن لرارات لائمة على شروط فإذا تحمك الشرط نفذ الكود الذي بداخل جملة التحكم ( if.) مثال: إذا كانت درجتن أكبر من % أنت ناجح. إذا كان تمد رن أكبر من %2 ف كون امت از. وهكذا... ) الشرط ( if code if ( grade>=85 ) Console.WriteLine(" Excellent ") ; مثال : نكتب if ثم نفتح لوس ن لكتابة الشرط بداخلهما ونكتب بداخلها الكود المراد تنف ذه. وه تنفذ سطر فردي تحتها فمط ف حالة عدم وضع لوس ن مجموعة.

64 د أما إذا أردنا كتابة أكثر من أمر وأكثر من سطر نكتب الكود بداخل. if ( your_name=="mahmoud") Console.WriteLine("Hello Mahmoud"); your_name="mahmoud"+"soliman" ; مكننا إجراء وتنف ذ أي كود نر ده طالما هذا الشرط صح ح. ف المثال السابك كلمة grade ه عبارة عن متؽ ر ثم الشرط => ومعنى الكود أنه إذا كانت درجتن أكبر من أو تساوي 2 س ن ف ذ الكود الذي بداخل جملة if وف هذه الحالة س طبع " Excellent " ف ما عدا ذلن لن نفذها. ثم نكتب الكود بداخل هذ ن الموسان و جب كتابة الشرط بداخل هذ ن الموسان ( ) ونستط ع كتابة أكثر من شرط بداخلها فمثال إذا كنا نر د فحص ب انات شخص كاملة مثل ( اسمه عمره جنسه رلم تل فونه ) نحدد إذا و ج خطؤ ف أحد هذه الشروط كمل تنف ذ الكود أو ال. وذلن بواسطة : ( &&,, ^,! ) المعامالت المنطم ة ( && ) وتعن ( AND ) تتحمك من الجانب األ سر واأل من إذا و جد خطؤ ف احدهما فلن تم تنف ذ أي منها و كون ناتجهما خطؤ ولتعط ناتجا صح حا جب أن كون الجانبان صح ح ن.

65 المعامالت المنطم ة ( ) وتعن ( OR ) تتحمك من الجانب األ سر واأل من ولن تعط خطؤ إال إذا كان الجانبان شرطهما خطؤ إذا كان هنان جانب خطؤ وآخر صح ح فستتجاهل الخطؤ وتعط ناتج صح ح ألنه وجد على األلل أحدهما صح ح. المعامالت المنطم ة ( ^ ) وتعن ( XOR ) أي أنه لك تم تنف ذ الكود الذي بداخل if جب أن كون الجانبان مختلف ن أي أن أحدهما صح ح واآلخر خطؤ إذا كان ناتج الشرط ف الجانب ن خطؤ أو كان ناتج الشرط ف الجانب ن صح ح فلن تم تنف ذ الكود أ ضا. جب أن كونا مختلف ن. A B A & B A B A ^ B جانب أ من && جانب أ سر مثال : if ( name == "Mahmoud" && age == 30 gender == "Male" phone == " " ) عندما وجد أكثر من شرط فإنه مس م كل شرط ن معا وبعد اإلنتهاء من الشرط ن كون ناتجهما م دخ ل للشرط الذي ل ه. على سب ل المثال نفرض أن name ل مته صح حة و age ل مته أ ضا صح حة

66 إذا فناتج الشرط كون صح حا أما إذا كانت أحدهما خطؤ ف كون ناتج الشرط خطؤ ثم هذا الناتج كون م دخل للشرط الذي بعده أي كون سار ال ( ) صح حا و سارها أ ا كن ف كون ناتج الشرط صح ح لكل هما ألن ( ) تحتاج جانب واحد صح ح على األلل ف كون الناتج النهائ صح حا لهذا الشرط تبمى آخر فحص وهو ال phone وناتج الشرط الذي على ساره صح ح وبما أن أداة الشرط ( ) ف كون الناتج النهائ لجملة if صح ح ف تم تنف ذ ما بداخلها. 1 && ( 0 ) ( 1 ) && ( 1 ) إذا كانت جملة الشرط عبارة عن متؽ ر من النوع ( bool ) وكتبنا الجملة بدون وضع أي عالمات تحدد الشرط وكتبنا المتؽ ر الذي حمل الم مة فمط فستظل هذه الم مة ثابتة فلو كانت true فإن if دائما ست نف ذ أما إذا كانت false فلن تم تنف ذ ما بداخل if أبدا.

67 مثال : bool variable=false; if( variable ) Console.WriteLine(" C# "); جملة الشرط تلمائ ا تكون بهذا الشكل true( )variable == عندما كون المتؽ ر من النوع ( bool ) لو لم نكتب ل مة true أو false ف الشرط. وإذا أردنا النف ف جملة الشرط نضع عالمة تعجب لبل المتؽ ر المراد نف ل مته.)! ( bool variable = false ; if( variable ) Console.WriteLine(" Hello ") ; ف هذه الحالة لن ن فذ الكود الذي بداخل الموس ن ألن ناتج الشرط true حملها المتؽ ر ف االصل.false والم مة الت أما إذا أردت أن تم تنف ذ الكود ف حالة أن المتؽ ر حمل الم مة false ف جب أن تكون جملة الشرط هكذا... if(! variable ) أو if( variable == false )

68 إذا كتبنا true) if( //code ف هذه الحالة س نفذ الكود الذي بداخل if ألننا حددنا أن الشرط صح ح ف كل الحاالت. else ت ن فذ هذه الجملة عندما كون الشرط الذي ف جملة if خطؤ لكن إن كان الشرط صح حا فلن ت نفذ جملة.else int num=5; if( num == 2 ) Console.WriteLine("this is true"); else Console.WriteLine("this is false"); مثال : ف هذه الحالة الشرط خطؤ إذا س نفذ جملة else إذا أردنا كتابة أكثر من سطر داخلها ف جب وضع لوس ن.

69 ) ج مل شرط 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); س طبع // مثال: 7

70 معنى هذا الكود أنه فحص ل مة المتؽ ر أوال فإذا كانت س طبع this is true إذا كانت ؼ ر ذلن فإنه دخل إلى else ف جد بداخلها جملة شرط أخرى و فحص الم مة الت بداخل المتؽ ر هل الم مة أكبر من إذا كانت كذلن ف دخل إلى if وتز د ل مة المتؽ ر بممدار ثم فحص المتؽ ر مرة أخرى هل ل مته ألل من إذا كانت ألل ف نفذ ما بداخلها وتز د ل مة المتؽ ر بممدار ولو لم تكن ل مته ألل من فلن نفذ جملة if هذه و نزل إلى جملة else وتنمص ل مة المتؽ ر بممدار وبعد ذلن طبع ل مة المتؽ ر ف أول جملة else الت بداخلها كل ج مل الشرط هذه. 2

71 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 9

72 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"); 7

73 else Console.WriteLine("this number is Odd"); Inline Condition وجد نوع آخر من الجمل الشرط ة وتكتب ف سطر واحد وتعمل عمل : if ( الشرط ) خطؤ : صح ح? ت مثل if ت مثل else مثال : int x =10 ; ( x > 5 && x <20 )? " true" : " false " ; أطبع true ما عدا ذلن هذا الكود معناه أن ف حالة أن x أكبر من اطبع.false وألل من و مكننا إستمبال الم مة الناتجة من هذه العمل ة ف متؽ ر من نفس نوع الب انات الخارجة ف هذا الشرط تكون النواتج من النوع string ف مكننا إستمبالها ف متؽ ر نوعه string ف مكن أن تكون بهذا الشكل : 7

74 string str = ( x > 5 && x < 20 )? " True " : " False " ; Console.WriteLine( str ); الناتج : True أ ا كان الناتج true أو false س خزن بداخل المتؽ ر.str مكننا كتابة أي جملة نر د تنف ذها ال شترط جملة طباعة. مثال : int num = 20 ; num = ( num > 10 && num < 35 )? num +5 : num -1 ; Console.WriteLine( num ); الناتج : 25 7

75 switch ه جملة شرط ة ت ستخدم للتؤكد من الم دخالت ما إذا كانت صح حة أم خاطئة مثل if لكن هنان بعض الفروق البس طة ب نهما : If تستط ع التعامل مع أكثر من عمل ة بداخل الشرط الواحد. Switch ال تستط ع التعامل إال مع عمل ة واحدة بداخل الشرط ال نستط ع استخدام == > أو < أو & % بداخلها فه محددة. تكون سهلة ف عمل ة المراءة والفهم للكود أكثر من if أسرع من if ف حالة إستخدام االرلام المحددة النها تتوجه مباشرة إلى الشرط الصح ح وتنفذه. تكون صعبة ف عمل ات المراءة وفهم الكود ف حالة الشروط الكث رة جدا وعند إستخدام كم كب ر من االرلام للفحص عنها فضل إستخدام switch فضل إستخدامها ف حالة العمل ات البس طة والت ال تحتوي على أش اء محددة فه شمول ة أكثر على كل ه الشائعة ف اإلستخدام للج مل الشرط ة. وتكون ص ؽتها بهذا الشكل... switch( variable) : ل مة case statement; تستخدم لتولؾ الفحص عندما تحمك break; الشرط : ل مة case 7

76 الجملة المراد تنف ذها إذا كان statement; الشرط صح ح break; default: تن فذ هذه الجملة ف حالة عدم وجود شرط صح ح ت شبه else ف جملة if 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: مثال : 7

77 مكننا اإلستؽناء عن كلمة break ف بعض الحاالت. Console.WriteLine(" false "); 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; ال جب كتابة أي كود ف هذه الحالة //:85 case case 95: Console.WriteLine("Excellent"); break; default: Console.WriteLine("Didn't pass"); 7

78 break; معنى الكود أن : ف حالة إذا كان التمد ر س طبع ممبول وإذا كان 2 أو 9 س طبع امت از هذه الكود ؼ ر منطم و فض ل أن كت ب ب.if كان هذا للتوض ح فمط. لكن ف جملة ال default جب عل نا كتابة.break إذ لم ت كتب ف آخر جملة س حدث خطؤ ف الكود. ألن عند عدم كتباتها فهذا معناه أنه ف هذه الحالة أو الت تل ها "إذا كان الشرط صح ح" نفذ. ف حدث خطؤ ألنه تولع وجود حالة بعدها كشؾ عنها فك ؾ نفذ وال توجد حالة بعدها! إذا فال جوز تجاهلها و جب كتابتها ف آخر جملة. 7

79 حلمات التكرار ) Loop Statements ( ه عبارة عن تكرار جزء مع ن من الكود لعدد مع ن من المرات وه مهمة جدا النها توفر الولت والمجهود تنف ذ هذه الجملة عتمد على شرط وطالما الشرط تحمك فه ت ن ف ذ وتنته ثم تبدأ مرة أخرى إلى أن تصل إلى نها ة الشرط و تم إستخدامها عن طر ك بعض الج مل الت تستخدم ف عمل ة التكرار. إحدى أشكال الحلمات ه : while وتكون جملة التكرار بالشكل التال : ) شرط ( while الكود المراد تكراره ومعنى الكود أنه طالما أن هذا الشرط تحمك نف ذ. مثال : 77

80 using System; namespace First_program class Program static void Main( ) int i = 1; while( i < 10 ) Console.WriteLine( i ); لكن إذا كتبناها بدون عمل ة الز اده فستظل تعمل بدون تولؾ ألن الشرط دائما صح ح طالما الم مة لن تتؽ ر وستكون حلمة ال نهائ ة. ف جب أن نزود ل مة المتؽ ر بالممدار الذي نر ده فمثال إذا لولنا ++i س ز د بممدار 2=+i س ز د بممدار 3=+i س ز د بممدار وهكذا... لنكتبه بصورة صح حة : using System; namespace First_program class Program 72

81 static void Main( ) int i = 1; while( i < 10 ) Console.Write( i ) ; i++; س طبع : ثم س تولؾ عمل الحلمة ألنها وصلت لنها ة الشرط ح ث أن الشرط لن تحمك ألن ل ست ألل من عندها س تولؾ الشرط وتتولؾ حلمة التكرار. مكننا وضع الشرط الذي نر ده وبالز ادة الت نر د وكتابة أي كود بداخل جملة التكرار وس تم تنف ذه طالما أن الشرط صح ح. إذا تتكون جملة التكرار من : ل مة إبتدائ ة للمتؽ ر + while ( الشرط ) + ممدار الز ادة ( العداد (. تمار ن : أكتب برنامج طبع حروؾ الهجاء من Z : A using System; namespace First_program 79

82 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++; 2

83 هذا ف حالة إذا أردنا حروؾ الهجاء ف حالة الحروؾ الكب رة أما إذا أردناها ف حالة الحروؾ الصؽ رة سنبدأ ب 97 ونضع الشرط ألل من أو ساوي. س كون الناتج : a b.. z do.while وجملة التكرار هذه تختلؾ عن السابمة ف أنها تنفذ الكود الذي بداخلها أوال بعد ذلن تفحص الشرط وتتؤكد ما إذا كان صح حا أم خطؤ حتى إذا كان الشرط ؼ ر صح ح فإنها تنفذ الكود مرة واحدة فمط على األلل. وتكون بالشكل التال : using System; namespace First_program class Program static void Main( ) int i = 1; do 2

84 Console.WriteLine( i ); i++; while( i < 10 ) ; إذا تتكون جملة التكرار هذه من : ل مة إبتدائ ة للمتؽ ر + do + ممدار الز ادة ( العداد ) + while ( الشرط.) تمار ن : أكتب برنامج ؤخذ األرلام والرموز والحروؾ و طبع الرلم العشري الممابل لها ف ال.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 ) ; 2

85 for ه شكل من أشكال حلمات التكرار وه الشائعة ف اإلستخدام. وتكون بهذا الشكل : ممدار الز ادة أو العداد ; الشرط ; ل مة إبتدائ ة للعداد ) for ( وت كتب الجملة ف سطر واحد بخالؾ الجمل السابمة الت كانت كتب كل جزء منها ف مكان مختلؾ ف الكود. ت ستخدم ف الج مل الت نعرؾ عدد مرات تكرارها ف فضل إستخدامها. والفرق ب نها وب ن while while تستخدم عندما ال نعرؾ عدد مرات التكرار. مثال: using System; namespace First_program class Program static void Main( ) bool question=true; int choice; while(question==true) مكننا اإلستؽناء عن ( ==true ) // النها تلمائ ا تكون true ف الشرط إذا لم نؽ رها ب false 2

86 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++ ) 2

87 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 إذا أحتجنا إل ها. 2

88 مكننا أ ضا كتابة جملة 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); 2

89 توجد بعض الكلمات الت تستخدم بداخل جملة التكرار مثل : : 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 ); مثال : عندما تكون ل مة المتؽ ر ب س خرج من حلمة التكرار ولن كمل وس طبع فمط... 27

90 أما إذا كتبنا.. using System; namespace First_program class Program static void Main( ) for( int i = 1 ; i<=10 ; i++ ) if( i==4 ) continue; Console.Write( i ); هنا س تجاهل هذه الخطوه وس تخطاها و طبع : إذا كلمة break تكرار. ت كتب مع switch وت كتب أ ضا مع if لكن جب أن تكون بداخل حلمة 22

91 ( حلمات تكرار م تداخلة ) 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 عند ل مة = 1 i بعدها س جد for أخرى بداخلها أ ضا ف ظل نفذ الكود الذي بداخل for الداخل ة إلى أن تنته أي كون الشرط خطؤ ثم 29

92 صعد إلى for األولى زود ل مة i بممدار وطالما أن الشرط صح ح فإنه س ظل كرر هذه العمل ة إلى أن كون شرط for األولى خطؤ. ف المثال السابك : عندما تكون ل مة 1=i س دخل إلى for الثان ة وتكون ل مة 1=j ف طبع ناتج ضرب i, j ثم زود ل مة j بممدار فتكون و ضرب i*j وهكذا إلى أن تكون ل مة 12=j ف طبع ناتج الضرب ألننا تضمنا ف الشرط ( ألل من أو ساوي ) وبعدها تز د ل مة 13=j ف كون الشرط ف هذه الحالة خطؤ ألن ل ست ألل من أو تساوي. فتتولؾ هذه الحلمة و صعد إلى for األولى وتز د ل مة ثم دخل نفذ عمل ة تكرار أخرى و ظل كرر إلى أن تكون ل مة = 13 i ح نها س كون الشرط خطؤ وس تولؾ. 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 الت بداخلها ف هذا الكود. 9

93 أطبع هذا الشكل : * ** *** **** ***** ****** سنستخدم 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( ); 9

94 ف ذلن المثال حددنا له الشرط ف جملة التكرار الثان ة أال تتكرر إال إذا كان عدد األعمدة ألل من أو ساوي عدد الصفوؾ فمثال الصؾ األول طبع نجمة واحدة والصؾ الثان طبع نجمت ن وف الصؾ الثالث طبع ثالث نجوم وهكذا إلى أن تتولؾ حلمة التكرار الخارج ة. أثناء الطباعه نجعل األعمدة ت طبع بجانب بعضها حتى خرج ل هذا الشكل أي أننا ال نطبع ف دالة ) WriteLine( بل نطبع داخل الحلمة الخاصة باألعمدة ب ) Write( فمط وعندما نه الشرط ف الحلمة الخاصة باألعمدة خرج منها ف جد دالة ) WriteLine( ك نزل إلى صؾ جد د ألن هذا الصؾ لد أنتهى. مثال آخر : أطبع هذا الشكل. ****** ***** **** *** ** * نالحظ أن عدد األعمدة مكتمل ثم نمص بممدار مع كل صؾ جد د. مكننا كتابة الكود بؤكثر من طر مة فمثال مكننا كتابته بهذا الشكل... using System; namespace First_program class Program static void Main( ) for( int i = 1 ; i<=6 ; i++ ) 9

95 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( ); 9

96 مثال : أطبع هذا الشكل... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ف هذا الشكل نحتاج إلى طباعة مسافات على الجانب األ سر أوال ونالحظ أن هذه المسافات تمل بممدار مع كل صؾ جد د إذا سنطبع مسافات وأعمدة وصفوؾ سنحتاج إلى 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++ ) 9

97 Console.Write( "*" ); Console.WriteLine( ); مثال : أطبع هذا الشكل... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * هو نفس المثال السابك لكننا سنضاعؾ عدد النجوم فمط. using System; namespace First_program class Program 9

98 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( ); /* لك نزل إلى سطر جد د مع نها ة كل صؾ لد أكتملت دورته */ 9

99 مثال : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * أطبع هذا الشكل... 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( " " ); 97

100 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( ); ف هذا المثال أردنا طباعة مثلث متساوي السال ن لذا ضاعفنا األعمدة فجعلنا حلمة التكرار الخاصة باألعمدة تدور إلى ضعؾ عدد الصفوؾ. ثم أنمصنا منها ل كون رأس المثلث نجمة واحدة ول ست. ثم بدأنا من منتصؾ الصفوؾ بعدما أنته نا من المثلث متساوي السال ن لتتكون الشجرة. هذه األمثلة فمط لتجعلن متمكن من إستخدام حلمات التكرار بداخل بعضها. 92

101 foreach تستخدم أ ضا للتكرار لكن هذه الجملة تستخدم ف حالة وجود مجموعة من الب انات المرتبطة معا وم خزنة معا بداخل م ج م ع من الب انات مثل المصفوفة " Array ". 99 و كون تعر فها بهذا الشكل : ( المصفوفة أو مجموعة الب انات + الكلمة المحجوزة + in نوع الب انات ) foreach 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 ); مثال: هذا مجرد مثال للتوض ح فمط وسؤشرح المصفوفات الحما.

102 المصفوفات ) Arrays ( )المصفوفة االحاد ة أو الفرد ة ) المصفوفة عبارة عن مجموعة من المتؽ رات وتكون من نفس نوع الب انات وتكون متتال ة ف الذاكرة أي أنها تحجز خال ا متتال ة ف الذاكرة المإلتة RAM( ) و كون عنوان هذه الخال ا متتابع ف الذاكرة و كون لها حجم ثابت أي أننا جب أن نحدد عدد العناصر الت سنحتاج استخدامها فائدة المصفوفة أنها تمكننا من التعامل مع أكثر من عنصر ف نفس الولت ون ع د ل ونؽ ر من ل مته وتحدث عل ه أي عمل ة بطر مة سهلة جدا وبس طة مكننا أن نؽ ر ل مة آالؾ الب انات ف سطر واحد وذلن بإستخدام المصفوفة. تعر ؾ المصفوفة كون بالشكل التال : ; [ حجم المصفوفة ] + نوع الب انات + new = اسم المصفوفة [ ] نوع الب انات. Data Type + [ ] + Array_Name =new DataType [ size ]; جب أن نحدد حجم المصفوفة أثناء التعر ؾ وكل عنصر هو عبارة عن متؽ ر بداخل المصفوفة. أ ض فت كلمة new بداخل الس شارب وه تعبر عن أن المصفوفة د نام ك ة أي جوز تؽ ر حجمها فعند تؽ ر حجمها تؤخذ نسخة من المصفوفة المد مة وتنش ء

103 مصفوفة جد دة بنفس الحجم الذي حددته ح ث أن المصفوفة سابما كانت حجمها ثابت ؼ ر لابل للتعد ل أما حال ا جوز تؽ ر حجمها متى أردنا. لك نش ر إلى عنصر مع ن بداخل المصفوفة نكتب اسم المصفوفة وموضع العنصر بداخل المصفوفة نكتب موضع العنصر بداخل لوس ن ] ]. و بدأ ترل م المصفوفة من صفر ح ث كون أول عنصر ف المصفوفة ترل مه صفر. مثال : 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 - ; س ضع هذه الم م ف أول خال ا من المصفوفة أما س ضع لها ل مة إفتراض ة صفر. بال العناصرمن المصفوفة

104 arr*0+ arr*1+ arr*2] arr*3+ arr*4+ arr*5+ arr*6+ arr*7+ arr*8+ arr* دائما ما كون موضع آخر عنصر ف المصفوفة = حجم المصفوفة - مثال : إذا أردنا إجراء عمل ة جمع على العنصر الخامس ف المصفوفة ونض ؾ على ل مة العنصر الم مة إذا س كون العنصر رلم ألن المصفوفة تبدأ بصفر. فتحدث العمل ة بالشكل التال... arr* 4 + += 20 ; و مكننا أ ضا إضافة عنصر بداخل المصفوفة إلى عنصر آخر بداخلها أو نسخ ل مة عنصر إلى عنصر آخر

105 مثال: 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 +;

106 حدث التعد ل بهذا الشكل : Array.Resize( ref numbers, 20 ) ; كلمة Array ه عبارة عن class حتوي بداخله على دالة تستط ع إعادة تع ن حجم المصفوفة فتنسخ محتوى المصفوفة المد مة وت دخله ف المصفوفة الجد دة ح ث تنش ء مصفوفة جد دة بالحجم الجد د. ه دالة التعد ل وإعادة تع ن حجم المصفوفة وه دالة جاهزة ف اللؽة. : Resize : ref ه اختصار ل reference ومعناها أن هذه التؽ ر س حدث فعل ا ف هذا المكان بداخل الذاكرة ( RAM.) نمرر لهذه الدالة اسم المصفوفة والحجم الجد د. و تم التعامل مع العناصر داخل المصفوفة من خالل حلمات التكرار for أو foreach أو.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++ )

107 Console.WriteLine( num[ counter ] ); : length ه خاص ة ت رجع أو تحسب لنا حجم المصفوفة كان من الممكن أن نكتب المساحة بشكل مباشر لكن من المفضل أن نكتب الجملة بهذا الشكل حتى إذا تؽ رت المساحة فلن نضطر إلى تؽ رها ف كل الشروط المتعلمة بهذه المصفوفة فهذه الخاص ة تحسبها تلمائ ا. وسنعرؾ ماه الخصائص ف ما بعد. أو مكننا إستخدام foreach فه أبسط ف الكتابة من for وتؤت بنفس النت جة. foreach ( int count in num) Console.WriteLine( count ) ; أنشؤنا عداد لك دور على عناصر المصفوفة ثم طبع محتوى المصفوفة. مثال : أنش ء مصفوفة مكونة من 15 عنصر وأجعل المستخدم دخل ل م لهذه العناصر ثم أضؾ الم مة 5 إلى ل مة العنصر العاشر وأطبع كل ل م العناصر. using System; namespace First_program class Program static void Main( )

108 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 ) خطؤ ( num.length x counter < =

109 تمار ن : ادخل عناصر ف مصفوفة ثم اعكس هذه المصفوفة أي أن تجعل العنصر األخ ر كون ف ممدمة المصفوفة والعنصر األول نتمل إلى آخرها. 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; 7

110 فكرة البرنامج أننا سنجري عمل ة تبد ل ب ن كل عنصر ن متمابل ن وسنظل ن جر ي هذه العمل ة إلى أن نصل إلى منتصؾ المصفوفة أي أنه ستحدث عمل ة التبد ل 5 مرات ول س 10 ألننا لو أجر نا عمل ة التبد ل 10 مرات سترجع المصفوفة إلى ما كانت عل ه ف السابك مع مع 9 مع 2 مع 7 مع لو جعلنا ال for تدور إل ما بعد منتصؾ المصفوفة فإنها ستبدلهم مرة أخرى. لكن ماذا لو كان طول المصفوفة عددا فرد ا مثل 11 لن إثر ذلن ف ش ء ألن النوع int ال مبل إال أعداد صح حة فخارج المسمة س كون عدد صح ح وس تجاهل االعداد العشر ة فناتج لسمة 12 على 2 ساوي 5 وس كون ف منتصؾ المصفوفة رلم على م نه 5 أرلام وعلى ساره 5 أرلام سنبدل ال م ن بال سار والمنتصؾ لن تؤثر ألنه ف كل الحاالت س ظل ف المنتصؾ. 2

111 مثال : إذا أردت أن تبدل الثالثة أرلام الت على م ن الصفر بالثالثة الت على ساره هل س تؤثر مكان الصفر الجواب ال الفردي. نفس الفكرة لن تؤثر مكان العنصر الذي ف منتصؾ المصفوفة ذات الحجم وأنشؤنا متؽ ر ل حمل الم مة مإلتا حتى تتم عمل ة التبد ل ووضعنا به أول عنصر ثم وضعنا آخر عنصر ف مكان أول عنصر بعدها وضعنا الم مة الت بداخل المتؽ ر المإلت ف مكان آخر عنصر وهكذا. مثال : انش ء مصفوفة و أدخل بها عناصر ثم رتب العناصر تصاعد ا. 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++) 9

112 if( arr[ i ] > arr[ j ] ) int temp; temp = arr[ i ] ; arr[ i ] = arr[ j ] ; arr[ j ] = temp ; فكرة هذا البرنامج أننا نمارن كل عنصر بالذي ل ه فإذا كان ما ل ه ألل منه فإنه س ب دل الم مت ن ببعضهما. وكما عرفنا تتم عمل ة التبد ل ب ن ل مت ن عن طر ك وجود متؽ ر ثالث حمل ل مة أحدهما حتى تتم عمل ة التبد ل. تمار ن : أكتب كود جعل المستخدم بدل ب ن ل مت ن من المصفوفة مكونة من عناصر. خالل فهرس هذه الم م ف المصفوفة using System ; namespace ConsoleApplication class Program

113 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 ;

114 المصفوفة ثنائية االبعاد ه شكل من أشكال المصفوفات و كون لها رلم الصؾ والعمود. ب عد ن و تم التخز ن بها عن طر ك إستخدام جب أن تحدد عدد األعمدة والصفوؾ الت بها فمساحتها تساوي عدد الصفوؾ ف عدد األعمدة. مثال : عمود 2 عمود 1 عمود 0 صؾ 0 صؾ 1 صؾ هذه المصفوفة تحتوي على صفوؾ و صفر. وتتم عمل ة تعر ؾ المصفوفة بهذا الشكل: أعمدة وأ ضا بدأ ترل م الصؾ أو العمود من DataType + [, ] + name = new DataType [ rows, cols ]; int *, + arr = new int * 5, 4 + ; معنى هذا الكود أننا أنشؤنا مصفوفة ثنائ ة اسمها arr وبها صفوؾ و أعمدة.

115 فمثال إذا أردنا تخز ن ل مة ف مكان محدد ف المصفوفة فإننا نحدد مكان الصؾ والعمود. مثال : ف حالة تخز ن الم مة بداخل هذه المصفوفة نحدد بؤي صؾ و بؤي عمود وبتالل الصؾ مع العمود نضع الم مة تماما كالرسم الب ان للمحور ن ( س ص (. لنحدد مثال الصؾ الثالث والعمود الثان. فتكتب بهذا الشكل : arr[ 2, 1 ] = 100 ; عمود عمود 0 عمود 3 عمود صؾ 0 صؾ صؾ 100 صؾ 3 صؾ 4 تتم عمل ة اإلدخال لهذه المصفوفة بتلن الطر مة : سنفرض أن مساحة المصفوفة ه صفوؾ و أعمدة الطالب. وسنحفظ بداخلها أسماء

116 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( ) ) ; مثال :

117 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++ )

118 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);

119 تمار ن : أنش ء مصفوفت ن مساحتهما * الضرب ف مصفوفة جد دة. ثم أضرب المصفوفت ن ف بعضهما وخزن ناتج مالحظة : عند ضرب مصفوفت ن فإن كل صؾ ف المصفوفة األولى ( المصفوفة الثان ة (.) ) ضرب ف كل أعمدة مصفوفة مصفوفة 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 7

120 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 "); 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 "); 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++ ) 2

121 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 X X O X-O X O X O X O 9

122 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')

123 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( );

124 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++)

125 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;

126 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'

127 && 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:

128 Console.Write("o"); break; case empty: Console.Write(" "); break; if (j < 2) Console.Write(" "); if (i < 2) Console.WriteLine( ); Console.WriteLine("------"); Console.WriteLine( ); مكن تنف ذ اللعبة بشكل أبسط من هذا لكن لم نتطرق لهذه األجزاء إلى اآلن لذا فهذا كان مجرد تطب ك على المصفوفات فكل ما همنا هو إتمانها أكثر ومعرفة ك ف ة عملها.

129 النصوص ) Strings ( النصوص ه عبارة عن متسلسلة أو مصفوفة من الحروؾ ف مكنن فعل ما تشاء ف النص من حذؾ أو إضافة أو إلتصاص. ف مكنن تعر ؾ النص بهذه الطر مة : string var_name = " value "; الم مة أو النص جب أن وضع ب ن عالمت ن تنص ص وبداخلها مكنن أن تكتب أي ش ء حتى إذا كانت أرلام أو أو مسافة خال ة أو نص مدمج مع رلم فإنه س تعامل معها على أنها نص ألنها و ض ع ت ب ن عالمت ن تنص ص. مثل : string name = "123 mahmoud"; Console.WriteLine( name ); الناتج : 123 mahmoud و مكنن أن تض ؾ أي ل مة من النوع string أو char على ل مة المتؽ ر الذي كون من النوع string string name1 = "mahmoud", name2="soliman", name3; name3 = name1 + name2; أو مكننا أن نض ؾ النص أو الحرؾ الجد د على المد م بطر مة مباشرة. 7

130 مثال : string name ="Mahmoud"; name +=" Soliman"; Console.WriteLine( name ); الناتج : Mahmoud Soliman و مكنن أن تؤخذ الم م من المستخدم بالطر مة العاد ة. أول حرؾ ف النص ؤخذ الترل م ( index ) 0 عبارة عن مصفوفة من الحروؾ. مثال : string x = "Hello"; كما ف المصفوفة ألنه كما للت هو H e l l o Console.WriteLine(" the result,0-,1- ", x * 1 +, x * 4 + ); الناتج : e o - لمعرفة عدد حروؾ نص مع ن نستخدم الخاص ة ( Length (. Console.WriteLine( x.length ); الناتج : 5 2

131 مثال : أبحث عن الحرؾ 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 ثم أخذنا ل مته من المستخدم وعرفنا متؽ ر نوعه bool ؤخذ الم مة true أو flase ولد مررت له ل مة إبتدائ ة false أي أن الحرؾ الذي نبحث عنه ؼ ر موجود إال أن نجده ثم أنشؤنا حلمة بإستخدام for وعداد بدأ من الم مة صفر إلى ألل من الم مة search.length والت ت مثل حجم النص أو عدد حروفه. من الممكن أن تسؤل نفسن لماذا ال نكتب عدد حروؾ النص بشكل مباشر! ببساطة ألنه ف بعض البرامج ال نعرؾ عدد حروؾ النص ألنها تؤت من الم ستخدم فال مكن التولع بحجم النص و فضل دائما إستخدام هذه الخاص ة ف حالة المصفوفات. وبداخل الحلمة for نستخدم شرط أنه إذا و ج د الحرؾ الذي نبحث عنه نجعل ل مة المتؽ ر check = true ولو لم جده فتظل ل مته ب false كما كانت وهذه فائدة أن تمرر ل مة إبتدائ ة ب.false 9

132 وبعد أن تنته الحلمة نستخدم شرط آخر لنتؤكد هل تؽ رت ل مة 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 i ]; str2 += x* i +; Console.WriteLine( str2 ); أخذنا الم مة من المستخدم ثم أنشؤنا مصفوفة نوعها char أي من النوع حرؾ و كون حجمها نفس حجم النص ولذلن أستخدمنا الخاص ة str.length لك ترجع لنا حجم النص ثم أنشؤنا حلمة وجعلنا كل حرؾ من نها ة النص خز ن ف بدا ة المصفوفة. وأنشؤنا متؽ ر آخر نوعه string لك ن ع د ف ه تخز ن الحروؾ الت تؤت من المصفوفة. مالحظة : string.empty هذه لتفر ػ المتؽ ر من أي ل م موجودة بهذا المكان م سبما.

133 النص H e l l o المصفوفة x o أو مكننا اإلستؽناء عن المصفوفة الت من النوع 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 i ]; Console.WriteLine( str2 ); تمار ن : أمامن مصفوفة مكونة من + 0 * 1, 4, 5, 8, 8, 9, 9, متجاور ن. أطبع أكبر عدد مكون من رلم ن ف هذا المثال كون الناتج 99 static void Main( ) int* + arr =, 1, 4, 5, 8, 8, 9, 9, 0 -; int max = arr*0+;

134 string res = string.empty; int num = 0; for (int i = 0; i < arr.length - 1; i++) res = arr* i +.ToString( ) + arr* i ToString( ); num = Convert.ToInt32( res ); if (num > max) max = num; Console.WriteLine(max); ف هذا الكود عر فنا المتؽ ر max نوعه int لك حمل أكبر ل مة موجودة ثم عر فنا المتؽ ر res ونوعه string لك حمل كل عنصر ن متجاور ن ألننا سنضطر إلى دمج كل عنصر ن متجاور ن وال مكن الدمج إال ف النصوص لذا سنستمبل كل متؽ ر والذي ل ه ثم سنحولهم إلى نصوص من خالل الدالة ) ToString( وبذلن تحول الرلم ن إلى نص ثم ندمجهم ونخزنهم ف المتؽ ر res بعد ذلن ن حو ل النص المكون من الرلم ن المدمج ن إلى أعداد صح حة مرة أخرى لك نستط ع ممارنتهم بؤالعداد األخرى ألنه ال مكن ممارنة نص بعدد صح ح. توجد الكث ر من الخصائص والدوال الجاهزة الخاصة بالنصوص. Length string.concat( ) Contain( ) EndsWith( ) StrartsWith( ) ToUpper( ) خاص ة تحسب عدد حروؾ النص لدمج أكثر من نص مع بعضهم للبحث عن ممطع مع ن داخل النص وت ع د true أو false للتؤكد من نها ة النص هل نته بممطع أو حرؾ مع ن انت تحدده أم ال فه تع د true أو false للتؤكد من بدا ة النص هل بدأ بممطع أو حرؾ مع ن أنت تحدده أم ال وتع د true أو false لتحو ل النص إلى حالة الحروؾ الكب رة ( capital )

135 ToLower( ) Substring( ) Replace( ) لتحو ل النص إلى حالة الحروؾ الصؽ رة ( small ) لمطع حرؾ أو أكثر من النص إلستبدال حرؾ أو ممطع ف النص بم مة جد دة و وجد الكث ر من الدوال األخرى الخاصة بالنصوص. مثال : 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

136 مثال : أكتب برنامج حو ل النص إلى النظام الثنائ ( System (. Binary 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 كل حرؾ كون له ل مة عدد ة صح حة مناظرة له كما ذكرت ف ممدمة الكتاب والنص هو عبارة عن مجموعة من الحروؾ حتى المسافة الفارؼة ت عد حرفا فإننا نؤخذ الم مة العدد ة لكل حرؾ ونحولها إلى النظام الثنائ ونطبع ل مة أول حرؾ بالنظام الثنائ ثم نفرغ المتؽ ر الذي نجمع ف ه الم م الت تكون بالنظام الثنائ ل كون م ه ؤ إلستمبال ل مة الحرؾ الذي ل ه.

137 البرمجة كائنية التوجه ) Object Oriented Programming ( ( OOP ) البرمجة كائن ة التوجه ه عبارة عن طر مة لكتابة الكود لكنها جعلت الكود أسهل وأختصرت ف ه كث را ووفرت من الولت والمجهود بشكل كب ر جدا فه تتعامل مع كل ش ء على أنه كائن وهذا الكائن له صفات ووظائؾ فمثال اإلنسان هو كائن له صفات تم زه ووظائؾ موم بها. ) فمثال من صفاته ( لون البشرة : لون الع ن : الطول : ) ومن أفعاله ( ؤكل : مش : نام : وهكذا... إذا فكل كائن من نفس النوع متلن نفس اسم الصفات واألفعال لكن بتفاص ل مختلفة أي تختلؾ ب انات هذه الصفات واألفعال ألن لكل كائن صفاته وأفعاله الخاصة به. فالبرمجة كائن ة التوجه لامت على هذا األساس فمثال إذا كنت تر د إنشاء حساب على مولع الف س بون عند إدخال ب اناتن هل كتب لن مصمم المولع كود برمج خاص بصفحتن عند إنشائن لحساب على المولع بالطبع ال عندما تنش ء حسابا لن فإنن تؤخد نسخة من المولع األصل لكن الب انات مجردة أي بدون ب انات وتمألها أنت بب اناتن الخاصة

138 ف ذلن الولت أنت أخذت كائن ( نسخة ) من المولع وأدخلت ف ه ب اناتن أنت وشكل المولع ووظائفه متشابهه تماما عند كل الناس والب انات المجردة أ ضا متشابهه عند كل الناس فمثال هو طلب منن تحد د الجنس والعمر وهكذا وأنت تدخل ب اناتن هذه ه الب انات المجردة أي أنها ال تزال ال تحتوي على ل م وأي شخص جد د ر د إنشاء حساب فإنه س ؤخذ نفس النسخة من المولع و مألها بب اناته الخاصة. هذه مجرد أمثلة تشبيهية فمط. وهذه ه الطر مة الت بن ت عل ها لؽة الس شارب كما لولنا ف ممدمة الكتاب. إذا أ ن كتب الكود الذي ؤخذ منه الكائن نسخة من الب انات الت بداخله كتب بداخل class وال class هو البن ة التحت ة للبرمجة كائن ة التوجه. وتكمن لوة ال class ف عمل ة تسمى عمل ة تؽل ؾ الب انات أي حدد من ستط ع الوصول إلى الب انات والتعامل معها. وسنتحدث عن كل ش ء خص البرمجة كائن ة التوجه وال.class لكن أوال سنتحدث عن طرق الوصول للب انات أو التؽل ؾ.

139 التغليف ) Encapsulation ( توجد أنواع لتؽل ؾ الب انات ف لؽة الس شارب أو تسمى طرق الوصول للب انات. لبل البدا ة ف شرح هذه األنواع سؤ ذك ركم أن المشروع أو البرنامج هو عبارة عن مجموعة من namespaces وال namespaces عبارة عن مجموعة من ال.classes مكننا إنشاء أكثر من namespace ف المشروع و مكننا إنشاء أكثر من class نفس ال namespace و كون بداخل كل class الخصائص والدوال )الصفات والوظائؾ ) الخاصة به. بداخل ف هذه الحالة نحتاج إلى حما ة بعض الب انات الت تكون بداخل ال class مثال من ستط ع رإ تها والتعامل معها بداخل المشروع فمن الممكن أن تكون بعض الب انات ل class مرئ ة ف class آخر وبعض الب انات ؼ ر مرئ ة وال مكن التعامل معها إال بداخل ال class الذي ك ت بت بداخله فمط المبرمج حدد من ستط ع رإ ة الب انات بداخل المشروع سواء class ف نفس ال namespace أو class ف namespace أخرى بداخل المشروع. 7

140 أول طر مة للتؽل ؾ ه : 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; 2

141 كل ما عل ن معرفته ف هذا الكود أننا استطعنا إسناد ل مة للمتؽ ر X ف ال class اآلخر Program وأستطعنا رإ ته والتعامل معه. و تم الوصول إلى محتوى ال class من خالل كائن أو نسخة object( (من هذا ال class ثم النمطة ).( )dot( النوع الثان وهو : private 2 هذا النوع جعل إستخدام الب انات الت من نفس نوعه تمتصر على ال class المكتوبة بداخله فمط أي أنه حر م إستخدام الب انات الت من نوعه إلى أي class آخر حتى لو class ف نفس الnamespace و مكننا التعامل مع الب انات الت من هذا النوع بداخل ال class الذي ك تبت به فمط ولو حاولنا تنف ذ الكود السابك على النوع private فإن المترجم س خرج لن خطؤ أنه ال مكن الوصول لهذا المتؽ ر بسبب الحما ة الت متلكها. 9

142 النوع الثالث : 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 ; النمطتان تعن أن ال " Program " class لد ورث ال " prog " class و مكنه التعامل مع الب انات الت بداخله كؤنها ك ت بت بداخله لكن ل س كل الب انات فمط المسموح به مثل public و protected إلى اآلن وعندما نصل إلى الوراثة سنفهم كل ش ء عنها.

143 هذه الخطوة >-- ); Program( Program p=new تعن أننا أخذنا نسخة ( كائن ) من هذا ال )Program( class p >----- كائن ( object ) Program >----- class

144 النوع الرابع : internal 4 وه تعن أننا للبرنامج ال assemply نستط ع رإ ة الب انات الت من هذا النوع ف كل ال assemply مكن أن تحتوي على أكثر من namespace exe أو ال DLL ملؾ ال >---assemply النوع الخامس : protected internal 5 نستط ع رإ ة الب انات والتعامل معها ف كل ال assemply لكن جب أن كون ال class الذي ك ت ب ت بداخله موروث لل class الذي سنستخدمها ف ه. protected internal int x;

145 ) Static ( المتؽ رات والدوال الت بداخل ال class و كون نوعها static مكن التعامل معها إال من خالل اسم ال class نفسه. تكون ثابتة أي أنه ال نستخدم static عندما نر د التعامل مع الدالة أو الحمل خارج ال class بدون الحاجة إلى أخذ نسخة منه ( object ) فمثال الدالة ) WriteLine( ه دالة static داخل 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; مثال :

146 خطؤ ألن الدالة من النوع 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;

147 جوز إسناد ل مة للمتؽ ر الذي من النوع static من خالل الدالة ف الحالة العاد ة // static void Main( ) مثال : using System; namespace First_program class A public static int x ; class B public static void variables() A.x = 5 ;

148 ال( الدوال ) Methods or Functions ( تحدثنا ف ممدمة الكتاب عن الدوال أو الوظائؾ وما عملها لبل وجود فكرة الدوال كنا إذا أردنا إستخدام جزء مع ن من الكود الذي كتبناه مرة أخرى فكان جب كتابته ثان ة كلما أحتجنا إل ه فكان ؤخد ولت ومجهود فلما ال نكتب جزء مع ن من الكود مرة واحدة ونستخدمه متى أحتجنا إل ه! إذا ما الكود الذي كتب بداخل الدالة! نكتب الكود الذي نر د إستخدامه أكثر من مرة أي كود نر د تنف ذه. والدوال ت ستخدم إلعطاء ل م لخواص ال class والتعامل معها. و ج د ت فكرة الدوال لبل وجود البرمجة كائن ة التوجه والدوال عامل رئ س ف البرمجة فال مكن اإلستؽناء عنها. أي دالة كون لها ل مة عائدة ل ما ك ت ب بداخلها ما عدا نوع واحد من الدوال ( void ع د ل مة معنى ل مة عائدة أن الدالة كلها كون لها ل مة واحدة مكن إستخدامها وإدخالها ف عمل ات أخرى سنفهم معنى الم م العائدة بمثال. أوال سنعرؾ طر مة تعر ؾ الدالة. مكننا تسم ة الدالة بؤي اسم نر ده. ( ) + اسم الدالة + الم مة العائدة من الدالة + طر مة الوصول Access_Modifier + Return_Type + Name_of_function + ( )

149 نكتب الكود داخل الموس ن هنا. // طر مة الوصول تعن صالح ات إستخدام الدالة أ ن نستخدمها ومن ستط ع إستخدامها. لد تكون : public, private, protected, internal, protected internal. اسم الدالة : توجد طرق لكتابة أسماء أعضاء ال class سواء كان متؽ ر أو دالة ه مجرد طرق متعارؾ عل ها مكننا التؽاض عن هذه الطرق وكتابتها بالشكل الذي نر د لكن فضل كتابتها بهذه الطرق. أول طر مة : Pascal case - 1 كون أول حرؾ من االسم حرؾ كب ر ( Capital ) وإذا كانت الكلمة مكونة من ممطع ن ف كون أول حرؾ من الممطع األول كب ر وأول حرؾ من الممطع الثان كب ر مثل : UserName أو User_Name 7

150 ثان طر مة : Camel case 2 وف هذه الحالة كون أول حرؾ من الممطع األول صؽ ر و أول حرؾ من الممطع الثان كب ر مثل : username password وهكذا... ثالث طر مة : 2 UpperCase 3 هذه الحالة تكون كل حروؾ االسم كب رة وتستخدم مع االسماء الت تمتلن حروؾ لل لة مثل حرف ن أو ثالث ومع الثوابت. مثال : const string NAME = "mahmoud" ; int GPA; وهكذا... جب أن كون اسم الدالة متصل وال تفصله مسافة فمثال ال نستط ع تسم ة دالة أو متؽ ر بهذا الشكل user name النه توجد مسافة تفصل االسم وهذا ال جوز وف حالة األسماء الت تتكون من أكثر من ممطع مثل... First Name نستخدم ( _ ) فتكون.First_Name أنته نا من تسم ة الدالة.

151 نوع الدالة كون : int, float, double, long, short, string, char, bool هذه األنواع تعن أن نوع الدالة كون من نفس نوع الم مة العائدة منها فمثال إذا كانت الدالة int إذا جب أن تع د ل مة صح حة ولو كانت string جب أن تع د نص أو كلمة float جب أن تع د ل مة كسر ة. bool تع د true أو false وهكذا... سنفهم معنى الم مة العائدة للدالة لكن مإلتا حاول أن تتعلم ك ف ة بناء ه كل الدالة وماذا كت ب بداخلها وك ؾ ت ست خد م. بعد كتابة الدالة واإلنتهاء منها ك ؾ نستخدمها وكم مرة نستخدمها عن طر ك إستدعاءها بإسمها فمط ونستدع ها بعدد المرات الت نر د نستط ع إستدعاءها وإستخدامها مال ن المرات بدون إعادة كتابة الكود المكتوب بداخلها. اتفمنا أن الدالة كون لها ل مة واحدة عائدة ما عدا نوع واحد فما هو هذا النوع هو void أي ال ترجع أي ش ء وال كون لها ل مة نستط ع إستخدامها ف عمل ات أخرى أي عندما ننته من تنف ذ الدالة ال نر د منها أي ش ء آخر. 9 مالحظة : سنستخدم ال class الرئ س وسنكتب بداخله الدوال الت نر دها. سن ط ب ك عل ه "مإلتا". و كون بداخله الدالة الرئ س ة الت بدأ تنف ذ الكود منها. مكننا كتابة الدالة الجد دة فوق الدالة الرئ س ة ( Main ) أو تحتها ال وجد فرق. " ت كت ب الدوال بداخل " class using System; namespace AnyThing class Program مثال :

152 سنكتب كل الدوال هنا static void Main( ) هذا هو الشكل الذي سنعمل عل ه. مثال: أكتب دالة تطبع.Hello World لبل البدء ف كتابة الكود جب أن نحلل السإال أوال بعدها نكتب الخوارزم ات لهذه المسؤلة " الخوارزم ات أي نحدد خطوات الحل خطوة بخطوة ونحل المسؤلة بطر مة جبر ة " إذا سرنا على هذا النمط فلن نواجه أي صعوبة ف كتابة أي كود. لنحلل هذه المسؤلة... نر د إنشاء دالة تطبع Hello World هل نحتاج ل مة لهذه الدالة ف ما بعد هل سنجري عل ها أي عمل ة جمع أو طرح أو لسمة أو سنؤخذ ل متها ندخلها ف دالة أو متؽ ر آخر إذا كان الجواب ال... فلن نحتاج أن كون لها ل مة عائدة وستكون نوع الدالة.void ونسم ها باالسم الذي نر د لكن فضل أن كون اسم معبر عن الوظ فة الت تموم بها الدالة مثال إذا كانت دالة طباعة.. نسم ها مثال print أو show أو view أي اسم نر ده فلن حدث هذا فارق ف أي ش ء. مالحظة : طر مة الوصول لن تصنع فارق هنا ألننا لن نستخدم الدالة ف class خارج إنما سنستخدمها بداخل ال class المكتوبة بداخله فلن فرق ما إذا كانت public أو private أو protected الكل س ان ف هذا الولت. اتفمنا أن هذا لمجرد التطب ك مإلتا فمط وبعدما ننته من تعلم كتابة الدوال والتعامل معها سنتعلم ك ؾ نستخدمها ف أكثر من class آخر.

153 using System; namespace ConsoleApplication1 class Program public void print() Console.WriteLine("Hello World") ; إذا أنته نا من كتابة الكود الخاص بالدالة ك ؾ سننفذها وأ ن عندما تفتح visual studio فؤنت تجد class الكود منها مكتوبة بداخله. مكتوب والدالة الرئ س ة الت بدأ تنف ذ فنستدع الدالة الت أنشؤناها بواسطة كتابة اسمها ف الدالة الرئ س ة وبما أن الدالة الرئ س ة نوعها static ف جب أن تكون الدالة الت سنكتبها نوعها static أ ضا حتى تستط ع الدالة الرئ س ة رإ تها مكننا إستدعائها بطر مة أخرى عن طر ك إنشاء كائن من هذا ال class لكن عندما نصل إلى شرح ال class وك ف ة التعامل معه وطر مة إنشاءه سنتعلم كل ش ء خص الدوال وكل طرق التعامل معها بداخل ال.class حال ا أي دالة نوعها static جب أن كون ما سنستدع ه بداخلها سواء دالة أخرى أو متؽ ر من نفس نوعها.. أي.static وس تم تعر فها بهذا الشكل : طر مة الوصول + static + الم مة العائدة من الدالة + اسم الدالة ( ) الكود Access_Modifier + static + Return_Type + Name_of_function + ( ) The code

154 مثال : using System; namespace ConsoleApplication1 class Program public static void print() Console.WriteLine("Hello World"); static void Main( ) print ( ) ; عند كتابة اسم الدالة ون شؽ ل البرنامج س ذهب إلى المكان الذي كتبنا ف ه كود الدالة و تم تنف ذ ما بداخلها. س طبع Hello World ف عمل ة إنشاء الدالة إذا كنا سنستخدم متؽ رات ف هذه الدالة ف مكن أن نمرر هذه المتؽ رات للدالة أثناء التعر ؾ وتسمى ف هذا الولت )Parameters( ال وجد حد مع ن لعدد مدخالت دالة " parameters " فمط ما سنستخدمه وما نحتاج إل ه وهذه المدخالت عند إستدعاء الدالة سنضطر إلى تمر رل مها إلى الدالة حتى تحدث العمل ة الت نر دها من الدالة وإعطاء مد خل للدالة هو أمر إخت اري لكن هنان بعض الدوال فض ل تمر ر م دخالت لها إلجراء عمل ات عل ها وتم ز كل دالة عن األخرى. فمثال عند تسج ل الدخول لحساب ف س بون فإنن تدخل البر د االلكترون وكلمة المرور فهذه الب انات الت تدخلها تكون م دخل لدالة تفحص كلمة المرور والبر د االلكترون الخاص ن بن الم سجل ن على لواعد الب انات.

155 و تم تعر ؾ الم دخل بالطر مة العاد ة النه متؽ ر عادي. 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 ) ;

156 ف هذا الكود أنشؤنا الدالة وأنشؤنا لها م دخل ن وتمت عمل ة الجمع بداخل الدالة ثم أستدع نا دالة جمع الرلم ن ف الدالة الرئ س ة لكن الدالة الت أنشؤناها تؤخذ م دخل ن لذا سنضطر إلى تعر ؾ متؽ ر ن وتمر رهما إل ها ولد أخذنا ل م المتؽ رات من المستخدم عند تشؽ ل البرنامج وعندما صل المترجم إلى السطر الذي استدع نا به الدالة ذهب إلى هذه الدالة أ ا كان مولعها ف الكود و نفذ ما بداخلها. الدالة الت من النوع void ال نستط ع عمل أي عمل ات عل ها فال مكن أن ندخلها ف أي عمل ة أخرى وال نستط ع إجراء عمل ة طباعة عل ها بإستخدام دالة Console.WriteLine( ) وال نستط ع فعل ذلن : int temp = print( number1, number2 ) +2; ال نستط ع تمر رها إلى متؽ ر أو فعل أي ش ء ف ها ألنها ل س لها ل مة عائدة. ماذا إذا أردنا أن نستخدم ل مة ناتج الجمع ونسندها إلى متؽ ر آخر لنحلل المسؤلة... ناتج جمع رلم ن من النوع int عدد صح ح أ ضا. ماذا س كون نوع ناتج الجمع إذا س كون نوع الم مة العائدة من هذه الدالة int ف كون نوع الدالة.int و جب ف هذه الحالة أن نستخدم الكلمة المحجوزة ف اللؽة return ف نها ة الكود نكتب الم مة العائدة من هذه الدالة وكل دالة كون لها ل مة واحدة فمط عائدة. using System; namespace ConsoleApplication1 الم مة + return مثال :

157 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 ) ; Console.WriteLine( temp ) ; ف هذا الكود أنشؤنا الدالة وأصبح نوعها int أي الم مة العائدة منها int الدالة كاملة ف ذلن الولت ه عبارة عن ل مة واحدة مكن أن نفعل بها أي ش ء وأستدع ناها ف الدالة الرئ س ة ومررنا لها الم دخالت الت عرفناها وأخذنا ل مهم من المستخدم بعد ذلن مررنا الدالة كاملة إلى متؽ ر إذا هذا المتؽ ر حال ا حمل ل مة الدالة. ثم أضفنا إلى ل مة الدالة فمثال إذا أدخل المستخدم و س كون ناتج الدالة وس ض ؾ عل ها ثم س ضع الم مة الجد دة ف المتؽ ر.temp ماذا لو كانت العمل ة الت ستتم ف الدالة ه لسمة ول ست جمع إذا ف وجد إحتمال أن كون ناتج المسمة عدد كسري ف جب أن نؽ ر نوع الدالة لنفس نوع الم مة العائدة منها. أي كون نوعها float أو.double

158 مالحظة : م دخالت الدالة أثناء اإلنشاء تسمى " 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 ) ;

159 تمار ن : أكتب دالة تؤخذ من المستخدم األس واألساس وتخرج الناتج. مثال االساس واألس = األساس واألس = 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( ) ); 7

160 Power ( Base,Power ) ; // ( 2,6 ) الناتج : 64 وتوجد دالة جاهزة بداخل اللؽة تسمى pow داخل class سمى Math Math.Pow ( 2, 6 ) ; س خرج لن نفس النت جة لكن جب أن تعتمد على نفسن ف مرحلة التعلم وتتعلم ك ؾ تنشئ دوال بنفسن. تمار ن : أكتب دالة تؤخذ رلم من المستخدم وتع د الجذر الترب ع لهذا الرلم إن و جد. using System; namespace ConsoleApplication1 class Program public static void SQRT( int num ) 2

161 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 ) 9

162 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

163 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 :");

164 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;

165 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" تؤخذ ثالث ل م وتطبع ناتج جمعهم. وف دالة ال Main أستدع نا الدالة sum وه تؤخذ ثالث ل م كما ذكرت ثم مررنا لها الدالة a وبعد ذلن مررنا للدالة a الم مة 7 والم مة األخرى كانت عبارة عن الدالة b ومررنا للدالة b الم مة والم مة األخرى كانت عبارة عن الدالة c ومررنا لها الم مة والم مة األخرى كانت عبارة عن الدالة d ومررنا للدالة d الم مت ن و. عند تنف ذ هذا الكود فإن الدوال الداخل ة ه الت ت نف ذ أوال وبما أن هذه الدوال ذات ل مة عائدة فإن كل دالة ت ع د ل مة واحدة فمط. وتكون هذه الم مة ه الم دخل اآلخر للدالة الت تسبمها. ف هذا المثال الدالة d تؤخذ الم مت ن و ووتع د ناتج ضربهما أي 2 إذا تكون الم متان اللتان ممرناهما للدالة c هما و 2 ثم تع د الدالة c ناتج طرحهما فتع د الم مة - وبذلن تكون الم م الممررة إلى الدالة b ه و - ثم تع د الدالة b ناتج جمعهما فتع د الم مة صفر وبذلن تكون الم م الممررة للدالة a ه صفر و 7 وتع د الدالة a الم مة األكبر ف هما فتع د الم مة 7 ( 7, 5,2) وبذلن تكون الم م الت م ر رت للدالة sum ه : وتطبع ناتج جمعهم ف كون

166 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);

167 الناتج : 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);

168 الناتج : 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;

169 الم م الجد دة لن تإثر ف المتؽ رات ألننا مررنا للمتؽ رات ل م و ضعت ف المتؽ رات األصل ة ال الن سخ. مرجع ة ف الدالة والم م تمار ن : 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 7

170 out إذا أنشؤنا دالة تؤخذ م دخل ن ووأردنا إستدعاء هذه الدالة ف دالة أخرى أو أي مكان ف الكود ومررنا متؽ رات للدالة ف االستدعاء لكننا لم نعط ل م لهذه المتؽ رات ونر د أن نؤت بالم م من الدالة نفسها ف الحالة العاد ة هذا ال جوز و جب أن نعط ل م للمتؽ رات الت سنمررها كم دخالت للدالة حت إذا أدخلنا لهذه المتؽ رات ل م بتدائ ة ف الدالة. إلستخدام الم م الت أستخدمناها ف الدالة جب أن نحدد له أنه س ؤت بم م لم دخالت الدالة من الدالة نفسها. 2

171 مثال : 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 الت تؤت من الدالة. فإنه س تجاهلها و ستخدم الم م الخارج ة 9

172 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 تتطلب أن تدخل ل م للمتؽ رات الت ستمررها للدالة لحظة اإلستدعاء. 7

173 الخط الذي تحت المتؽ ر ن لحظة إسنادهما للدالة عن أنه جب أن نعط لهما ل م ولت تعر فهما. مثال : أكتب دالة لتنف ذ عمل ة المضروب لرلم دخله المستخدم. مثال لمضروب ال : = * * * 7

174 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) ; 7

175 params تستخدم كلمة params عندما ال نعلم عدد م دخالت ( parameters ) الدالة وعدد الم دخالت ف هذه الدالة عبر عن حجم المصفوفة. مثال : 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 عدد م دخالت الدالة كون ؼ ر محدود أي مكننا تمر ر العدد الذي نر ده لكن مع كل م دخل نض فه ز د حجم المصفوفة بممدار فمثال حجم المصفوفة ف هذا الكود س كون وس طبع الم مة األكبر ف هذه المصفوفة. 7

176 الدالة ذاتية اإلستدعاء ) Recursion function ( وجد نوع من الدوال سمى الدالة العائدة أي الت ت ستدعى بداخل نفسها إذا أ ستدعت دالة بداخل نفسها فإنها تظل تستدع نفسها إلى أن تولفها بشرط لذا ف جب تحد د شرط لها لك تتولؾ. سننفذ نفس برنامج المضروب بها بدون إستخدام loop using System; namespace ConsoleApplication1 class Program public static int factorial ( int num ) if( num<=0 ) return 0 ; لتولؾ الدالة عند هذا الرلم // ) num==1 else if ( return 1 ; else return ( num * factorial(num-1)); static void Main( ) 7

177 int number = int.parse( Console.ReadLine ( ) ); Console.WriteLine ( factorial ( number ) ) ; الناتج : جب أن كون نوع الدالة أي نوع ؼ ر void فال مكن أن كون void ألن طر مة عمل هذا النوع من الدوال هو أنها تستدع نفسها مرة أخرى بداخل نفسها فإذا كان نوعها void فإننا لن نستط ع عمل أي عمل ة عل ها فنحن هنا نحتاج إلى أن نضرب الرلم ف ل مة الدالة ونطرح من الرلم إلى أن صل الرلم الم دخل إلى. فإذا أدخل المستخدم صفر أو ل مة ألل من الصفر بالسالب فإنها سترجع صفر وإذا أدخل فإن الدالة سترجع وإذا أدخل رلم فإنها ستضرب الرلم ؾ ل مة الدالة نالص وتستدع نفسها مرة أخرى ف كون الرلم ثم ثم وتتولؾ وتع د ناتج ضرب هذه الم م مع بعضها فتكون ل مة الدالة كلها تساوي * * * أي. مثال : أحسب مجموع األرلام من رلم دخله المستخدم إلى رلم أكبر حدده المستخدم أ ضا بدون إستخدام.loop مثال من إلى using System; namespace ConsoleApplication1 7

178 class Program public static int sum ( int start, int end) لتولؾ الدالة عند هذا الرلم // ) start>end if( 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 ) ) ; 7 مثال : أنش ء دالة تؤخذ مصفوفة كم دخل وتخرج أكبر ل مة بهذه المصفوفة بدون إستخدام حلمات تكرار. using System; namespace ConsoleApplication19 class Program static int max = int.minvalue; static void fun(int[ ] arr, int low)

179 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 مكنن وضع ل مة إبتدائ ة صفر لكن بإفتراض أن األعداد المتواجدة ف المصفوفة كلها سالبة فف هذه الحالة لن كون هنان رلم سالب أكبر من الصفر و كون الناتج صفر وهذه النت جة خاطئة ثم أنشؤنا دالة void وكان من الممكن أن تكون int ثم ت ع د ل مة ال max من خالل كلمة return وهذه الدالة تؤخذ مصفوفة نوعها int وتؤخذ أ ضا أصؽر index ف المصفوفة الت سنعمل عل ها ودائما ما كون الصفر ونكتب الشرط الذي نر د أن تتولؾ الدالة عنده متى تتولؾ الدالة! عندما نصل إلى آخر index ف المصفوفة أي أن المتؽ ر الذي سمى low عندما صل إلى آخر index فإنها تتولؾ بعد هذه العمل ة. فمثال إذا كان حجم المصفوفة 7 فتكون آخر ل مة 77

180 صل إل ها المتؽ ر low ه 6 ثم بعد ذلن نتحمك من الم م الموجودة بالمصفوفة ما إذا كانت أكبرمن ل مة ال 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 ) ) ; 72

181 مكن للدالة أن تؤخذ مصفوفة و تم التعامل معها بطر مة عاد ة جدا. تم إدخال المصفوفة ك ( 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 ) ; 79

182 ) Object, Var, Dynamic ( وجد ثالثة أنواع من الب انات مكنهم إستمبال أي ب انات من أي نوع سواء كانت الب انات رلم صح ح أو كسر أو نص أو حرؾ أو أي نوع آخر لكن وجد فرق ب ن الثالثة أنواع. أول نوع هو : object كل أنواع الب انات ه عبارة عن ( object ) ف مكنه أن ؤخذ ب انات من أي نوع. وهو ال class الرئ س لكل أنواع الب انات و كون ف لاعدة هرم أنواع الب انات. لكن ( object ) ال فهم معنى الب انات الت بداخله فال مكنه بداخله مع متؽ ر آخر. إجراء أي عمل ة على ما مثال : object x = " aaa " ; string y = x خطؤ ال مكن ألي نوع ب انات آخر من األنواع المعروفة أن حمل ل مة متؽ ر من النوع object ألن نوعه عتبر ؼ ر معلوم هو فمط حمل ب انات بداخله لكن ال علم نوعها. فال مكنه التعامل إال مع object مثله. لكن ماذا لو أردنا تخز ن الم مة الت تؤت من متؽ ر نوعه object جب ف ذلن الولت أن نحولها لنفس النوع الذي ستخزن ف ه فمثال لو أردنا تنف ذ نفس العمل ة السابمة سنضطر إلى تحو ل ال x إلى نفس نوع ال y. 2

183 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 2

184 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( ) 2

185 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 "); فلن نفذ ألن المتؽ ر x عدد صح ح ول س نصا إذا فالكلمة المحجوزة is تتؤكد من الب انات هل هو متطابك أم ال. 2

186 object var ه مثل لكن وجد بعض اإلختالفات ب نهم. فمثال عند تعر ؾ متؽ ر نوعه var ال مكن تؽ ر الم مة الت بداخله لنوع آخر. مثال : var x = 3 ; خطؤ ; " aaa x = " هو مبل نوع واحد فمط فعندما مررنا له الم مة فهو تعامل مع المتؽ رعلى أنه int و جب أن نمرر له ل مة أثناء تعر ؾ المتؽ ر. فال جوز أن نعرؾ المتؽ ر من النوع var بدون تمر ر ل مة له ف مرحلة التعر ؾ. var x ; خطؤ مكنه أن ؤخذ أي ل مة. لكنه تم ز عن أن object ف أنه عندما ن عر ؾ متؽ ر من نوعه فإنه عرؾ نوع الم مة الت بداخله و مكننا أن ندخلها ف متؽ ر آخر من نفس نوعها. var x = " aaa " ; string y = x ; مثال : و مكننا إجراء أي عمل ة عل ه طالما أننا نستخدمه مع متؽ رات من نفس نوعه. لكن إذا أدخلناه ف متؽ ر من نوع آخر ف جب أن نحول نوعه أوال لنفس النوع الجد د. مثال : var x = 3.4f ; int y = ( int ) x; 2

187 مالحظة : الم م الكسر ة كون نوعها تلمائ ا double إذا أردناها أن تكون float فإننا نكتب حرؾ f بجانب الم مة. ال ستخدم لتعر ؾ الدوال أو حتى المصفوفات بداخل الدوال. فهو ستخدم لتعر ؾ المتؽ رات فمط 2 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 ; لن ظهر الخطؤ ف الكود لكنه س ظهره عند تشؽ ل البرنامج. مكننا أن نستخدمه ف تعر ؾ دالة أو مصفوفة بدون مشكلة.

188 تمار ن : أكتب دالة لتسج ل عمل ة دخول إلى نظام أو مولع له بر د إلكترون وكلمة سر بإفتراض أن البر د اإللكترون الم سجل على لاعدة الب انات هو Mahmoud@gmail.com وكلمة السر ه mahmoud12345 using System; namespace ConsoleApplication1 class Program public static void Login ( string _ , string _Password ) if ( _ == " Mahmoud@gmail.com " && _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 ); 2

189 ) Classes ( ذكرت مسبما نبذة عن البرمجة كائن ة التوجه وعن ماه ة ال class سنتعلم ك ؾ ن نش ء ال.class عندما ن نش ء class فإننا ن نش ء نوع من الب انات التى نستط ع أخذ عدد ؼ ر محدود من النسخ من هذا النوع الواحد ولد شرحت مثال لمولع الف س بون فمثال صفحتن الشخص ة تكون عبارة عن class به كل ب اناتن الشخص ة وعند تسج ل الدخول كون class به دوال لتنف ذ عمل ة الدخول كل شخص كون له ب اناته الخاصة أي أن كل شخص لد أخذ نسخة من هذا ال class ومألها بب اناته الخاصة. إذا كنت تر د إنشاء برنامج أو مولع و وجد عل ه مستخدمون وكل مستخدم له ب انات بؤنواع مختلفة مثل العمر واالسم وتار خ الم الد... ك ؾ ستربط كل هذه الب انات بمستخدم واحد! هذه التمن ة جعلت البرمجة عامة سهلة ومرنة. توجد لاعدة ف البرمجة الكائن ة تمول أن كل ش ء هو عبارة عن كائن. طر مة التعر ؾ : نكتب كلمة class ثم اسم ال class مكن أن نسم ه بؤي اسم نر ده لكن فض ل أن كون اسم عب ر عما موم به هذا ال class class Name 27

190 و كتب بداخل namespace طر مة الوصول ألي class تكون internal تلمائ ا و مكنن تؽ ره إلى public والب انات الت تكون بداخل ال class تكون private تلمائ ا ما لم نؽ رها إلى نوع آخر. إذا ماذا نكتب بداخل ال class نكتب بداخله كل الدوال الت نحتاجها لتنف ذ عمل ة مع نة والمتؽ رات الت سنستخدمها المتؽ رات الت بداخل ال class ؼالبا ما تكون private ونستخدمها من خالل الدوال و كون نوع الدالة.public الطر مة الم تعارؾ عل ها أن كتب أول حرؾ من اسم ال class بحرؾ كب ر مثل class Login مثال : using System; namespace ConsoleApplication1 class First class Program static void Main( ) 22

191 مكننا إنشاإه عن طر ك كتابته مباشرة كما فعلت لكن فضل أن كون كل class ف صفحة مستملة لك كون شكل الكود منظم وسهل ف المراءة والتعد ل. نذهب إلى اسم المشروع على الف جوال ستود و ثم نضؽط ضؽطة م ن بالمإشر فتظهر لائمة بها كلمة Add ونضؽط على class ونسم ه ونضؽط enter هكذا نكون لد أنشؤنا.class ) ( 29

192 ) ( لك نؤخذ نسخة من هذا ال class بكل الب انات الت بداخله " المسموح الوصول إل ها فمط " نكتب اسم ال class ثم اسم المتؽ ر لكن ف هذه الحالة سمى كائن ( object ) ول س متؽ ر. using System; namespace ConsoleApplication1 class First public int age ; string name ; 9

193 class Program كائن ) Object ( نسخة من ال class static void Main( ) First obj = new First ( ); Class تستخدم الكلمة المحجوزة new لخلك كائن جد د واسم ال class تبعه لوس ن سمى ( constructor " م ش د " ) سنعرؾ ماهو الم ش د الحما كل ما عل ن معرفته مإلتا أن هذه طر مة تعر ؾ ال class وأخذ نسخة منه أو إنشاء كائن جد د منه. عندما ن نش ء كائن )object( من class هذا ال class المسموح له رإ تها. فإنه ف ذلن الولت حتوي على كل خواص نستط ع الوصول إلى كل خصائص ال class من خالل "اسم الكائن )object( متبوعا بنمطة " (. ) - بعدها مكننا أن نمرر له الم مة. 9

194 مثال : أكتب 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 = " " ; أوال أنشؤنا class بعد ذلن عرف نا الخصائص الت بداخله وإذا أردنا رإ تها خارج هذا ال class جب أن كون نوعها public كما عرفنا مسبما 9

195 ثم أخذنا نسخة "كائن" )object( من هذا ال class ومررنا ل م لهذه الب انات المجردة. كما اتفمنا الب انات الت تكون بداخل ال class تكون مجردة أي أنها ال تحتوي على ل مة. this الكلمة المحجوزة this تستخدم بداخل ال class وتستط ع رإ ة كل ما بداخل ال class وتعمل كؤنها كائن من هذا ال 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 ; 9

196 this.mobile_number = mobile ; class Program static void Main( ) Employee emp = new Employee( ); emp.add_employee ( "ali", 30, 5000, " "); إلضافة موظؾ آخر // emp.add_employee ( "john", 34, 6000," "); وهكذا// أنشؤنا دالة و جب أن كون نوعها public لك ت رى خارج ال class ولك نستط ع التعامل معها وبها الم دخالت الت سنمرر ل م من خاللها لخصائص ال 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 ); وهكذا... 9

197 ( الم شيد ) Constructor هو عبارة عن دالة و كون بنفس اسم ال class لكنه ال رجع أي ب انات أي ال كون له ل مة عائدة " value " Return مثل int أو String وال حتى.void تعمل هذه الدالة تلمائ ا عندما نؤخذ نسخة من هذا ال class كتب ف هذه الدالة ل م إبتدائ ة نر د أن نمررها لمتؽ ر ما ومن الممكن أن نمرر له مدخالت أثناء اإلنشاء كالدالة تماما و وجد أكثر من نوع لل.constructor أول نوع هو : - ال " default التلمائي " : وهذا النوع ال ؤخذ أي م دخالت أثناء اإلنشاء و مكننا إعطاء ل م إبتدائ ة للحمول الت تكون ف ال class وحتى لو لم نكتب ال default constructor ف ال class فإنه نشؤ تلمائ ا و عط للحمول الت من النوع int ل مة إبتدائ ة صفر وللحمول الت من النوع string ل م بتدائ ة ب null و null ت عبر عن الال ش ء. طر مة تعر ؾ الم ش د التلمائ : public + Class_Name( ) مثال : class Test public int id ; public string name; public Test( ) this.id = 1; this.name = "ali"; 9

198 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 - م شيد له م دخالت ( constructors ) Parameterized وهو ؤخذ م دخالت مثل الدالة تماما وعند أخذ نسخة من هذا ال class ف جب تمر ر م دخالت له حتى تم تنف ذه. ) الم دخالت Class_Name( public + طر مة تعر ؾ الم ش د الذي ؤخذ م دخالت : class Employee string Name ; int Age ; مثال : 9

199 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 ) ; هكذا كون شكل الم ش د أثناء إستدعاإه أو أثناء تعر ؾ كائن جد د. 97

200 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; مثال :

201 م 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 الهد ام عكس الم ش د هو أ ضا عبارة عن دالة تعمل تلمائ ا بعد إنتهاء البرنامج ووظ فته أنه هدم أي كائن لم ست خد م أو كائن أ ستخ د لكن لم عد له حاجة أو كائن لم ست خد م وهو ل س كالم ش د تحتاج أن تستدع ه. هو عمل فور إنتهاء البرنامج دون إستدعاء وال حتاج إلى ( modifier ( Access وكل class كون له destructor واحد فمط. طر مة التعر ؾ : ~ Class_Name ( ) هذه العالمة ( ~ ) ت سمى ت لدا. مثال : class Employee 99

202 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 ش ر إلى ---< Collector Garbage الذي تحدثنا عنه ف بدا ة الكتاب ف الجزء الخاص بإطار العمل.

203 ) Properties ( get, set الموصالت ( Accessors ) الحمول الت تكون بداخل ال class تكون محم ة ومخف ة على المستخدم وال ستط ع الوصول إل ها لكن ماذا لو كنا نر د تمر ر ل م لهذه الحمول من خارج ال class بدون أن نتعامل مع الحمول بشكل مباشر أو بدون دوال ف هذا الولت سنستخدم set و get وهما عبارة عن كلمت ن محجوزت ن ف اللؽة ح ث ت مكنن set من وضع ل م لهذه الحمول أي للكتابة فمط و get ت مكنن من لراءة الب انات الت تكون بداخل الحمل أي تكون للمراءة فمط. وجد ثالثة طرق للوصول إلى هذه الموصال ت : Public Private Protected الموصال ت تعامل معاملة الدوال. فنحن نتحكم م ن ستط ع تمر ر ل م للحمول وم ن ال ستط ع م ن مكنه رإ تها وم ن ال مكنه.

204 وت ستخدم set ف تحد د الم مة الت دخلها المستخدم فمثال إذا كنت ست دخ ل ل مة لمرتب لكن هذه الم مة ؼ ر منطم ة مثل مرتب موظؾ جن ة ف الشهر فؤنت مكنن أن تتحكم ف مدى الم م الداخلة و جب أن دخل المستخدم ل م ف المدى المطلوب لك ت خزن بداخل الحمل " المتؽ ر ف ال " class فالم م تؤت أوال عن طر ك set وإذا كان الشرط خطؤ فلن ت خزن ف الحمل مكنن تحد د شرط لبل إستمبال الم م بداخل 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 ") ; مثال :

205 get else Employee_Salary = value ; return Employee_Salary ; معنى الكود أن : أوال أنشؤنا class ثم عرف نا ف ه الحمول ( " األسم العمر المرتب " ) وطرق الوصول إل هم private ثم أنشؤنا خصائص لك نتعامل مع هذه الحمول ونمرر لها ل م أو نمرأ منها هذه الم م. الخصائص ( " األسم المرتب " ) تم إنشاء الخصائص تبعا للحمول الت نر د للمستخدم التعامل معها بشكل ؼ ر مباشر فننش ء خاص ة لكل حمل على حدة وتسمى الخاص ة بؤي اسم نر ده لكن فضل بؤن تكون باسم لر ب من اسم الحمل لك نم زها. ثم ننش ء الموص الت ( get ( set, وال شترط كتابة set و get معا ف نفس الخاص ة بل مكننا جعل هذا الحمل للمراءة فمط وعندها نستخدم get فمط أو للكتابة فمط فنستخدم set أو كل هما. نمرر الم مة للحمل من خالل كلمة value وه كلمة محجوزة ف اللؽة تؤخذ الم مة الت تؤت من المستخدم وتمررها للحمل المشار إل ه و جب أن تكون الم مة من نفس نوع الحمل او المتؽ ر. ف خاص ة ال Salary أنشؤنا شرطا لك نتؤكد من الم مة الت تؤت من المستخدم هل ه ف المدى المطلوب وف حالة كانت ف المدى المطلوب ت خزن بداخل الحمل أما إذا كانت خارج المدى فال ت خزن. وف get ن سترجع الم مة الت بداخل الحمل من خالل الكلمة المحجوزة.return

206 الوراثة ) Inheritance ( الوراثة بالمعنى العام هو أن رث الشخص بعض الصفات أو األش اء الخاصة بؤب ه أو أحد ألاربه كذلن األمر ف البرمجة عندما رث class ما class آخر فإنه رث منه كل الدوال والمتؽ رات أو الصفات الخاصة بهذا ال class و صبح ال class الوارث سمى أبن وال class الموروث سمى أب. والوراثة ه من أهم مباديء الس شارب وه تسهل وتختصر عل نا الكث ر من الولت والجهد فعندما نرث class ما فإننا نستخدم كل شئ بداخل هذا ال class بدون الحاجة إلى كتابتها مرة أخرى ف ال class الجد د. مالحظة : نرث كل شئ مسموح لنا من ل بل ال class األب ألن عمل ة التؽل ؾ )Encapsulation( تلعب دورا هاما ف الوراثة فؤنت تحدد من ستط ع رإ ة الب انات ف class آخر ومن ال ستط ع فمثال وجد class اسمه employee و class آخر اسمه manager employee وجد به حمل لألسم والعمر والعنوان والمرتب وبعض الدوال وف manager نحتاج أ ضا هذه الحمول باإلضافة إلى بعض الحمول األخرى فهل سنكرر نفس الحمول الوراثة جعلتنا نستؽنى عن هذا التكرار و مكننا وراثة ال class الذي نحتاج الصفات الت بداخله ونستخدمها ك فما نشاء.

207 لؽة ال #C ال تدعم الوراثة المتعددة الوراثة المتعددة تعن أن رث ال class األبن أكثر من class آخر. using System ; namespace ConsoleApplication1 Class Employee public string _Name ; public int _Salary ; public int _Age ; public void show_data ( ) لكن وجد شئ آخر عوض هذا المصور سمى interface Console.WriteLine( " Show "); Class Manager : Employee وسنتطرق لفهم هذا المعنى الحما. تتم وراثة class ل class آخر عن طر ك النمطت ن ( : ) public Enter_Data ( string name, int salary, int age ) مثال :

208 _Name = name ; _Salary = salary ; _Age = age ; الحمول الخاصة public string Mang_name بال class A 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 ( ) ;

209 معنى هذا الكود أن : أنشؤنا class Employee وعرف نا به الحمول الخاصة به ثم أنشؤنا class Manager وورثنا ال Employee وأنشؤنا دالة تؤخذ الم م من المستخدم وتضعها ف هذه الحمول ثم أنشؤنا الخاص ة get لتع د األسم. ف ال class Product ورثنا Manager فؤصبح ال Product رى كل ما بداخل ال Manager وال class الذي رثة ال Manager أ ضا. ف مكننا إستخدام كل الدوال والحمول الت بداخل هذه ال classes من خالل ال.Product مكن لل class األبن رإ ة الخواص الت بداخل ال class األب الت كون الوصول إل ها public أو protected أو internal أو protected internal ماعدا.private عندما تكون خواص الوصول ف ال class األب من النوع protected فإنه ال مكن ألي class آخر رإ تها سوى ال class الذي رثه فمط. 7

210 إخفاء الدالة إذا كان وجد class اسمه A ثم ورثه class آخراسمه B وكان وجد ف ال class A دالة اسمها ) print( وتر د إنشاء دالة بنفس األسم ف ال class B ف مكنن إنشاء الدالة وإستخدام الكلمة المحجوزة new لو لم تستخدم new وكتبت نفس الدالة بنفس االسم لن حدث خطؤ لكن س ظهر لن تحذ ر و كتب لن البرنامج أن تستخدم كلمة new ف الدالة الت تكون ف ال class األبن الت تكون بنفس أسم الدالة الت ف ال class األب حتى ت خف الدالة الت ف ال class األب وتعمل على الدالة الجد دة. class A public void print( ) Console.WriteLine(" Hello "); class B : A public new void print( ) Console.WriteLine(" C# "); مثال : أما ف حالة أنن أردت إستخدام نفس الدالة الت ف ال class A بالكود الذي بداخلها ف ال class B نكتب نفس الدالة وكلمة new ثم نكتب بداخل الدالة الكلمة المحجوزة ) base.print( الكلمة المحجوزة base تعمل على ال class األب تؤخذ نسخة منه 2

211 "object" أي أنها ترى كل ما بداخل ال class األب ما عدا الحمول أو الدوال الت كون الوصول إل ها.private مثال : class A public void print( ) Console.WriteLine(" Hello "); class B : A public new void print( ) base.print( ); class Program static void Main( ) B child = new B( ); child.print( ); س طبع : Hello 9

212 ) Interface ( ذكرنا ال interface سابما ف الوراثة ال interface هو عبارة عن حاو ة لمجموعة من الخصائص أو الدوال المكتوب رأسها فمط بدون كتابة جسم الدالة أي بدون كتابة كود داخلها فمط اسم الدالة فتكون مجردة مكننا وراثة هذا ال interface لكن عند إستدعاءه تطلب تنف ذ وكتابة األكواد بداخل كل الدوال. طر مة الوصول لل interface تكون public تلمائ ا فال جب كتابة public الدوال لكن نكتبها ف ال class حتى نستط ع رإ تها خارج ال.class بجانب مكننا إنشاء ال interface من خالل الكلمة interface اللؽة. وه كلمة محجوزة ف مكننا إنشاء أكثر من interface و مكننا أ ضا وراثة أكثر من interface ف نفس الولت فهو دعم الوراثة المتعددة. ك ف ة تعر فه : الطر مة المتعارؾ عل ها ف تعر ؾ ال interface أن أول حرؾ من اسم ال interface كون حرؾ i ثم تبعه بال االسم الذي تر ده هذا ؼ ر ضروري لكنها الطرق المتداولة والمتعارؾ عل ها ف تعر فه. مكننا كتابة كلمة + interface اسمه interface emp1 void print1 ( ) ; int sum ( int x, int y ) ;

213 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 ثم كلمة على نختار New item ونختار Interface ونكتب به الدوال الت نر د.

214

215 مثال : interface functions void eat( ); void drink( ); class Human : functions public void eat( ) Console.WriteLine( " eating " ) ; public void drink( ) Console.WriteLine(" drinking "); جب تنف ذ كل الدوال ف ال class الت أ نش ئت بداخل ال interface أهم ة ال interface أنه أمكننا إستخدام نفس الدالة بنفس األسم ف أكثر من class وبؤكثر من تنف ذ من خالل وراثة ال.interface

216 ) Polymorphism ( ال polymorphism ت عد من أهم مفاه م البرمجة كائن ة التوجه والمعنى العام لها أننا مكننا إعادة إستخدام الدالة بنفس األسم داخل نفس ال class أو class آخر بعدد المرات الت نر دها. وه تنمسم إلى : OverLoading -1 ه عبارة عن إنشاء أكثر من دالة بداخل نفس ال class بنفس األسم لكن بشروط مع نة. لنفترض أنه توجد دالة أسمها print وال تؤخذ م دخالت ونر د إنشاء دالة أخرى اسمها print ( int x ) ف هذه الحالة جب أن نض ؾ لها م دخل واحد على األلل مثل print حتى نم زها عن األخرى ف ولت اإلستدعاء وال حدث تشتت للمترجم الدالتان بنفس األسم فك ؾ فرق ب نهما! فهو عتبر الدالة الت تستدع ها مجهولة ألنه لم عرؾ أي منهما تمصد لكن عند إضافة م دخل فح نها س ذهب إلى الت لصدتها أه الت بمدخل أم ال. لكن لن نض ؾ م دخل لن نستخدمه بؽرض إضافة دالة جد دة بنفس األسم فهذا ؼ ر صح ح تض ؾ فمط ما تحتاج إل ه فعل ا ف الكود وما تستخدمه فمط. أما إذا ف حالة أن الدالت ن ؤخذان م دخل ف جب أن نؽ ر نوع أحدهما فمثال إذا كانت الدالة ) x sum ( int ف جب أن كون نوع الم دخل ف الدالة الجد دة أي نوع ؼ ر int من الممكن أن كون float أو double أو.long

217 بإختصار ال جب أن كون هنان دالتان متماثلتان ف نفس ال class جب أن وجد إختالؾ ف م دخالت أحدهما على األلل. مالحظة : ال تحدث عمل ة ال overloading لدالة ال تؤخذ م دخالت. ف ولت إستدعاء الدالة و فور فتح لوس الدالة أثناء اإلستدعاء فإن برنامج الف جوال ستود و وضح لن أنه توجد دالتان بنفس األسم لكن أحدهما ال تؤخذ م دخالت ب نما األخرى تؤخذ م دخل و جب أن تمرر لها الم دخل عند إستدعائها ف حالة أنن أخترت إستدعاء من تؤخذ م دخل و جب أن كون من نفس النوع الذي حددته ونختار ب نهما من خالل األسهم ألعلى وألسفل.

218 مثال : 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

219 Overriding -2 تتم عمل ة ال override ف الوراثة ف حالة وجود دالة ما ف class اسمه employee وورثت هذا ال class ف class اسمه manager وتر د إنشاء دالة بداخل manager بنفس األسم فهذه تسمى.override وتستخدم الكلمة المحجوزة ف اللؽة " virtual " ف الدالة الت ف ال class األب والكلمة المحجوز " override " ف الدالة الت بنفس األسم داخل ال class األبن. وتكون الدالتان متماثلت ن تماما ف األسم وعدد الم دخالت ونوع الم دخالت وجسم الدالة أو الكود الذي بداخل الدالة ف ال class األب أو األبن تكتب به ما تشاء أو الوظ فة الت تر د تنف ذها بالدالة. using System ; namespace ConsoleApplication1 class Employee public virtual void print ( ) Console.WriteLine ( " Show data of employee " ); class Manager : Employee public override void print ( ) 7 مثال :

220 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 2

221 ) Abstract, Sealed, Partial ( 9 abstract ه عبارة عن كلمة محجوزة تؤت مع ال class أو الدالة ( Method ) وعندما تؤت مع ال class فال مكننا أن نؤخذ كائن ( object ) أو نسخة من هذا ال class كون فمط للوراثة. أ نش ء لك خدم classes أخرى. using System ; namespace ConsoleApplication1 abstract class Emp public int x ; class Man : Emp public int num set x = value ; get مثال :

222 return x ; class Program static void Main ( ) Emp e = new Emp ( ) ; خطؤ ال نستط ع أخذ نسخة منه // Man m = new Man ( ) ; m.num = 2 ; س طبع // ; ) m.num Console.WriteLine( إذا ال class الذي كون abstract ممنوع التعامل المباشر معه ف ما عدا الوراثة. : النوع الثاني الذي يكون abstract هي الدوال الدالة الت تكون abstract تكون أ ضا بداخل abstract class وتكون الدالة مجردة أي رأس الدالة فمط بدون الكود داخلها لكن بشرط أن من رث هذا ال class جب أن كتب الكود بداخل هذه الدالة ال abstract ه تشبه لل interface إلى حد ما. لكن ال تخلط ب ن األثن ن ألن تلن دالة ( method ) ب نما هذا.interface وعند كتابة كود الدالة ف ال class األبن... نكتب نفس رأس الدالة ونكتب override عوضا عن abstract ثم نكتب الكود. الفرق ب ن virtual و : abstract

223 جب أن نكتب كود الدالة الت تكون 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 " ) ;

224 sealed تؤت مع تعر ؾ ال classes والدوال ( methods (. عندما تؤت مع ال class فهذا عن أنه ممنوع وراثة هذا ال class لكن مكننا التعامل معه بطر مة عاد ة ونستط ع أخذ نسخ منه أو كائن ( object (. sealed class A مثال : class B : A س حدث خطؤ أثناء معالجة الكود ألنه ال مكن وراثة ال class الذي كون sealed أما ف حالة الدوال : فالدالة الت تكون sealed فهذا عن أنه ال مكن عمل override لهذه الدالة ف class آخر. class A public sealed override void print ( ) Console.WriteLine( " C# " ) ; class B : A مثال :

225 public override void print ( ) Console.WriteLine( " Hello " ) ; س حدث خطؤ أثناء معالجة الكود ألنه ال مكن عمل override لدالة.sealed فائدة sealed أنها تمنع إعادة إستخدام محتو ات ال class ف class آخر أو إعادة إستخدام دالة بنفس األسم ونفس الم دخالت ف class آخر. partial ه كلمة محجوزة ف اللؽة وتؤت كلمة partial مع ال classes interface ومع struct وسنتطرق لشرح ال struct الحما. وأ ضؤ مع ال معناها أنه مكننا تمس م ال class أو ال interface على أكثر من ملؾ. أي مكننا كتابة class بؤسم و class آخر بنفس األسم وبدوال مختلفة بالطبع هذا ال جوز ف الحالة العاد ة لكن كون متاحا عندما نستخدم.partial ف حالة إستخدامها مع ال : class نكتب كل class ف مكان أو ملؾ مستمل عن اآلخر وبنفس األسم وبدوال مختلفة لكن عند أخذ نسخة من هذا ال class فإننا ف هذا الولت نتعامل مع class واحد أي أنه ستدع كل الدوال الت تكون ف كل الملفات معا. ت كتب الكلمة لبل ال class أو ال.interface using System ; namespace ConsoleApplication1 مثال :

226 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 الموجودة ف كل الملفات لكن نكتبها ف ال class الذي ورث ال interface ل س ف ال interface نفسه ألنه ال جوز كما عرفنا.

227 مثال : 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 " ) ;

228 تمار ن : أكتب برنامج لتخز ن ب انات موظف ن ( salary.) id, name, age, using System; namespace Test class employee ننش ء class اسمه employee وبما أننا سنخزن ب انات employee[ ] emp; أكثر من موظؾ أي أكثر من أوبج كت لهذا الكالس فإننا int size; سنستخدم ال array ألن ال objects كلهم من نفس النوع int index; أي كلهم class واحد وسنؤخذ منه أوبج كت فنحدد حجم int id; المصفوفة من خالل ال constructor وعر فنا المتؽ ر عن ال index الذي سنض ؾ بداخله. int age; index ح ث أنه عبر 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; هذه دالة اإلضافة ح ث أن كل index كون for(int i=0;i<index;i++) بداخله أوبج كت حمل id,name,age,salary أي الب انات الخاصة به وبعدما نض ؾ ب انات موظؾ جد د نز د if(emp[i].id==id) ال index بممدار 1 ل تحرن إلى المكان الذي ل ه ف المصفوفة لكن أوال نتحمك ما إذا كان check=true; ال id موجود مسبما أم ال. break;

229 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; خالل ال id الخاص به فإذا كان موجود emp_index=i; break; فإنها تطبع الب انات الخاصة به if(check==true) 7

230 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; المصفوفة من خالل ال id الخاص به for(int i=0;i<index;i++) if(emp[i].id==id) check=true; emp_index=i; break; if (check == true) 2

231 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( ); ثم آخرا نختبر هذا الكود ف دالة ال.Main 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); 9

232 س طبع ب انات هذا الموظؾ ألنه موجود // emp.search(4); emp.delete(4); س طبع أن هذا الموظؾ غير موجود ح ث أنه تم حذفه // emp.search(4); emp.print( ); ,aaa,25,1500 2,bbb,27,2000 3,ccc,32,4000 4,ddd,30,3500

233 ) Struct ( هو عبارة عن بناء نوع جد د من الب انات شبه ال class اإلختالفات ب نهما. ف التعر ؾ لكن توجد بعض class - دعم الوراثة - كون reference type وعند أخذ نسخة منه نستخدم الكلمة المحجوزة. new - مكن إعطاء ل م إبتدائ ة للحمول الت بداخله ; 10 = x ( int ممبول.) struct - ال دعم الوراثة - كون value type ول س class مثل ال reference type عندما إستخدامه ال تحتاج إلى كلمة. new وبما أنه value type فهو أسرع من ال class ألنه خزن inline أو بنظام ال. stack - ال مكن إعطاء ل م إبتدائ ة للحمول الت بداخله ; 5 = x public int )هذا ؼ ر ممبول(. - كون كل أعضاإه public إلنن لو أخف تهم لن تستط ع إستخدامهم. - ال مكننا عمل override للدوال الت بداخله.

234 د تستخدم ال struct عندما تر د إنشاء برنامج ال حتاج إلى خواص ال class برنامج ت خزن به بعض الب انات وربطها ببعضها وهو ع بناء نوع جد د من الب انات. 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 ; مثال : مثال :

235 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 ) ; الناتج :

236 لم تتؽ ر الم م ف حمول ال struct فكؤنه ؤخذ نسخة من الم م الحم م ة و ؽ ر بها أما التؽ ر الحم م ف الم م ف الذاكرة العشوائ ة لم حدث. ب نما تؽ رت الم م ف حمول ال class ألنه عمل بال reference )المرجع( أي تتؽ ر الم م األصل ة ول ست النسخة منها.

237 ) Namespace ( ه عبارة عن مجموعة من ال classes مكننا أن نستخدم ال namespace لك ننظم الكود أكثر و كون مرتب ومفهوم مكن أن تواجد أكثر من namespace ف نفس المشروع و مكن أن وجد class ف namespace بنفس اسم class آخر ف namespace أخرى. تم إستخدامها عن طر ك الكلمة المحجوزة namespace بداخلها كل ال classes الت نر د. ثم األسم الذي نر ده ونكتب و تم إستدعائها عن طر ك الكلمة المحجوز.using ف بدا ة كل كود نكتب using System وكلمة System ه عبارة عن namespace تحتوي على العد د من ال classes مثل Console الذي نستخدمه ف عمل ة اإلدخال واإلخراج. و تم إستدعاء ما بداخل كل namespace عن طر ك النمطة (. ) فمثال إذا أردنا إستدعاء كل ال classes الت بداخل System أ ضا من Console ف كون اإلستدعاء بهذا الشكل : وإستدعاء دالة اإلخراج System.Console.WriteLine( ) ;

238 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 ( ) مثال :

239 Console.WriteLine( " I'am Namespace Demo Class Prog1 " ) ; class Asd public void show ( ) Console.WriteLine(" I'am Namespace Demo Class Asd " ) ; ف أول سطر داخل دالة ال Main كتبت Demo.Prog1 لك ذهب إلى ال class ف ال namespace الت أحددها ألنه وجد class بنفس األسم ف ال namespace الرئ س ة فلو لم أحدد ال namespace كان س ذهب إلى ال class الذي كان ف ال namespace الرئ س ة وبما أن ال class الذي اسمه Asd ال وجد class آخر بنفس اسمه فؤستدع ته مباشرة بدون الحاجة إلى تحد د ال namespace الت تحتو ه. مكن أن نكتب namespace كاملة بداخل namespace بنفس الطر مة. ونستدع ها بهذا الشكل : ; اسم ال namespace الداخل ة (. ) + اسم ال namespace األولى + using using System ; using Test1.Test2 ; namespace Test1 class Program 7 مثال :

240 static void Main ( ) Console.WriteLine( " Main Function " ) ; namespace Test2 class Prog2 public void Show( ) Console.WriteLine( " Hello World " ); 2

241 اإلستثناءات واألخطاء ) Errors and Exceptions ( ه تلن األخطاء الت مع بها المستخدم أو تحدث ف البرنامج أثناء تشؽ له ولها العد د من األشكال لكن مكننا أن نتحكم ف ما س حدث عندما مع أي خطؤ فمثال عند لسمة أي رلم على صفر فهذا ؼ ر صح ح وس حدث خطؤ أو عند إدخال ل مة لمتؽ ر من نوع مختلؾ عن نوع المتؽ ر مثل إدخال حرؾ أو نص ف متؽ ر نوعه int أو إضافة ل م بداخل مصفوفة أكثر من عدد عناصرها فكل هذه أخطاء توجد العشرات من األخطاء. جب أن كون الكود تحت تحكمنا الكامل به وال نترن مجاال إلحتمال ة حدوث أي خطؤ..try, catch حما ة الكود من األستثناءات الت تحدث كون عن طر ك : try نكتب بداخلها الكود أو البرنامج المراد تنف ذه ودائما ما تبعها catch معناها ف حالة حدوث أي خطؤ أو إستثناء نفذ ما بداخل ال.catch مكنن أن تشبهها ب if / else حتى تضح لن ك ف ة عملها فمط. catch تلتمط األخطاء ف حالة حدوثها و مكننا كتبة أي كود نر د تنف ذه ف حالة حدوث خطؤ ما. و مكن أن نستخدم أكثر من جملة catch متتال ة. 9

242 finally نكتب بداخلها كود نر د تنف ذه ف حالة حدوث خطؤ أم ال فما بداخلها س ن فذ تحت أي ظرؾ و مكننا كتابتها أو اإلستؽناء عنها فال شترط كتابتها ف الكود مثل catch بعد.try جب أال خلو أي كود لنا بدون كتابة try, catch حتى نتجنب أي أخطاء. توجد العد د من ال classes الخاصة باألخطاء ف ال " System " namespace مثل : Exception DivideByZeroException StackOverflowException OutOfMemoryException OverflowException ApplicationException FormatException ظهر لن الخطؤ الذي حدث أثناء تنف ذ البرنامج ظهر لن الخطؤ عندما تمسم أي رلم على صفر حدث هذا الخطؤ عندما تستدع دوال كث رة داخل بعضها حدث عندما تمتلئ ذاكرة الكمب وتر وال وجد مكان ف الذاكرة للبرنامج وجود فائض ف العمل ات الحساب ة أو ف التحو ل من نوع ب انات لنوع آخر. أو إدخال ل مة أكبر من حجم المتؽ ر. حدث عند وجود خطؤ ف البرنامج أثاء تشؽ له حدث هذا الخطؤ عندما نوع معامل الدالة أثناء اإلستدعاء ختلؾ عن نوع المعامل أثناء إنشاإه

243 مكنن كتابة Exception ف ف جوال ستود و وس ظهر لن كل ال classes الخاصة باألخطاء وإذا ولفت بالمإشر عل ها س ظهر لن وظ فة كل 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 " ); مثال :

244 ف هذا البرنامج كتبنا الكود ف try ثم كتبنا catch وأخذنا كائن أو نسخة من ال class الذي سمى Exception ثم نطبع الرسالة الت بداخله عندما حدث خطؤ هذا ال class شمول أكثر فهو عمل على أي خطؤ حدث بعكس ال classes األخرى تظهر األخطاء الت تعبر عنها فمط. فمثال DivideByZeroException ظهر الخطؤ الذي حدث عند المسمة على صفر ف ما عدا ذلن لن عمل. أما Exception ظهر أي خطؤ حدث ف البرنامج. مكنن أال تؤخذ نسخة من أي class وتطبع رسالة خاصة بن. مثال : try int x = 8 ; int y = 9 ; Console.WriteLine( x + y ) ; catch Console.WriteLine( " Error " ) ; تطبع أي شئ تر ده أن ظهر عند حدوث أي خطؤ //

245 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 ) ; مثال :

246 ) Collections ( ال Collections ه عبارة عن مجموعة من ال classes الت تساعدنا ف التحكم ف الب انات وك ف ة تخز ن وإسترجاع هذه الب انات لبل ذلن كان كل ش ء خاص بالب انات م م دا والتعامل معه م ح كم. فمثال كانت المصفوفة جب أن نحدد لها الحجم أثناء إنشائها وإذا أكتملت عناصرها وأمتألت فال نستط ع إضافة عنصر آخر وأنه جب تحد د نوع المصفوفة وتكون كلها من نفس النوع أي أنه إما تكون كل العناصر int أو string أو float وهكذا. أما ف ال collections نستط ع إضافة أي عنصر من أي نوع وحجم المصفوفة كون د نام ك أي أنه ز د تلمائ ا كلما أضفنا عنصر جد د. لك تستخدم ال collections جب أن تستدع ال namespace الت تسمى." System " namespace وه موجودة ف ال Collections كون اإلستدعاء بهذا الشكل : using System.Collections ; أحد هذه ال classes هو :

247 Array List هو عبارة عن class خلك مصفوفة " Array " لكن ز د حجمها كلما أضفنا عنصر جد د بها و مكنه إستمبال أي نوع من الب انات دون الحاجة إلى تعر ؾ نوعه و مكن المزج ب ن هذه الب انات من ح ث النوع ف مكننا إضافة string ثم العنصر الذي ل ه كون int وهكذا و تم إستدعاء هذا ال class بالطر مة العاد ة. إذا أردنا إنشاء مصفوفة د نام ك ة أي تؽ ر حجمها كلما أضفنا عنصر نستخدم ArrayList ونؤخذ منه نسخة ونعمل على الدوال الت بداخله الت تمكننا من التحكم ف المصفوفة بشكل كامل. أوال طر مة إنشاء مصفوفة د نام ك ة : ArrayList arr = new ArrayList ( ) ;." أخذنا من ال class نسخة أي أنشؤنا مصفوفة جد دة واسمها " arr ومن الممكن أن نحدد حجم المصفوفة أ ضا من خالل تمر ر الم مة لل constructor ف عط للمصفوفة ل مة إبتدائ ة فمثال إذا حددت حجم المصفوفة 10 وأمتألت وأردت أن تض ؾ العنصر جد د س ز د حجمها تلمائ ا وذلن من خالل كلمة new فه تنش ء مصفوفة جد دة أكبر وتنسخ بها كل ب انات المصفوفة المد مة ثم ت حذؾ المصفوفة المد مة بال Garbage Collector الذي عمل تلمائ ا. بعكس لؽات مثل ++C جب أن تحذفها بنفسن بإستخدام كلمة.delete تحد د حجم المصفوفة كون كالتال : ArrayList arr = new ArrayList ( 10 ) ;

248 أو من خالل الخاص ة Capacity فه ت مث ل ال set تؤخذ الم مة وتضعها كحجم المصفوفة كاآلت : 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 وبما أن العناصر الت بداخل المصفوفة

249 ل ست من نفس النوع فال مكننا تحد د نوع العد اد الذي دور على العناصر بداخل المصفوفة " i " بنوع مثل int أو string فنحدده بؤنه object أو var أو.dynamic - لمعرفة عدد عناصر المصفوفة الحال ة ف حالة أنن لم تحدد لها حجم مع ن نستخدم الخاص ة Count فه ت مث ل get وت رج ع حجم المصفوفة. سنعمل على نفس المثال السابك : Console.WriteLine( arr.count ) ; - ف حالة أنن أردت إدخال عنصر ف مكان محدد ف المصفوفة نستخدم الدالة " ) Insert( " وهذه الدالة تؤخذ المكان الذي تحدده للعنصر ول مة العنصر. arr.insert( 3, " Hi " ) ; لكن جب أن كون المكان الذي تحدده موجود فعل ا ف المصفوفة حال ا أي أنه وجد عنصر ف هذا المكان لبل ذلن ألنن لو حددت موضع اإلدخال مكان لعنصر ؼ ر موجود فس حدث خطؤ. فمثال توجد مصفوفة بها العناصر اآلت ة : Hello 100 R 2.71 true حجم المصفوفة 5 فال جوز أن ت دخل موضع لعنصر أكبر من 4 ألن الترل م ف المصفوفة بدأ من صفر. هذا ف حال تواجد عناصر ف المصفوفة لو لم وجد عناصر ف المصفوفة فال مكنن أن تضع مكان للعنصر ف الدالة Insert أكبر من صفر. عندما لولنا أن : arr.insert( 3, " Hi " ) ; 7

250 بدأ البحث عن الموضع المحدد من المكان صفر إلى أن جده و ز د حجم المصفوفة بممدار عدد العناصر الجد دة فإذا كان وجد عنصر ف هذا المكان ستنتمل كل العناصر الت على م نه بممدار خانة واحدة لكل عنصر ف جهة ال م ن ف الذاكرة. فتكون المصفوفة بهذا الشكل : Hello 100 R Hi 2.71 true - لحذؾ عنصر مع ن من المصفوفة نستخدم الدالة ) RemoveAt( وتؤخذ هذه الدالة مكان العنصر الذي تر د حذفه فمط و مل حجم المصفوفة بممدار 1. وتنتمل العناصر الت على م ن العنصر المحذوؾ بممدار خانة واحدة ف جهة ال سار ف المصفوفة. arr.removeat( 3 ) ; ست حذ ؾ Hi - لحذؾ عنصر مع ن عن طر ك ل مة العنصر ول س موضعه ف المصفوفة سنستخدم الدالة ) ( Remove وتؤخذ ل مة العنصر فمط. Remove( R ) ; س حذ ؾ ال R - إلضافة مجموعة من العناصر ف ولت واحد نستخدم الدالة ) ( AddRange مكنها أن تؤخذ مصفوفة أخرى وتض فها على المصفوفة المد مة ت ضاؾ ف آخر المصفوفة وتؤخذ اسم المصفوفة الجد دة فمط. object * + test =, 1, 50, ' K ', " XYZ ", ; arr.addrange( test ) ; مثال : 2

251 - لحذؾ مجموعة من العناصر ف ولت واحد نستخدم الدالة ) RemoveRange( وه تؤخذ موضع العنصر الذي تر د أن تبدأ بالحذؾ منه وموضع العنصر الذي تر د أن تنته عنده. RemoveRange( 2, 5 ) ; ستحذؾ العناصر من إلى بالترت ب. إذا كان عندن مصفوفة وتر د نسخ بعض العناصر من مصفوفة أخرى... تستخدم ) GetRange( وه تؤخذ موضع أول عنصر تبدأ بنسخه وتؤخذ آخر موضع تنته عنده. ArrayList Test = new ArrayList( ) ; Test=arr.GetRange( 1, 4 ) ; ست نس خ العناصر من الموضع إلى الموضع المصفوفة الجد دة الت تسمى " Test ". ف المصفوفة المد مة " arr " إلى - لحذؾ كل عناصر المصفوفة نستخدم الدالة ) (.Clear arr.clear( ) ; Stack ال stack هو عبارة عن class داخل ال Collections مثل ArrayList لكنه ختلؾ لل ال عنه ال stack هو مجرد مصفوفة لكنه تعامل بطرق مختلفة إلضافة عناصر ف المصفوفة أو إخراجها ح ث تتم إضافة العناصر من آخر المصفوفة وتتم عمل ة اإلخراج أ ضا من آخر المصفوفة أي أن آخر عنصر ضاؾ هو أول عنصر خرج 9

252 وأول عنصر ضاؾ هو آخر عنصر عكس ة. خرج ف تم عرض الب انات الت بداخله بطر مة و سمى ال stack ب ) Last in First Out ( LIFO أو ) First In Last Out ( FILO أي أن من ضاؾ أوال خرج آخرا أو من ضاؾ آخرا خرج أوال. تعمل معظم التطب مات الضخمة بنظام ال stack كالبحث ف جوجل ح ث تظهر لن أوال آخر عمل ة بحث لمت بها كما ف تطب ك الف س بون تظهر لن ف ممدمة البحث آخر عمل ة بحث لمت بها مسبما. كما تعمل به الذاكرة المإلتة أ ضا. مكنن أن تفهم ك ف ة عمل ال stack بوضوح من خالل الشكل اآلت : إذا أردت إخراج الكرة ( ) جب أن ت خرج كرة ( ) أوال ثم كرة ( ) إلى أن تصل إلى الكرة ( ). إدخال إخراج 3 2 1

253 تم إنشاء ال stack بالطر مة العاد ة مثل أي class آخر. Stack Test = new Stack ( ) ; و مكنن أن تحدد حجمه أثناء اإلنشاء كما ال.ArrayList Stack Test = new Stack ( 10 ) ; - إلضافة عنصر بداخل ال stack Test.Push( 12 ) ; Test.Push(" H ") ; Test.Push( 2.71 ) ; Test.Push( False ) ; نستخم الدالة ) Push( وه تؤخذ ل مة العنصر فمط. لطباعة ما بداخل ال stack نستخدم foreach foreach( object i in Test ) Console.WriteLine( i ); ناتج الطباعة : س بدأ بآخر ل مة دخلت ف ال stack فهو عرض ب اناته بطر مة عكس ة. False H

254 عند إخراج ل مة من ال stack ثم حذفها منه سنسنخدم الدالة ) Pop( م دخالت ت خرج آخر عنصر دخل إلى ال stack وتحذفه. Test.Pop( ) ; وال تؤخذ الدالة أي إذا أردنا إظهار آخر ل مة دخلت ف ال stack بدون حذفها نستخدم الدالة ).Peek( Console.WriteLine( Test.Peek( ) ) ; - أما لحذؾ كل عناصر ال stack نستخدم الدالة ).Clear( Test.Clear( ) ; - إذا أردنا التؤكد من وجود عنصر مع ن ف ال stack نستخدم الدالة ) Cotains( وترجع إما true أو false أي العنصر موجود أو ؼ ر موجود ف ال.stack Console.WriteLine( Test.Contains( 12 ) ) ; سترجع true ألن ال موجودة ف ال stack Console.WriteLine( Test.Contains( 3 ) ) ; سترجع false ألن ال ؼ ر موجودة ف ال.stack - لمعرفة عدد عناصر ال stack نستخدم الخاص ة.Count Console.WriteLine( Test.Count ) ; using System ; using System.Collections ; namespace ConsoleApplication1 class Program

255 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 ); ف هذا الكود أنشؤنا stack وأدخلنا به 5 عناصر ثم طبعنا عدد العناصر الموجودة بال stack بعدها طبعنا كل العناصر بدون حذفها ثم حذفنا آخر عنصر دخل إلى ال stack وطبعنا عدد العناصر مرة أخرى ثم طبعنا كل العناصر. حاول أن ت خرج ناتج هذا الكود بدون أن تنفذه على البرنامج.

256 Queue ال queue هو عبارة عن class داخل ال Collections وهو شبه ال stack ح ث أنه مصفوفة أ ضا ؼ ر أن ال queue تعامل مع الب انات بطر مة مختلفة لل ال عن ال.stack تتم إضافة العناصر من آخر المصفوفة وتتم عمل ة الحذؾ أو اإلخراج من أول المصفوفة أي أن آخر عنصر ضاؾ هو آخر عنصر حذؾ " خرج" وأول عنصر ضاؾ هو أول عنصر حذؾ " خرج" و تم عرض الب انات الت بداخله بطر مة عاد ة ول ست عكس ة مثل ال stack و سمى ال queue ب ) First in First Out ( FIFO أي أن من ضاؾ أوال خرج أوال. فهو ببساطة شبه الطابور م ن ؤت أوال ذهب أوال إذا أردت إخراج ال 2 ف جب أن ت خرج ال 1 أوال ألنه خ ز ن ف ال queue لبلها. معظم دوال ال queue تشبه دوال ال.stack - إلضافة عناصر داخل ال queue ف ال.stack Queue qu = new Queue( ); qu.enqueue(" A "); qu.enqueue( 100 ); qu.enqueue( 3.7 ); نستخدم الدالة ) Enqueue( وه تعادل Push

257 - لطباعة عناصر ال queue نستخدم foreach وتخرج العناصر بنفس الترت ب الذي دخلت به. foreach( object i in qu ) Console.WriteLine( i ); - إلخراج أول عنصر دخل ف ال queue وحذفه نستخدم دالة ) Dequeue( qu.dequeue( ); - إلظهار أول عنصر خرج من ال queue بدون حذفه نستخدم دالة ) Peek( qu.peek( ); - لحذؾ كل عناصر ال queue نستخدم دالة ) Clear( qu.clear( ); - للتؤكد من وجود عنصر ما داخل ال queue نستخدم دالة ) Contains( ونمرر لها الم مة الت نبحث عنها. Console.WriteLine( qu.contains( 100 ) ); ستطبع إما true أو.false - لمعرفة عدد عناصر ال queue نستخدم الخاص ة.Count Console.WriteLine( qu.count );

258 ) Generics ( ال generic تت ح لن إستخدام ال classes والدوال بدون الحاجة إلى تعر ؾ نوعها مإلتا حتى لحظة إدخال ل م لها. وهذا جعل األداء ف البرنامج أعلى و مكنن أن تستبدل ال classes الت استخدمتها ف ال collections بال generic فه متماثلة تمر با. وإلستخدام ال classes الموجودة بداخل هذه ال namespace namespace كالتال : نستدع ال using System.Collections.Generic; تعرؾ ال generic من خالل هذه العالمة > < توجد بعض ال generic classes مثل : List< > هذا ال class هو عبارة عن مصفوفة د نام ك ة تشبه ال ArrayList ف ال collections و تم تعر فها بهذا الشكل : List <int> arr = new List <int> ( ); هذا الكود معناه أننا أنشؤنا مصفوفة اسمها arr ونوعها.int وتستط ع إستمبال ب انات من النوع int فمط كما حددنا مسبما. وكلما أدخلنا عناصر أكثر ز د حجمها تلمائ ا.

259 إلضافة عنصر لها نكتب : arr.add( 5 ); arr.add( 2 ); وبها معظم الدوال الت شرحتها مسبما ف ال ArrayList وبها دوال إضاف ة ل ست موجودة ف ال ArrayList مثل ) Sort( وتستخدم هذه الدالة ف ترت ب المصفوفة تصاعد ا. 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 ; 7

260 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 ", " " ) ); // Constructor emp.add( new Employee(" Ali ", " " ) ); emp.add( new Employee(" Mohamed ", " " ) ); emp.add( new Employee(" Khaled ", " " ) ); foreach ( Employee x in emp ) Console.WriteLine( x ); 2

261 ف هذا الكود أنشؤنا class اسمه Employee وبداخله حمل األسم ورلم التل فون وأنشؤنا constructor ؤخذ األسم ورلم التل فون و ضع الم م ف الحمول ثم عمل ة override للدالة ToString وه دالة جاهزة ف اللؽة لطباعة النصوص وجعلناها ترجع األسم ورلم التل فون. وأنشؤنا List و كون نوع ال List هو Employee أي ال class فهو عد كنوع ب انات جد د ولك نستط ع إضافة عناصر لل List من نفس نوع ال Employee نستخدم new ثم نكتب اسم ال constructor ونمرر له الم دخالت وف عمل ة الطباعة نستخدم foreach و كون نوع العد اد إما اسم ال class الذي عد نوع ب انات والب انات الت ست طبع ستكون من نفس نوعه أو نستخدم object أو var أو.dynamic Stack< > عمل ال generic stack بنفس ك ف ة عمل ال collection stack أول عنصر دخل ف المصفوفة هو آخر عنصر خرج منها وآخر عنصر دخل ف المصفوفة هو أول عنصر خرج منها. وبه نفس الدوال الت ف ال.collection stack Stack<int> s = new Stack<int> ( ); s.push( 10 ) ; s.push( 20 ) ; s.pop( ) ; 9

262 s.peek( ) ; Console.WriteLine( s.count ) ; Queue< > عمل ال generic queue بنفس ك ف ة عمل ال collection queue ح ث العنصر الذي دخل المصفوفة أوال خرج أوال ومن دخل آخرا خرج آخرا. وبه نفس الدوال الت ف ال.collection queue Queue <int> q = new Queue <int>( ); q.enqueue( 1 ) ; q.enqueue( 3 ) ; q.enqueue( 20 ) ; q.dequeue( ) ; Console.WriteLine( q.count ) ;

263 LinkedList< > ال LinkedList نوعان فرد ة ومزدوجة الفرد ة : ( ؼ ر موجودة ف ال ) Generics ه عبارة عن سلسلة مترابطة من العناصر تكون هذه العناصر مرتبطة مع بعضها من خالل مإشرات فكل عنصر ش ر إلى مكان العنصر اآلخر الذي ل ه تكون هذه العناصر م خزنة بطر مة عشوائ ة ف الذاكرة بعكس المصفوفة الت تحجز عدد من االماكن ف الذاكرة بطر مة متتال ة. ال linkedlist تمكننا من اإلضافة أو الحذؾ ف منصؾ السلسلة بدون الحاجة إلى تبد ل أماكن عناصر أخرى. لذا فه أفضل من المصفوفة " Array " ف عمل ات الحذؾ أو اإلضافة ف مكننا إضافة العناصر ف البدا ة أو المنتصؾ أو نها ة السلسلة أما ف عمل ات البحث عن عنصر ما فإنه ؤخذ ولت طو ل ألنه كما للت فعناصرها ل ست متتابعة ف الذاكرة بل إنها مبعثرة ف الذاكرة خاصة إذا كنت تبحث عن عنصر ف منتصؾ السلسلة أو نها تها. أما المصفوفة فه أسرع ف عمل ات البحث والوصول إلى العناصر الم خز نة بها وال linkedlist ال تمتل ء أبدا فكلما أضفت عنصر تض فه ه ف السلسلة بشكل مباشر فه ل س لها حجم ثابت أما المصفوفة جب أن تحدد لها الحجم ولو لم تحدد لها الحجم فإنه كلما ت دخل عنصر بها ت ن شؤ مصفوفة جد دة بحجم أكبر وت ن سخ بها المصفوفة المد مة ثم ت ح ذؾ المد مة من خالل ال ( collector.gc ) Garbage أما ال LinkedList ال كون لها حجم ثابت فكلما أضفت عنصر بها تش ر إل ه فمط وعندئذ ضاؾ إلى السلسلة مباشرة فالسلسلة الفرد ة كون لها مإشر واحد ش ر إلى العنصر الذي بعده. وه كما للت ؼ ر موجودة ف ال Generics لكن شرحتها حتى تستط ع أن تفهم ك ف ة عمل السلسلة المزدوجة.

264 1, 2, 3, 4, 5 لنفترض أنه توجد سلسلة بها هذه العناصر ( ) ستكون بهذا الشكل : head tail null null ه كلمة محجوزة ف اللؽة وتعن ال ش ء أي أنه ال وجد ش ء بعد العنصر األخ ر ف السلسلة. ---< هو مإشر ش ر إلى أول عنصر ف السلسلة. head ---< هو مإشر ش ر إلى آخر عنصر ف السلسلة. tail ف حالة أن السلسلة ال وجد بها عناصر ف كون head, tail إشران على.null وكما نرى كل عنصر ش ر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر ف السلسلة ح ث ش ر إلى.null ) س كون بهذا الشكل : - ف حالة اإلضافة ف بدا ة السلسلة إضافة عنصر ( 6 head tail null سنجعله ش ر إلى أول عنصر ف السلسلة وبعد ذلن نجعل ال head إشر عل ه وبذلن رتبط بالسلسلة و كون العنصر 6 هو أول عنصر ف السلسلة.

265 - ف حالة اإلضافة ف منتصؾ السلسلة أو ف أي موضع آخر بخالؾ البدا ة والنها ة : head أوال نحدد الموضع الذي نر د إضافة العنصر ف ه tail null نجعل العنصر الجد د ش ر إلى العنصر التال للموضع الذي حددناه. head null وآخرا نجعل العنصر الذي سبك الموضع المحدد أن ش ر إلى العنصر الجد د وهكذا ضاؾ إلى السلسلة. لو جعلنا العنصر الذي سبك المكان المحدد أن ش ر أوال على العنصر الجد د ستمع السلسلة من بعد هذا المكان ولن بمى بها سوا العناصر الت تسبك الموضع المحدد.

266 head - ف حالة اإلضافة ف النها ة : tail 6 null سنجعل آخر عنصر ش ر إل ه ثم نإشر عل ه ب.tail - ف حالة الحذؾ من البدا ة ( أول عنصر ) : سنجعل ال head إشر على العنصر الذي ل أول عنصر وبذلن صبح العنصر الجد د الذي إشر عل ه ال head هو أول عنصر ف السلسلة head tail 6 null

267 head - ف حالة الحذؾ من النها ة ( آخر عنصر ) : tail 6 null سنجعل العنصر الذي سبك العنصر األخ ر إشر مباشرة على null وبذلن صبح هو آخر عنصر ف السلسلة أي ال.tail - ف حالة الحذؾ من منتصؾ السلسلة أو أي مكان ف السلسلة بخالؾ البدا ة والنها ة: أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي سبمه ش ر إلى العنصر الذي ل العنصر الذي سنحذفه. لنفترض أنه توجد سلسلة بها العناصر التال ة ( 5 ) 1, 2, 3, 4, ونر د حذؾ العنصر 3 head tail null

268 براش سنات حجمزثهن حمدقم RAM ( ةتلإملا ةركاذلا ه هذه نأ ضرتفنل ) ةم رطب اهب م ملا ن زخ ت ةركاذلا نأ امبو : لكشلا اذهب ةلسلسلا نوكت نا نكم ف ةبترم ر ؼو ة ئاوشع ~ ~ ~ ~ 1 ~ ~ ~ ~ ~ 3 ~ ~ ~ ~ ~ 5 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 6 ~ ~ ~ ~ 4 ~ 2 ~

269 السلسلة المزدوجة ( LinkedList :) Double ه نفس السلسلة الفرد ة لكن اإلختالؾ ب نهما أن المزدوجة كون لها مإشران ول س مإشرا واحدا مإشر ش ر إلى العنصر الذي بعده واآلخر ش ر إلى الذي لبله null عرؾ ) LinkedList class ( generic بهذه الطر مة : 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 ) ; 7

270 - للبحث عن عنصر مع ن نستخدم الدالة ) Contains( وتؤخذ ل مة العنصر وه ت رجع.false أو true Console.WriteLine( Link.Contains ( ) ) ; - لحذؾ عنصر من بدا ة السلسلة نستخدم الدالة ) RemoveFirst( وال تؤخذ م دخالت. Link.RemoveFirst( ) ; - لحذؾ عنصر من نها ة السلسلة نستخدم الدالة ) RemoveLast( ال تؤخذ م دخالت. Link.RemoveLast( ) ; - لحذؾ عنصر مع ن نستخدم الدالة ) Remove( وه تؤخذ العنصر الذي تر د حذفه ولو تكرر العنصر أكثر من مره فإنها تحذؾ أول عنصر تجده ف السلسلة الذي حمل هذه الم مة. مثال : توجد ف السلسلة هذه العناصر ( 6 ) 1, 2, 3, 4, 5, 3, وأنت تر د حذؾ ال 3 ستحذؾ الدالة أول 3 تمابلها فتكون السلسلة بهذا الشكل ( 6.) 1, 2, 4, 5, 3, Link.Remove( 3 ) ; 2

271 تمار ن : أنش ء برنامج إلستمبال ب انات المرضى والدخول بؤولو ة الحجز. 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; تعر ؾ ب انات المر ض. 9

272 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 ه الت ست خ زن به. 7

273 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 7

274 P.Enqueue( new patient( id, name, mobile, age ) ); ت كتب new لتنف ذ ال constructor كم دخل للدالة ( Enqueue ) ف نف ذ ال 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; 7

275 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( ); 7

276 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: 7

277 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; 7

278 default: Console.WriteLine(" false choice "); Console.WriteLine( ); break; catch( Exception Ex ) Console.WriteLine( Ex.Message ); 7

279 هياكل البيانات ) Data structures ( ه اكل الب انات ( structure ) Data إنما ه فمط أسال ب لتخز ن الب انات وإستراجعها والبحث عنها وترت بها بطرق مع نة مثلما تحدثت سابما عن ال stack وال queue وأنهما مصفوفة عاد ة لكن نحن نتحكم ف طر مة إدخال وإسترجاع الب انات بشكل مع ن. ) Searching البحث ( توجد عدة طرق للبحث عن الب انات منها : - البحث الخطي ( search ) Linear وهذه الطر مة ت عن أنه تم فحص كل العناصر من بدا ة أول عنصر ف المصفوفة إلى آخر عنصر بها إلى أن تم إ جاد العنصر الذي نبحث عنه وربما كون ؼ ر موجود ف المصفوفة. فمثال إذا كنا نبحث عن الم مة 16 ف مصفوفة م كونة من 10 عناصر كما ف المثال التال فس تم فحص كل العناصر إلى أن صل إلى الم مة الت نبحث عنها " 16 " هذه الطر مة ف البحث ؼ ر عمل ة وبط ئة ف الحاالت الت تكون ف ها المصفوفة ذات مساحة كب رة جدا ألنه مر على كل عناصر المصفوفة لذا فتكون كفاءة البرنامج ألل ألنه ستهلن ولت أطول.

280 مثال : أنش ء مصفوفة م كونة من 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 "); 72

281 ف هذا الكود أنشؤنا مصفوفة بها 15 عنصر ثم أستخدمنا Random وهو عبارة class ستخدم لتول د ل م عشوائ ة وأخذنا منه كائن )object( وأستدع نا الدالة ) Next( لتؤت لنا بالم م العشوائ ة وأستخدمنا " % " لنحدد المدى الذي ؤت بالم م العشوائ ة منه فمثال إذا كتبنا %10 فإنه ول د ل م من 0 إلى 10 فمط وإذا كانت %50 س ول د ل م من 0 إلى 50 فمط وهكذا أو مكنن تحد د مدى مع ن وتختار نمطة البدا ة والنها ة من خالل الدالة ) End_Point.Next( Start_Point, مثل ) 150 Next( 100, س ول د أرلام ف المدى من 100 إلى 150 فمط. - البحث الثنائي أو المزدوج ( search ) Binary وهو موم على طر مة أنه مسم المصفوفة إلى نصف ن و مارن العنصر الذي تبحث عنه بالعنصر الذي كون ف منتصؾ المصفوفة فإذا كان أكبر منه فإنه تجاهل كل العناصر األلل منه و نتمل إلى العناصر األكبر من منتصؾ المصفوفة ثم مسمهم إلى نصف ن و مارن منتصؾ المصفوفة الجد د بالعنصر الذي تبحث عنه فإذا كان ألل فإنه تجاهل الشك ال به عناصر أكبر و نتمل إلى العناصر األلل و ظل مسم العناصر و ظهر منتصؾ جد د و مارنه مرة أخرى مع العنصر الذي نبحث عنه إلى أن صل إل ه أو أنه كون ؼ ر موجود ف المصفوفة كلها فهذه الطر مة أفضل ف عمل ات البحث عندما تكون المصفوفة كب رة هذا ف حالة أن المصفوفة كانت م رتبة ولو لم تكن م رتبة ف جب ترت بها أوال لتعمل عل ها هذه الطر مة. مكنن ترت ب العناصر بؤي طر مة تعرفها. أو مكنن إستخدام الدالة ) array_name Sort( وه دالة جاهزة داخل class ال Array ت ستخدم لترت ب المصفوفة ونمرر للدالة اسم المصفوفة المراد ترت بها فمط. 79

282 بإستخدام.binary search منتصؾ المصفوفة األصل 20 > مثال : أبحث عن الم مة منتصؾ المصفوفة الجد د 20 > using System; namespace ConsoleApplication3 class Program static void Main( ) int[ + arr = new int*10+; Random r = new Random( ); مثال : 2

283 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; منتصؾ المصفوفة 2

284 ف هذا الكود عرف نا نمطة البدا ة ومررنا لها ل مة إبتدائ ة صفر ونمطة النها ة وه تساوي طول المصفوفة نالص 1 ألنها تعبر عن ال ( index الترل م ) ح ث كون آخر index طول المصفوفة نالص 1 ثم جئنا بمنتصؾ المصفوفة ح ث كون مجموع نمطت البدا ة والنها ة ممسوما على 2 ثم نمارن العنصر الذي نبحث عنه بؤول منتصؾ للمصفوفة فإذا كان هو نفس العنصر ف تولؾ و طبع Exist ما عدا ذلن س مارنه هل العنصر الذي نبحث عنه أكبر من المنتصؾ أو ألل إذا كان ألل فإنه س تجاهل كل العناصر الت أكبر من منتصؾ المصفوفة وتصبح نمطة النها ة الجد دة ه منتصؾ المصفوفة نالص 1 ونمطة البدا ة تظل كما ه ( صفر ) مإلتا. ثم خرج منتصؾ جد د للمصفوفة وتحدث عل ه نفس العمل ة وإذا كان العنصر الذي نبحث عنه أكبر من المنتصؾ الجد د فستكون نمطة البدا ة الجد دة ه المنتصؾ الجد د زائد 1 وتكون نمطة النها ة تحتفظ بآخر ل مة م ر رت إل ها طالما أن ل متها لم تتؽ ر. وتظل تتكرر هذه العمل ة إلى أن جد العنصر الذي تبحث عنه ف حالة أنه موجود ف المصفوفة. وه تؤخذ ولت ألل ألنها ال تمر على كل العناصر ف المصفوفة. 2

285 ) Sorting الترتيب ( ه عبارة عن عمل ة ترت ب للب انات و وجد العد د من طرق الترت ب منها : Bubble Sort - تم الترت ب بهذه الطر مة من خالل ممارنة كل عنصر بالذي ل ه فإذا كان العنصر الذي ل ه أصؽر منه فإنه بدل الم مت ن ببعضهما ثم بدأ ف ممارنة العنصر الثان بالثالث وإذا كان العنصر الثالث أصؽر من الثان فإنه س بدل الم مت ن وهكذا إلى أن تم ترت ب المصفوفة أو السلسلة الت بها الب انات وهذه الطر مة ه من أسهل طرق الترت ب لكنها تؤخذ ولت أطول وال فضل إستخدامها ف حالة الب انات الكث رة جدا. if ( arr[ j ] > arr[ j+1 ] ) swap ( arr[ j ], arr[ j+1 ] ) 1 2 9, 3, 4, 23, 10, 1, 5 j j+1 3, 9, 4, 23, 10, 1, , 4, 9, 23, 10, 1, 5 3, 4, 9, 23, 10, 1, 5 5 3, 4, 9, 10, 23, 1, 5 6 3, 4, 9, 10, 1, 23, 5 7 3, 4, 9, 10, 1, 5, 23 2

286 1 3, 4, 9, 10, 1, 5, , 4, 9, 10, 1, 5, , 4, 9, 10, 1, 5, 23 3, 4, 9, 10, 1, 5, , 4, 9, 1, 10, 5, , 4, 9, 1, 5, 10, , 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++) 2

287 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 ] 2

288 Selection Sort - تم الترت ب بهذه الطر مة من خالل البحث عن أصؽر عنصر ف المصفوفة أو السلسلة وتبد له مع أول عنصر ف المصفوفة ثم نبحث عن أصؽر ف المصفوفة لكن نبدأ من بعد أول موضع ف المصفوفة ألننا بالفعل حصلنا على أصؽر عنصر ف المرة األولى ثم نبدله مع العنصر الذي كون ف الموضع الثان ف المصفوفة وهكذا... إلى أن تم ترت ب المصفوفة. * 9, 3,4, 23, 10, 1, , 3, 4, 23, 10, 1, 5 2 1, 3, 4, 23, 10, 9, 5 3 1, 3, 4, 23, 10, 9, 5 4 1, 3, 4, 23, 10, 9, 5 5 1, 3, 4, 5, 10, 9, , 3, 4, 5, 9, 10, , 3, 4, 5, 9, 10, 23 2

289 مثال : أكتب برنامج لترت ب مصفوفة بطر مة.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 ); 27

290 insertion sort - تتم عمل ة الترت ب بهذه الطر مة بإفتراض أن المصفوفة عبارة عن جزئ ن جزء م رتب والجزء اآلخر ال بح ث أن أول عنصر ف المصفوفة عد أول جزء م رتب ف ها ثم ننتمل إلى العنصر الذي ل ه فإذا كان أصؽر منه فنبد ل العنصر ن ببعضهما ثم ننتمل إلى العنصر الثالث ونمارنه ببال العناصر ونضعه ف مكانه الصح ح و تم نمل بال العناصر الؽ ر م رتب ة إلى ال م ن خطوة واحدة لكل عنصر وتتكرر هذه العمل ة إلى أن تم ترت ب المصفوفة. * 9, 3,4, 23, 10, 1, , 3, 4, 23, 10, 1, 5 2 3, 9, 4, 23, 10, 1, 5 3 3, 4, 9, 23, 10, 1, 5 4 3, 4, 9, 10, 23, 1, 5 5 1, 3, 4, 9, 10, 23, 5 6 1, 3, 4, 5, 9, 10, 23 22

291 مثال : أكتب برنامج لترت ب مصفوفة بطر مة.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 ); 29

292 Merge Sort - تم الترت ب بهذه الطر مة من خالل تمس م المصفوفة إلى نصف ن وتمس م كل نصؾ منهما إلى نصف ن وهكذا... حتى نحصل على كل عنصر فردي ثم بعد ذلن نع د دمجهم مرة أخرى لكن بطر مة مرتبة فتظل الدالة الت ترتبهم تستدع نفسها بداخل نفسها ف النصؾ األ سر واأل من حتى تم ترت ب المصفوفة كاملة

293 مثال : أكتب برنامج لترت ب مصفوفة بطر مة.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 j ]; int index1 = 0, index2 = 0; int k = left; while (index1 < size1 && index2 < size2) if (L[ index1 ] <= R[ index2 ]) arr[ k ] = L[ index1 ]; index1++; 9

294 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); 9

295 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+" " ); 9

296 Stack ال stack هو عبارة عن نظام مع ن أو طر مة مع نة لتخز ن الب انات وإسترجاعها وال هم ما إذا كانت هذه الب انات ستكون ب Array أو Linked List فمثال نفرض أنها مصفوفة فتتم إضافة العناصر من آخر المصفوفة وتتم عمل ة اإلخراج أ ضا من آخر المصفوفة أي أن آخر عنصر ضاؾ هو أول عنصر خرج وأول عنصر ضاؾ هو آخر عنصر خرج ف تم عرض الب انات الت بداخله بطر مة عكس ة وتعمل موالع وتطب مات ضخمة بنظام ال stack مثل google, youtube, facebook ح ث أن آخر عمل ة بحث لمت بها تكون ف لمة عمل ات البحث. و تم إختصار طر مة ال stack ب ) Last in First Out ( LIFO أو ) First In Last Out ( FILO أي أن من ضاؾ أوال خرج آخرا أو من ضاؾ آخرا خرج أوال. إدخال إخراج

297 ف هذا الجزء لن نستخدم classes جاهزة ف اللؽة بل سننفذ كل ش ء عن طر ك الكود ونعرؾ ك ف ة تنف ذ ال stack ف حالة أن ال stack فارغ Stack Top -1 المتؽ ر Top نستخدمه ف عمل ات اإلدخال واإلخراج ف ال stack وتكون ل مته اإلبتدائ ة = سالب 1 ح ث عبر عن ال ( index الترل م ) الذي مؾ عنده. فإذا بدأ ترل مه بصفر فذلن معناه أنه مؾ عند أول موضع ف ال stack أي أنه توجد ل مة ف الموضع 0. ف جب أن تبدأ ل مته بسالب 1. 9

298 ف حالة إضافة أول عنصر لل Stack Stack Top وعند إضافة عنصر لل stack فإنه تز د ل مة المتؽ ر Top بممدار 1 أوال ثم ت ضاؾ الم مة الجد دة وآخر ل مة صل إل ها ال Top ه حجم المصفوفة -1. 9

299 عند حذؾ عنصر من ال stack Stack Top ن خر ج الم مة أوال ثم تنمص ل مة المتؽ ر Top بممدار 1 ف هذا المثال ستخرج الم مة 6000 أوال ثم نزل ال Top إلى العنصر الذي بعده. تظل ل مة ال Top تمل كلما أخرجنا عنصر من ال stack إلى أن صبح ال stack فارغ مجددا أي تكون ل مة ال Top سالب 1. فتكون بهذا الشكل : 97

300 Stack 4 Top وهكذا... مثال : using System; namespace ConsoleApplication4 class Program static void Main( ) 92

301 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 فارغ أم ال 99

302 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 ل ب ن لن ك ف ة تنف ذه فمط مكنن أن تض ؾ به الدوال الت تر دها وت عدل به ك فما تشاء.

303 Queue ال queue شبه ال stack عن ال.stack ؼ ر أن ال queue تعامل مع الب انات بطر مة مختلفة لل ال تتم إضافة العناصر من آخر المصفوفة وتتم عمل ة الحذؾ أو اإلخراج من أول المصفوفة أي أن آخر عنصر ض اؾ هو آخر عنصر ح ذؾ " خرج" وأول عنصر ض اؾ هو أول عنصر ح ذؾ " خرج" و تم عرض الب انات الت بداخله بطر مة عاد ة ول ست عكس ة مثل ال stack و سمى ال queue ب ) First in First Out ( FIFO أي أن من ضاؾ أوال خرج أوال. فهو ببساطة شبه الطابور م ن ؤت أوال ذهب أوال إذا أردت إخراج ال 2 ف جب أن ت خرج ال 1 أوال ألنه خ ز ن ف ال queue لبلها. مثلما كان وجد متؽ ر ف ال stack ستخدم ف عمل ات اإلدخال واإلخراج اسمه Top ف وجد أ ضا ف ال queue متؽ رات ت ستخدم لعمل ات اإلدخال واإلخراج لكن ف ال stack اإلدخال واإلخراج كان حدث من نفس المكان فكان له مدخل واحد وأ ضا المدخل كان نفسه هو المخرج أما ف ال queue األمر مختلؾ لل ال ح ث تدخل الب انات من مكان وتخرج من مكان آخر مكنن أن تشبهه بالطابور أول شخص خرج من الطابور هو أول شخص ف الطابور ثم الذي ل ه وهكذا وإذا أراد شخص ما الدخول ف الطابور فإنه مؾ ف آخر الطابور إذا وجد مكان للدخول ومكان مختلؾ للخروج من الطابور ف هذه الحالة سنحتاج إلى متؽ ر ن ول س متؽ ر واحد متؽ ر مسئول عن إدخال العناصر ومتؽ ر مسئول عن إخراجها. مكنن تسم ة المتؽ رات بؤي اسم فه مجرد متؽ رات.

304 ف حالة إذا كان ال queue فارغ First -1 Last -1 ونعط لهم ل م إبتدائ ة أ ضا بسالب 1 فذلن عبر عن أن ال queue فارغ. - عند إضافة أول عنصر ف ال queue تحرن المتؽ ر Last إلى أول خانة ف ال queue أي تز د ل مته بممدار 1 فتصبح 0 وذلن هو أول ترل م ف المصفوفة. Last = First -1 تظل ل مة المتؽ ر First كما ه سالب 1 ال.queue - عند إضافة عنصر آخر لل queue ألننا لم نخرج أي ل م ف ظل والؾ خارج Last = First -1

305 First نالص 1 وال queue وهكذا... متل ء ال queue ف حالة أن ال Last ساوي سالب 1. ساوي طول ال بممدار 1 - عند إخراج عنصر من ال queue تز د ل مة ال First أي تصبح ل مته 0 وعندها خرج أول عنصر ف ال.queue First = 0 Last = وعند إخراج عنصر آخر تحدث نفس العمل ة فتز د ل مة ال First و خر ج العنصر التال. بممدار 1 ف كل مرة Last = 4 First = 4 ف الحالة العاد ة ال مكنن أن تض ؾ عنصر آخر طالما أن ال Last مؾ عند آخر خانة ف ال queue حتى إذا كان ال queue فارغ. وجد نوع آخر من ال queue سمى Circular queue وف هذا النوع تستط ع إضافة عناصر أخرى حتى إذا كان ال Last مؾ عند آخر خانة ف ال queue فهو س عمل بطر مة دائر ة فإذا كان أول عنصر ف ال queue لد خرج فإن ال Last عود إلى أول خانة و ض ؾ ف ها.

306 مكنن أن تشبهه بهذا الشكل : Last = First = 4 ف هذه الحالة إذا أردت إضافة عنصر جد د ف جب أن ترجع ل مة ال Last إلى 0 مرة أخرى

307 Last = First = 4

308 وأ ضا ف حالة أن ال First ظل خر ج عناصر من ال queue إلى أن وصل إلى آخر خانة ف ال queue فإن أ ضا ل مته ترجع إلى صفر ف حالة أنن أردت إخراج عناصر أخرى. Last = 1 First = نستخدم هذه المعادلة لجعل ال queue دائري مثلما ذكرت : ف حالة ال Last last = (last + 1) % queue_length; ف حالة ال First First = (First + 1) % queue_length; queue_length أي طول ال queue أو المصفوفة بشكل عام. ال

309 مثال : 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 وتزداد ل مته كلما أضفنا عنصر وتمل ل مته كلما أخرجنا عنصر 7

310 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 2

311 arr[ last ] = value; public object Dequeue( ) if (is_empty( )==true) return " Queue is empty"; else first = ( first + 1 ) % length; count- - ; return arr[ first ]; دالة إلخراج عناصر من ال queue 9

312 LinkedList ه عبارة عن سلسلة مترابطة من العناصر تكون هذه العناصر مرتبطة مع بعضها من خالل مإشرات فكل عنصر ش ر إلى مكان العنصر اآلخر الذي ل ه تكون هذه العناصر م خزنة بطر مة عشوائ ة ف الذاكرة بعكس المصفوفة الت تحجز عدد من االماكن ف الذاكرة بطر مة متتال ة. ال linkedlist تمكننا من اإلضافة أو الحذؾ ف منصؾ السلسلة بدون الحاجة إلى تبد ل أماكن عناصر أخرى. لذا فه أفضل من المصفوفة " Array " ف عمل ات الحذؾ أو اإلضافة ف مكننا إضافة العناصر ف البدا ة أو المنتصؾ أو نها ة السلسلة أما ف عمل ات البحث عن عنصر ما فإنه ؤخذ ولت طو ل ألنه كما للت فعناصرها ل ست متتابعة ف الذاكرة بل إنها مبعثرة ف الذاكرة خاصة إذا كنت تبحث عن عنصر ف منتصؾ السلسلة أو نها تها. أما المصفوفة فه أسرع ف عمل ات البحث والوصول إلى العناصر الم خز نة بها وال linkedlist ال تمتل ء أبدا فكلما أضفت عنصر تض فه ه ف السلسلة بشكل مباشر فه ل س لها حجم ثابت أما المصفوفة جب أن تحدد لها الحجم ولو لم تحدد لها الحجم فإنه كلما ت دخل عنصر بها ت نش ؤ مصفوفة جد دة بحجم أكبر وت نس خ بها المصفوفة المد مة ثم ت حذ ؾ المد مة من خالل ال ( Collector.GC ) Garbage أما ال LinkedList ال كون لها حجم ثابت فكلما أضفت عنصر بها تش ر إل ه فمط وعندئذ ضاؾ إلى السلسلة مباشرة.

313 1, 2, 3, 4, 5 لنفترض أنه توجد سلسلة بها هذه العناصر ( ) ستكون بهذا الشكل : head tail null null ه كلمة محجوزة ف اللؽة وتعن ال ش ء أي أنه ال وجد ش ء بعد العنصر األخ ر ف السلسلة. ---< هو مإشر ش ر إلى أول عنصر ف السلسلة. head ---< هو مإشر ش ر إلى آخر عنصر ف السلسلة. tail ف حالة أن السلسلة ال وجد بها عناصر ف كون head, tail إشران على.null وكما نرى كل عنصر ش ر إلى العنصر الذي بعده إلى أن نصل إلى آخر عنصر ف السلسلة ح ث ش ر إلى.null ) س كون بهذا الشكل : - ف حالة اإلضافة ف بدا ة السلسلة إضافة عنصر ( 6 head tail null سنجعله ش ر إلى أول عنصر ف السلسلة وبعد ذلن نجعل ال head إشر عل ه وبذلن رتبط بالسلسلة و كون العنصر 6 هو أول عنصر ف السلسلة.

314 ف حالة اإلضافة ف منتصؾ السلسلة أو ف أي موضع آخر بخالؾ البدا ة والنها ة : - head أوال نحدد الموضع الذي نر د إضافة العنصر ف ه tail null نجعل العنصر الجد د ش ر إلى العنصر التال للموضع الذي حددناه. head null وآخرا نجعل العنصر الذي سبك الموضع المحدد أن ش ر إلى العنصر الجد د وهكذا ضاؾ إلى السلسلة. لو جعلنا العنصر الذي سبك المكان المحدد أن ش ر أوال على العنصر الجد د ستمع السلسلة من بعد هذا المكان ولن بمى بها سوى العناصر الت تسبك الموضع المحدد.

315 head - ف حالة اإلضافة ف النها ة : tail 6 null سنجعل آخر عنصر ش ر إل ه ثم نإشر عل ه ب.tail - ف حالة الحذؾ من البدا ة ( أول عنصر ) : سنجعل ال head إشر على العنصر الذي ل أول عنصر وبذلن صبح العنصر الجد د الذي إشر عل ه ال head هو أول عنصر ف السلسلة head tail 6 null

316 head - ف حالة الحذؾ من النها ة ( آخر عنصر ) : tail 6 null سنجعل العنصر الذي سبك العنصر األخ ر إشر مباشرة على null وبذلن صبح هو آخر عنصر ف السلسلة أي ال.tail - ف حالة الحذؾ من منتصؾ السلسلة أو أي مكان ف السلسلة بخالؾ البدا ة والنها ة: أوال نحدد موضع العنصر الذي سنحذفه ثم نجعل العنصر الذي سبمه ش ر إلى العنصر الذي ل العنصر الذي سنحذفه. لنفترض أنه توجد سلسلة بها العناصر التال ة ( 5 ) 1, 2, 3, 4, ونر د حذؾ العنصر 3 head tail null

317 using System; namespace ConsoleApplication5 class node public int data; public node next; public node(int data) ) node 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 أنشؤنا class عبر عن السلسلة وس كون به الدوال الخاصة بالسلسلة وعرف نا المإشر head, last و كون من نفس النوع الذي س إشر عل ه وبما أنه س إشر على ( node عنصر ) ف جب أن كون من نفسه نوعه لذا س كون نوعه node فالعنصر الواحد ال وجد به ب انات فمط بل وجد به أ ضا مإشر إشر على العنصر ال ل ه. أنشؤنا دالة اإلضافة من النها ة وتؤخذ الب انات ف حالة أن السلسلة ال وجد بها عناصر أي أن ال head ساوي null نستدع ال constructor الذي أنشؤناه ف node class ونمرر له الب انات ونجعل ال head إشر عل ه أما إذا كان وجد بها عناصر بالسلسلة نجعل مإشر العنصر الجد د إشر على null ثم نجعل مإشر ال last إشر على العنصر الجد د ثم نجعل العنصر الجد د last أي آخر عنصر ف السلسلة

المحاضرة الثانية

المحاضرة الثانية المحاضرة الثان ة أنواع الب انات)المتغ رات و الثوابت( محتو ات المحاضرة أنواع الب انات اإلعالن عن المتغ رات الثوابت إسناد الق م إلى المتغ رات واجهة برنامج Visual Studio 2010 2 أنواع الب انات كلمات لغة ال

المزيد من المعلومات

الأول في السي شارب((c#للمبتدائين

الأول في السي شارب((c#للمبتدائين شباب التنميه والبداع : امحد ياسني شلش ذ د الدرس األول: فتح فيوجل ستوديو وشرحه 2012 1 -هذا هوه البرنامج نقوم بفتحه نسخه 2012 فيوجل استوديو new )نضغط علي - 2 اي مشروع جديد( project المتبنأ هذه لغه فيوجل

المزيد من المعلومات

مختبر البرمجة والتحليل العددي قسم علوم الجو جمل التحكم والشرط والتكرار المرحلة الثانية PROGRAM CONTROL, CONDITION AND LOOP STATEMENTS الجمل الشرطية :-

مختبر البرمجة والتحليل العددي قسم علوم الجو جمل التحكم والشرط والتكرار المرحلة الثانية PROGRAM CONTROL, CONDITION AND LOOP STATEMENTS الجمل الشرطية :- جمل التحكم والشرط والتكرار PROGRAM CONTROL, CONDITION AND LOOP STATEMENTS الجمل الشرطية :- تقسم جمل الشرط الى نوعين وهي :- -1 جملة اذا الشرطية ) statement ( if -2 جملة التوزيع ) case ( switch -1 جملة اذا

المزيد من المعلومات

التاريخ: االمتحان النهائي لمساق برمجة متقدمة תכנות מתקדם موعد أ الزمن: ساعتان فقط الخميس 2017/7/27 )10 عالمات( السؤال األول for او )while الالزمة لما

التاريخ: االمتحان النهائي لمساق برمجة متقدمة תכנות מתקדם موعد أ الزمن: ساعتان فقط الخميس 2017/7/27 )10 عالمات( السؤال األول for او )while الالزمة لما التاريخ: االمتحان النهائي لمساق برمجة متقدمة תכנות מתקדם موعد أ الزمن: ساعتان فقط الخميس 2017/7/27 )10 عالمات( السؤال األول for او )while الالزمة لما يلي )الجمل بصيغتين(: أ اكتب جمل التكرار بلغة البرمجة

المزيد من المعلومات

Microsoft Word - C#2

Microsoft Word - C#2 الفصل الا ول مفاهيم البرمجة بواسطة الا هداف معنى البرمجة بواسطة األھداف... 5 معنى الفصيلة 5...Class ما ھي دوال البناء و دوال الھدم...6 Construction & destruction ما ھي خاصية التوريث 7...inheritance ما

المزيد من المعلومات

Microsoft Word - Access VBA

Microsoft Word - Access VBA الفصل الا ول (البداية) تصميم قاعدة بيانات بسيطة...4 الا وامر الا ساسية المتوفرة فى المعالجات...12 الفصل الثانى (برمجة ا كسيس (VBA برمجة أآسيس...18 VBA مقارنة بين VB وVBA...18 الدخول إلى صفحات آتابة برامج

المزيد من المعلومات

Microsoft Word - Excel VBA

Microsoft Word - Excel VBA الفصل الا ول (البداية) قواعد البرمجة...4 مقارنة بين VB و...4 VBA ضبط بيي ة Excel للبرمجة...5 الماآرو فى برنامج...8 Excel أنواع الماآرو... 9 تنفيذ الماآرو... 11 شروط اسماء المتغيرات...18 الكاي ناتObjects...18

المزيد من المعلومات

Microsoft Word - SolutionOOPFinal2011.doc

Microsoft Word - SolutionOOPFinal2011.doc صفحة 1 من 5 : : A : : 2010/ : : :. : (20/60) (2) ( 20) (10/20) : محاآاة الواقع على أنه مجموعة من الا شياء و أ ن آل شيء مكون من صفات و سلوك هو... التغليف التجرید البرمجة الشيي ية إخفاء طریقة تطبيق السلوك

المزيد من المعلومات

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

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

المزيد من المعلومات

) NSB-AppStudio برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( ) برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( NSB-AppStudio الدرس األول ) 1 ( الدرس

) NSB-AppStudio برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( ) برمجة تطبيقات األجهزة الذكية باستخدام برنامج ( NSB-AppStudio الدرس األول ) 1 ( الدرس ) NSB-AppStudio ) 1 ( أهداف الدرس : بعد انتهاء هذا الدرس ستكون الطالبة قادرة على أن : )1 توضح مميزات برنامج ( NSB-AppStudio ) 2( تعدد لغات البرمجة المستخدمة في برنامج ( NSB-AppStudio ) 3( تذكر خطوات كتابة

المزيد من المعلومات

Microsoft Word - new.doc

Microsoft Word - new.doc الدرس الاول فى الماتلاب عنوان الدرس : ما هو الماتلاب الماتلاب هو لغة ذات مستوى عالى للحسابات والبرمجة و تمتاز بوجود برنامج يسهل عملية التعامل مع هذه اللغة. ويشمل البرنامج على: الحسابات الرياضية عمل الالجوريثمات

المزيد من المعلومات

8 مادة إثرائية وفقا للمنهاج الجديد األساسي الثامن للصف الفصل الدراسي األول إعداد املعلم/ة: أ. مريم مطر أ. جواد أبو سلمية حقوق الطبع حمفوظة لدى املكتبة

8 مادة إثرائية وفقا للمنهاج الجديد األساسي الثامن للصف الفصل الدراسي األول إعداد املعلم/ة: أ. مريم مطر أ. جواد أبو سلمية حقوق الطبع حمفوظة لدى املكتبة 8 مادة إثرائية وفقا للمنهاج الجديد الساسي الثامن للصف الفصل الدراسي الول إعداد املعلم/ة:. مريم مطر. جواد و سلمية حقوق الطع حمفوظة لدى املكتة الفلسطينية رقم إيداع )017/614( من وزارة الثقافة تطل من املكتة

المزيد من المعلومات

Microsoft Word - Oracle1

Microsoft Word - Oracle1 360 Hòî b þa@âbè½ai Oracle Developer îôèm@æë í@áüèm pbíìn a@ ŠèÏ تعرف على ا وراكل تعرف على أوراكل... 4 مالمح ومزايا مجموعة التطوير 5...Oracle Developer Suite 10g أدوات تطوير التطبيقات...6 Oracle Developer

المزيد من المعلومات

برمجة متقدمة -1-

برمجة متقدمة -1- برمجة متقدمة -1- السنة الثانية قسم برمجيات م. تغريد حرفوش 08 تشرين األول 1 18 اللكمة املفتاحية Base تستخدم هذه الكلمة المفتاحية لتحديد باني االب الذي سيتم استدعاؤه في الصف االبن ضمنيا الباني في الصف االبن

المزيد من المعلومات

السالم عليكم و رحمة هللا شرح ربط قاعدة بيانات Access بال.. C# مذا ستستفيد من هذا الموضوع!! -معرفة طريقة صنع قاعدة بيانات بالAccess -ربط قاعدة البيانات

السالم عليكم و رحمة هللا شرح ربط قاعدة بيانات Access بال.. C# مذا ستستفيد من هذا الموضوع!! -معرفة طريقة صنع قاعدة بيانات بالAccess -ربط قاعدة البيانات السالم عليكم و رحمة هللا شرح ربط قاعدة بيانات Access بال.. C# مذا ستستفيد من هذا الموضوع!! -معرفة طريقة صنع قاعدة بيانات بالAccess -ربط قاعدة البيانات هذه بالC # على بركة هللا.. * *إنجاز قاعدة بيانات ب*

المزيد من المعلومات

الشريحة 1

الشريحة 1 القيادة 1 القيادة -الم ادة - تعر فات الم ادة -الفرق ب ن الم ادة واإلدارة - عناصر الم ادة اإلدار ة - نظر ات الم ادة اإلدار ة 2 القيادة تنطوي الم ادة على عاللة تبادل ة ب ن من بدأ بالفعل وب ن من نجزه وهذه

المزيد من المعلومات

ABU DHABI EDUCATION COUNCIL Abu Dhabi Education Zone AL Mountaha Secondary School g-12 science section Mathematics Student Name:.. Section: How Long i

ABU DHABI EDUCATION COUNCIL Abu Dhabi Education Zone AL Mountaha Secondary School g-12 science section Mathematics Student Name:.. Section: How Long i ABU DHABI EDUCATION COUNCIL Abu Dhabi Education Zone AL Mountaha Secondary School g-12 science section Mathematics Student Name:.. Section: How Long is the Average Chord of a Circle?/ 2009-2010 Second

المزيد من المعلومات

How To Make Connection Between Oracle DB Server 9i & Oracle Developer 6i

How To Make Connection Between Oracle DB Server 9i & Oracle Developer 6i بسم االله الرحمن الرحيم How To Make Connection Between Oracle DB Server 9i & Oracle Developer 6i آيف تربط الا وراآل 9i مع الديفيلوبر 6i الا س م التخص ص المو ه ل العم ل البل د اله اتف البري د الص فحة يوسف

المزيد من المعلومات

السالم عليكم ورحمة هللا وبركاتة كتاب تعلم برمجة االلعاب بأستخدام محرك االلعاب Unity 3D الكتاب مقدم من االستاذ : عماد عارف التوي موقع : Home OF Games ا

السالم عليكم ورحمة هللا وبركاتة كتاب تعلم برمجة االلعاب بأستخدام محرك االلعاب Unity 3D الكتاب مقدم من االستاذ : عماد عارف التوي موقع : Home OF Games ا السالم عليكم ورحمة هللا وبركاتة كتاب تعلم برمجة االلعاب بأستخدام محرك االلعاب Unity 3D الكتاب مقدم من االستاذ : عماد عارف التوي موقع : Home OF Games الدورة تهتم فقط بتعلم البرمجة من االبتداء الى االحتراف

المزيد من المعلومات

إرشادات TRUST لمجموعات االدخار واالقتراض T: الحم مة R: االحترام U: الوحدة S: االستدامة T: التحول الهدف: مساعدة المجموعات المحل ة على االدخار من موارده

إرشادات TRUST لمجموعات االدخار واالقتراض T: الحم مة R: االحترام U: الوحدة S: االستدامة T: التحول الهدف: مساعدة المجموعات المحل ة على االدخار من موارده إرشادات TRUST لمجموعات االدخار واالقتراض T: الحم مة R: االحترام U: الوحدة S: االستدامة T: التحول الهدف: مساعدة المجموعات المحل ة على االدخار من مواردهم الخاصة حتى كون بممدورهم: أ( مواجهة أزمة تتسبب ف استهالن

المزيد من المعلومات

أساسيات البرمجة بلغة الجافا

أساسيات البرمجة بلغة الجافا أساسيات البرمجة بلغة الجافا كتاب أساسيات البرمجة بلغة الجافا يتكون الكتاب من سبعة فصول تشرح الجوانب االساسية في لغة الجافا في الفصل االول من الكتاب نشرح مميزات لغة الجافا والمتغيرات في الفصل الثاني نوضح

المزيد من المعلومات

جامعة حضرموت

جامعة حضرموت جاهعة حضرهوت التسجيل االلكتروني لمرحلة التنسيق بالجامعة عبر الموقع www.hu-registration.com الصفحة الرئيسية زر الدخول على النظام ف حالة التسج ل سابقا ولد ك اسم مستخدم وكلمة مرور زر تسج ل متقدم جد د اذا

المزيد من المعلومات

الحل المفضل لموضوع الر اض ات شعبة تقن ر اض بكالور ا 2015 الحل المفص ل للموضوع األو ل التمر ن األو ل: 1 كتابة و على الشكل األس. إعداد: مصطفاي عبد العز

الحل المفضل لموضوع الر اض ات شعبة تقن ر اض بكالور ا 2015 الحل المفص ل للموضوع األو ل التمر ن األو ل: 1 كتابة و على الشكل األس. إعداد: مصطفاي عبد العز الحل المفص ل للمضع األ ل التمر ن األ ل: كتابة على الشكل األس k ' cos s cos s e e ب( تع ن ق م العدد الطب ع بح ث كن العدد حق ق ا e e e arg حق ق معناه k منه k عل ه k ' k ح ث e ج( عدد مركب ح ث حساب ط لة العدد

المزيد من المعلومات

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

الدرس : 1 مبادئ ف المنطق مكونات المقرر الرسم عناصر التوج هات التربو ة العبارات العمل ات على العبارات المكممات االستدالالت الر اض ة: االستدالل بالخلف ا الدرس : 1 مبادئ ف المنطق مكونات المقرر الرسم عناصر التوج هات التربو ة العبارات العمل ات على العبارات المكممات االستدالالت الر اض ة: االستدالل بالخلف االستدالل بفصل الحاالت االستدالل بالتكافؤ نبغ تقر ب

المزيد من المعلومات

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

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

المزيد من المعلومات

اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED

اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED اردوينو الدرس الثامن تغيير درجة الالوان ل RGB LED في هذا الدرس ستقوم بتطبيق ماتعلمته بالدرس السابع والرابع وذلك لاستخدام الازرار في تغيير درجة الالوان في RGB Led القطع المطلوبة لاتمام هذا الدرس عليك توفير

المزيد من المعلومات

Principles of C++ (Precedence)

Principles of C++ (Precedence) C++ Programming Week 1 Introduction to C++ HS Engineers اإلحسان ي ح ط من قدر من يت ل قونه. )1( Modulus Operator Division Operator كيفية ( / % ) التعامل مع في حال قسمة رقم صحيح على رقم صحيح آخر ينتج رقم

المزيد من المعلومات

1

1 1 " ق ل إ ن ص ال ت ي و ن س ك ي و م ح ي اي و م م ات ي ل ل ه ر ب ال ع ال م ني ال ش ر يك ل ه و ب ذ ل ك أ م ر ت و أ ن ا أ و ال م س ل م ني " 2 إهدإء إلى والدى ر حم ة إلله عليهما.. و إلى إخوتى الدين لا يدخ رون

المزيد من المعلومات

مدرسة هارون الرشيد الثانوية للبنين المهارات العملية / تكنولوجيا المعلومات ( الثاني عشر) إعداد/ أ. خالد الح

مدرسة هارون الرشيد الثانوية للبنين المهارات العملية / تكنولوجيا المعلومات ( الثاني عشر) إعداد/ أ. خالد الح املهارات العملية / تكنولوجيا املعلومات )Appinventor )بزنامج :on line من خالل االنترنت مباشرة App inventor خطوات تشعيل برنامج الدخول إلى حساب ج م ل.Gmail ثم رابط الموقع App inventor عبر متصفح االنترنت http://appinventor.mit.edu/explore/

المزيد من المعلومات

الفصل الثاني

الفصل الثاني 1 برنامج MINTAB 17 105 احص إعداد أ- ريم المبطي 2 الفصل الثاني ( اختبارات الفروض وفترات الثقة ) لمعالم مجتمع واحد أوال : اختبار المتوسط : لدينا حالتين : نستخدم اختبار Z عندما : N كبيرة و معلومة أو مجهولة

المزيد من المعلومات

المكونات

المكونات لغات البرمجه Programming Languages 2016/2017 الب ارمج او البرمجيات: هو عبارة عن مجموعة من األوامر والتعليمات مرتبة بتسلسل معين ويقوم الحاسوب بتنفيذها لتحقيق الهدف من البرنامج. المقدمة ىناك العديد من لغات

المزيد من المعلومات

استنادا الى احكام البند )ثالثا ( من المادة )08( من الدستور واحكام البند )2( من المادة )4( من امر سلطة االئتالؾ المؤقته )المنحلة( رقم )65( لسنة 2884 )ق

استنادا الى احكام البند )ثالثا ( من المادة )08( من الدستور واحكام البند )2( من المادة )4( من امر سلطة االئتالؾ المؤقته )المنحلة( رقم )65( لسنة 2884 )ق استنادا الى احكام البند )ثالثا ( من المادة )08( من الدستور واحكام البند )2( من المادة )4( من امر سلطة االئتالؾ المؤقته )المنحلة( رقم )65( لسنة 2884 )قانون البنك المركزي ) والبند ثان ا من المادة )9( من

المزيد من المعلومات

جامعة العقيد الحاج لخضر - باتنة - 1 كلية العلوم االقتصادية والتجارية وعلوم التسيير قسم التعليم األساسي مادة II دروس وتطبيقات الرياضيات لطلبة السنة األ

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

المزيد من المعلومات

وزارة الترب ة بنك األسئلة لمادة علم النفس و الح اة التوج ه الفن العام لالجتماع ات الصف الحادي عشر أدب 0211 / 0212 األولى الدراس ة الفترة *************

وزارة الترب ة بنك األسئلة لمادة علم النفس و الح اة التوج ه الفن العام لالجتماع ات الصف الحادي عشر أدب 0211 / 0212 األولى الدراس ة الفترة ************* وزارة الترب ة بنك األسئلة لمادة علم النفس و الح اة التوج ه الفن العام لالجتماع ات الصف الحادي عشر أدب 2 / 22 األولى الدراس ة الفترة ************************************************************************************

المزيد من المعلومات

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

دولة فلسطين و ازرة التربية والتعليم العالي المبحث: تكنولوجيا المعلومات / النظري بسم هللا الرحمن الرحيم مدة االمتحان : ساعتان نموذج تجريبي مجموع العالم دولة فلسطين و ازرة التربية والتعليم العالي المبحث: تكنولوجيا المعلومات / النظري بسم هللا الرحمن الرحيم مدة االمتحان : ساعتان نموذج تجريبي مجموع العالمات )70( عالمة مالحظة: عدد األسئلة خمسة أسئلة وعلى الطالب

المزيد من المعلومات

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

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

المزيد من المعلومات

( IP Address ) العنوان الشبكي

( IP Address ) العنوان الشبكي اسم المقرر شبكات وامن المعلومات عنونة وتقس م الشبكات Network Addressing and Subnetting المحتو ات مقدمة العنوان الشبكى ) Address ( IP تقس مات العنوان الشبكى parts( )IP Network and Host قناع الشبكة Subnet

المزيد من المعلومات

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

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

المزيد من المعلومات

اجيبي علي الاسئلة التالية بالكامل:

اجيبي علي الاسئلة التالية بالكامل: أساليب توزيع السكان وكثافتهم أوال: التوزيع السكاني Population Distribution التوزيع السكاني هو عبارة عن توزيع البشر األعداد المطلقة على الرقعة المساحية. إن التوزيع الجغ ارفي للسكان هو الجغ ارفية. انعكاس

المزيد من المعلومات

برمجة NXT والخوارزميات تتبع الخط سلسلة دروس الروبوت التعل م قسم برمجة NXT والخوارزم ات تتبع الخط )حساس الضوء واأللوان( 1

برمجة NXT والخوارزميات تتبع الخط سلسلة دروس الروبوت التعل م قسم برمجة NXT والخوارزم ات تتبع الخط )حساس الضوء واأللوان(   1 سلسلة دروس الروبوت التعل م قسم برمجة NXT والخوارزم ات )حساس الضوء واأللوان( www.talents.edu.sa 1 اإلصدار 1,1 سبتمبر 2111 شركة المواهب الوطن ة للتدر ب والتعل م 2111 بعض الحقوق محفوظة. باستثناء المواضع الت

المزيد من المعلومات

الموضوع الثالث تحليل التباين ANOVA) (Two Way الثنائي One Depended نلجأ الى ھذا القانون عند توفر متغيرين يتوقع بينھما تداخل او تفاعل (في تحليل التباين

الموضوع الثالث تحليل التباين ANOVA) (Two Way الثنائي One Depended نلجأ الى ھذا القانون عند توفر متغيرين يتوقع بينھما تداخل او تفاعل (في تحليل التباين الموضوع الثالث تحليل التباين ANOVA) (Two Way الثنائي One Depended نلجأ الى ھذا القانون عند توفر متغيرين يتوقع بينھما تداخل او تفاعل (في تحليل التباين االحادي كنا نقارن بين ثالث مجاميع في متغير واحد مثال

المزيد من المعلومات

ص)أ( المملكة العرب ة السعود ة وزارة التعل م اإلدارة العامة للتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول انفترة انثانثت العام

ص)أ( المملكة العرب ة السعود ة وزارة التعل م اإلدارة العامة للتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول انفترة انثانثت العام ص)أ( المملكة العرب ة السعود ة وزارة التعل م اإلدارة العامة للتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول انفترة انثانثت العام الدراس - 8 المعلمة المرحلة الصف المادة وفاء المالكي

المزيد من المعلومات

تصحيح مادة الرياضيات شعبة الرياضيات التمرين األول : و أي ان تكون النقط بما أن و و و α β α β α β و منه الشعاعان و غير مرتبطان خطيا إذن النقط من نفس الم

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

المزيد من المعلومات

عرض تقديمي في PowerPoint

عرض تقديمي في PowerPoint Dr./ Ahmed Mohamed Rabie Sayed 1 2 Symbol Sprayer Tool -23 تستخدم األداة Symbol Sprayer Tool إلنشاء مجموعة من الرموز Symbols التصميم. لتنشيط األداة يتم الضغط على مفتاح Shift+S من لوحة المفاتيح. صفحة داخل

المزيد من المعلومات

الصفة المشبَّهة باسم الفاعل

الصفة المشبَّهة باسم الفاعل الصفة المشب هة باسم الفاعل ه اسم صاغ من الفعل الالزم للداللة على معنى اسم الفاعل وتشابه اسم الفاعل ف المعنى وتفترق عنه ف أن ها تدل على ثابتة. صفة وأوزانها متعددة ثالثة منها مختصة بباب) وأربعة ف ع ل ( مختصة

المزيد من المعلومات

PowerPoint Presentation

PowerPoint Presentation مشروع التسويق ولوجيستيات االعمال الزراعية المتقدمة التحليل المالي كيبف تحدد سعر التكلفة والسعر النهائي الى أي مدى يعكس السعر الجودة 50 قرش للكيلو جنيه للكيلو هل التكاليف هي المكون الوحيد للسعر 3 مالذي

المزيد من المعلومات

محاضرات C++

محاضرات C++ محاضرات C++ لألستاذ/ بسام الھاملي إعداد الطالب: ھشام يحيى دالل اإلھداء اللھم إني أردت بھذا العمل وجھك الكريم فتقبل مني اللھم من استفاد من ھذا الكتاب بمعلومة فاكتب لي بھ ا ح سنة وإن تضاعف لي فإنك أنت الحليم

المزيد من المعلومات

طبيعة بحته و أرصاد جوية

طبيعة بحته و أرصاد جوية طبيعة بحته و أرصاد جوية 3 206-2007 الضوء محاضرة 3 قوانين األنعكاس واألنكسار المرايا العدسات التلسكوب الفلكي قوانين األنعكاس و األنكسار عند سقوط شعاع ضوئي علي سطح فاصل بين وسطين ينعكس جزء منة و ينكسر جزء

المزيد من المعلومات

ورقة عمل الدرس الثاني تطبيقي اخلاص على هاتفي... برنامج App Inventor اعداد املعلمة : اماني ممدوح املصري مدرسة امحد شوقي الثانوية للبنات اختار اإلجابة ا

ورقة عمل الدرس الثاني تطبيقي اخلاص على هاتفي... برنامج App Inventor اعداد املعلمة : اماني ممدوح املصري مدرسة امحد شوقي الثانوية للبنات اختار اإلجابة ا ورقة عمل الدرس الثاني تطبيقي اخلاص على هاتفي... برنامج App Inventor اعداد املعلمة اماني ممدوح املصري مدرسة امحد شوقي الثانوية للبنات اختار اإلجابة الصحيحة من بني االختيارات االتية - نضغط على االمر ببرنامج

المزيد من المعلومات

Banner – Hold Information SOAHOLD

Banner – Hold Information SOAHOLD 1 Financial Aid System Documentation - eservice E-serviceخطوات التقديم لنظام المساعدات عبر ال 2 خطوات التقديم لنظام المساعدات Steps to apply for financial aid 1 Login to the portal http://my.uaeu.ac.ae

المزيد من المعلومات

المحاضرة الرابعة التكامل المحدد Integral( (Definite درسنا في المحاضرة السابقة التكامل غير المحدد التكامل المحدد لها. ألصناف عدة من التوابع وسندرس في ه

المحاضرة الرابعة التكامل المحدد Integral( (Definite درسنا في المحاضرة السابقة التكامل غير المحدد التكامل المحدد لها. ألصناف عدة من التوابع وسندرس في ه المحاضرة الرابعة التكامل المحدد Integrl( (Deinite درسنا في المحاضرة السابقة التكامل غير المحدد التكامل المحدد لها. ألصناف عدة من التوابع وسندرس في هذه المحاضرة مفهوم التكامل المحدد ليكن () تابعا مستمرا

المزيد من المعلومات

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

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

المزيد من المعلومات

وزارة التربية االدارة العامة لمنطمة مبارن الكبير التعليمية التوجيه الفني للتربية البدنية / بنات

وزارة التربية االدارة العامة لمنطمة مبارن الكبير التعليمية التوجيه الفني للتربية البدنية / بنات وزارة التربية االدارة العامة لمنطمة مبارن الكبير التعليمية التوجيه الفني للتربية البدنية / بنات اليوم : االربعاء التايخ : 7112/1/11 المكان : مدرسة الصالحية المتوسطة بنات في تمام الساعة التاسعة صباحا وبحضور

المزيد من المعلومات

قسم تكنولوجيا الحاسوب والمهن الصناعية

قسم تكنولوجيا الحاسوب والمهن الصناعية تكنىلىجيا قسم الحاسىب والمهن الصناعية تطبيقات برمجية الكترونية مقدمة عن برنامج LabView م.محمد األسمر الفصل الثاني 2012 م مقدمة فى LabVIEW الهدف : التعرف على بيئة.LabVIEW المحتويات : Virtual 1( ما هى Instruments

المزيد من المعلومات

بسم هللا الرحمن الرحيم االسئلة المتوقعه لمادة الحاسوب م 3 شتوية 2016 االستاذ نور الدين بني عطا االسئلة المتوقعه على مادة الحفظ سؤال 1 : وضح

بسم هللا الرحمن الرحيم االسئلة المتوقعه لمادة الحاسوب م 3 شتوية 2016 االستاذ نور الدين بني عطا االسئلة المتوقعه على مادة الحفظ سؤال 1 : وضح بسم هللا الرحمن الرحيم االسئلة المتوقعه لمادة الحاسوب م 3 شتوية 2016 االستاذ نور الدين بني عطا 0775226286 االسئلة المتوقعه على مادة الحفظ سؤال 1 : وضح المقصود بكل من : 1( االقتصاد المعرفي : هو االقتصاد

المزيد من المعلومات

Slide 1

Slide 1 Correlation and Regression اإلرتباط واإلنحدار Correlation اإلرتباط - Describes the relationship between two (X & Y) variables يوضح العالقة بين متغيرين )Y, X( - One variable is called independent (X) and

المزيد من المعلومات

نسخه إلكرتونيه جمانيه بقمل : معاويه نورإدلين 2013

نسخه إلكرتونيه جمانيه بقمل : معاويه نورإدلين 2013 نسخه إلكرتونيه جمانيه بقمل : معاويه نورإدلين 2013 الفهرس إسم الموضوع ان قذي اإل ذاء انعبيم انشرطي عبيم انزيبد ان قصب ع ايم انتععي انحسبثي انتركيج switch حهق انتكرار for حهق انتكرار do.. while حهق انتكرار

المزيد من المعلومات

ص)أ( المملكة العرب ة السعود ة وزارة الترب ة والتعل م اإلدارة العامة للترب ة والتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول ان

ص)أ( المملكة العرب ة السعود ة وزارة الترب ة والتعل م اإلدارة العامة للترب ة والتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول ان ص)أ( المملكة العرب ة السعود ة وزارة الترب ة والتعل م اإلدارة العامة للترب ة والتعل م بمحافظة جدة الب ان النموذج ة ( تعل م عام ) انفصم اندراسي األول انفترة انثانثت العام الدراس - 1 18 ه االسم المرحلة الصف

المزيد من المعلومات

دليل تدريبي : الحلول لما بعد اختراق الحسابات إعداد : محمد المسقطي Mohammed Al-Maskati بمساعدة : علي السباعي Ali Sibai

دليل تدريبي : الحلول لما بعد اختراق الحسابات إعداد : محمد المسقطي Mohammed Al-Maskati بمساعدة : علي السباعي Ali Sibai دليل تدريبي : الحلول لما بعد اختراق الحسابات إعداد : محمد المسقطي Mohammed Al-Maskati Twitter:@mohdmaskati بمساعدة : علي السباعي Ali Sibai Twitter:@alisibai المقدمة : العديد منكم يتعرض إلى حالة من الصدمة

المزيد من المعلومات

المدة : 5 دقي. النش ط : ال راءة. المست ى : قس التحضير.. 9 عن ان الدرس : أربط بين الص الحرف ( (. رق ال حدة : الك ءا ال عدي : يتعرف ع الص ) ( المسم ع ث

المدة : 5 دقي. النش ط : ال راءة. المست ى : قس التحضير.. 9 عن ان الدرس : أربط بين الص الحرف ( (. رق ال حدة : الك ءا ال عدي : يتعرف ع الص ) ( المسم ع ث . 9 أربط بين الص الحرف ( (. الك ءا ال عدي : يتعرف ع الص ) ( المسم ع ث يربطه ب لص ) ( المكت [ الحرف ] يميزه من خال تسمي مجم ع م شر الك ءة : يتعرف ع الص ) ( المسم ع ث يربطه ب لص ) ( المكت [ الحرف ] يميزه

المزيد من المعلومات

مكونات الحاسب الآلي

مكونات الحاسب الآلي تطبيقات محاسبية بالحاسوب 465 حسب مقدمة في التطور التقني ألجهزة الحاسب اآللي والبرامج التطبيقية Company LOGO أ.هناء المغامس المحتويات : 1. مقدمة الحاسب اآللي. مكونات الحاسب اآللي )المادية و البرمجية(..2

المزيد من المعلومات

المشروحات االضافية والشروط العامة للتداول باألسواق المالية العالمية. ممدمة تمدم هذه الوث مة مشروحات إضاف ة والشروط العامة للتداول باألسواق المال ة الع

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

المزيد من المعلومات

correction des exercices pendule pesant Ter

correction des exercices pendule pesant Ter تصحيح تمارين النواس الوازن تمرين نطبق العلاقة الا ساسية للديناميك على المجموعة S جرد القوى المطبقة على المجموعة : S S وزن المجموعة : P S تا ثير المحور على المجموعة : R M F && بما أن المجموعة قابلة للدوران

المزيد من المعلومات

عرض تقديمي في PowerPoint

عرض تقديمي في PowerPoint Dr./ Ahmed Mohamed Rabie Sayed 1 2 صندوق االدوات صندوق االدوات Tools Box يحتوى اظهار وإخفاء Tools Box من قائمة على االدوات Window الرئيسية الالزمة النشاء واختيار.Tools وتعديل التصميم. ويمكن 3 Move Tool

المزيد من المعلومات

جاهعة الوسيلة هركز الشبكات و أنظوة اإلعالم و االتصال والتعلين الوتلفز و التعلين عن بعد مودل Moodle التعل م نظام استخدام "دل ل االلكترون للطلبة" نظام ا

جاهعة الوسيلة هركز الشبكات و أنظوة اإلعالم و االتصال والتعلين الوتلفز و التعلين عن بعد مودل Moodle التعل م نظام استخدام دل ل االلكترون للطلبة نظام ا مودل Moodle التعل م نظام استخدام "دل ل االلكترون للطلبة" نظام التعليم االلكتروني مودل: هدف نظام التعل م االلكترون إل جاد ب ئة تفاعل ة تم من خاللها التواصل ب ن االساتذة ه وطلبتم وب ن الطلبة ف ما ب نهم من

المزيد من المعلومات

WHAT’S NEW

WHAT’S NEW الجديد في انجز تطبيق إصدارات X.4 المحتويات المحتويات... 1 المواصفات الجديدة بالنظام... 3.1.1.1 عدد المهام التي يجب إنجازها... 3 انشاء مهمة... 3.1.2 2. تعديل تكليف المهمة... 3 تاريخ حالات المهمة... 4.2.1.2.2.3

المزيد من المعلومات

جمعية زمزم للخدمات الصحية التطوعية بإشراف وزارة الشؤون االجتماعية تصريح رقم )411( نظام إدارة الجودة Quality Management System إجراءات الئحة تقنية املع

جمعية زمزم للخدمات الصحية التطوعية بإشراف وزارة الشؤون االجتماعية تصريح رقم )411( نظام إدارة الجودة Quality Management System إجراءات الئحة تقنية املع جمعية زمزم للخدمات الصحية التطوعية بإشراف وزارة الشؤون االجتماعية تصريح رقم )411( نظام إدارة الجودة Quality Management System إجراءات الئحة تقنية املعلومات زمزم 19 إعداد االسم : هاني عبدالعزيز فلمبان الوظيفة

المزيد من المعلومات

بسم اهلل الرمحن الرحيم الوحدة الثانية الفيجول بيسك Microsoft VISUAL BASIC احلمد اهلل الذي أكرمين و منحين الفرصة لتوفري لكم هذا امللخص املنقى للوحدة ال

بسم اهلل الرمحن الرحيم الوحدة الثانية الفيجول بيسك Microsoft VISUAL BASIC احلمد اهلل الذي أكرمين و منحين الفرصة لتوفري لكم هذا امللخص املنقى للوحدة ال بسم اهلل الرمحن الرحيم الوحدة الثانية الفيجول بيسك Microsoft VISUAL BASIC احلمد اهلل الذي أكرمين و منحين الفرصة لتوفري لكم هذا امللخص املنقى للوحدة الثانية من الكتاب املدرسي للصف احلادي عشر, و ارجوا أن

المزيد من المعلومات

( اختبارات الفروق لعينتين مستقلتين Samples) 2) Independent مان- ويتني( U (Mann-Whitney ب( نحتاج الى ھذا القانون الغراض المقارنة بين مجموعتين او عينتين

( اختبارات الفروق لعينتين مستقلتين Samples) 2) Independent مان- ويتني( U (Mann-Whitney ب( نحتاج الى ھذا القانون الغراض المقارنة بين مجموعتين او عينتين ( اختارات الفروق لعينتين مستقلتين Samples) 2) Independent مان ويتني( U (MannWhitney ( نحتاج الى ھذا القانون الغراض المقارنة ين مجموعتين او عينتين مستقلتين مثال المقارنة ين عينة للذكور م ع عينة لالناث او

المزيد من المعلومات

Determinants

Determinants قسم الهندسة الزراعية د/ خالد ف ارن طاهر الباجورى استاذ الهندسة الز ارعية المساعد khaledelbagoury@yahoo.com Mobil: 01222430907 المقدمة ماهي المصفوفة جمع الضرب الكمي للمصفوفات ضرب منقول المصفوفة محدد المصفوفة

المزيد من المعلومات

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

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

المزيد من المعلومات

1 New system technology Mahmoud said Object-Oriented Programming in C ++ Cookbook 1

1 New system technology Mahmoud said Object-Oriented Programming in C ++ Cookbook 1 1 Object-Oriented Programming in C ++ Cookbook 1 2 المحتويات لماذا البرمجة الكائنية OOP I. Chapter 1: II. Chapter 2: OOP تعريفات هامة ل (important for interviews) االختالف بين الهيكل والكالس Classes) III.

المزيد من المعلومات

متطلبات النظام متطلبات جهاز الكمبيوتر الشخصي معالج Pentium 1 Intel غيغا هرتز أو أسرع نظام التشغيل Windows 2000 أوXP Windows مع Service Pack 2 أو Vista

متطلبات النظام متطلبات جهاز الكمبيوتر الشخصي معالج Pentium 1 Intel غيغا هرتز أو أسرع نظام التشغيل Windows 2000 أوXP Windows مع Service Pack 2 أو Vista متطلبات النظام متطلبات جهاز الكمبيوتر الشخصي معالج Pentium 1 Intel غيغا هرتز أو أسرع نظام التشغيل Windows 2000 أوXP Windows مع Service Pack 2 أو Vista Window أو Windows 7 Enterprise أو Ultimate أو Business

المزيد من المعلومات

إيناس السيد محمد الشعراوى أستاذ مساعد قسم الحاسب كلية التربية - الجبيل المعلومات الشخصية الجنسية : مصرية تاريخ الميالد / 11 / م القسم علوم الحاس

إيناس السيد محمد الشعراوى أستاذ مساعد قسم الحاسب كلية التربية - الجبيل المعلومات الشخصية الجنسية : مصرية تاريخ الميالد / 11 / م القسم علوم الحاس إيناس السيد محمد الشعراوى أستاذ مساعد قسم الحاسب كلية التربية - الجبيل المعلومات الشخصية الجنسية : مصرية تاريخ الميالد 3 984/ / م القسم علوم الحاسب اآللى البريد الجامعي الرسمي eeelsharawy@iau.edu.sa الهاتف

المزيد من المعلومات

Slide 1

Slide 1 تصميم السيرة الذاتية كصفحات الويب د. احمد عادل اسماعيل عمادة المركز الجامعي لخدمة المجتمع و التعليم المستمر. WWW.Dr-Ahmed.Info Info@Dr-Ahmed.Info -------------- المرجع: www.support.office.com اهداف المحاضرة

المزيد من المعلومات

الشريحة 1

الشريحة 1 2 األشكال الثالثية األبعاد 4 الف ص ل السادس 5 6 ن 2 : املئ الجدول بالرقم المناسب عدد أضالع القاعدة 4 ن 3 8 عدد أحرف المجس م 6 كانت إذا قاعدة الهرم مثلثة الشكل ذ فكم عدد أضالعها كم حرف ا كانت إذا للهرم

المزيد من المعلومات

أ متطلبات التأش رة قص رة المدة عز زنا العم ل برجاء التأكد من النقاط التال ة: - تم تقد م الطلب للحصول على التأش رة ف مكتب ف إف إس جلوبال مكتب تأش رات م

أ متطلبات التأش رة قص رة المدة عز زنا العم ل برجاء التأكد من النقاط التال ة: - تم تقد م الطلب للحصول على التأش رة ف مكتب ف إف إس جلوبال مكتب تأش رات م أ متطلبات التأش رة قص رة المدة عز زنا العم ل برجاء التأكد من النقاط التال ة: - تم تقد م الطلب للحصول على التأش رة ف مكتب ف إف إس جلوبال مكتب تأش رات مالطا من الساعة 03:80 صباحا وحتى 03:80 مساءا من األحد

المزيد من المعلومات

1 درس :

1 درس : 1 درس : ثانية االمام البخاري التأهيلية المستى: الجدع المشترك العلمي المكن : الهندسة المرجع: في رحاب الرياضيات المادة: الرياضيات الجدادة: رقم 2 71 فبراير االسبع: من الدرس الى 32 فبراير 3172 المستقيم في

المزيد من المعلومات

التصمیم والبرمجة غرضیة التوجھ الدكتورساميخیمي ISSN: X Books & Refrences

التصمیم والبرمجة غرضیة التوجھ الدكتورساميخیمي ISSN: X Books & Refrences التصمیم والبرمجة غرضیة التوجھ الدكتورساميخیمي Books & Refrences التصميم والبرمجة غرضية التوجه الدكتور سامي خيمي من منشورات الجامعة االفتراضية السورية الجمهورية العربية السورية 2018 هذا الكتاب منشور تحت

المزيد من المعلومات

الصف السادس االبتدائي الفصل الدراسي االول بسم هللا الرحمن الرحيم الصفحة محتويات الفصل الدراسي األول الموضو

الصف السادس االبتدائي الفصل الدراسي االول بسم هللا الرحمن الرحيم الصفحة محتويات الفصل الدراسي األول الموضو بسم هللا الرحمن الرحيم الصفحة 2 3 4 5 6 7 9 11 11 13 14 16 16 17 11 19 22 محتويات الفصل الدراسي األول الموضوع اختيار دولة محددة تغيير نمط عرض التاريخ لالرقام تغيير نمط عرض التاريخ )هجري - ميالدي( تغيير

المزيد من المعلومات

الفرق بين البرمجة الإجرائية و البرمجة المسيرة بالأحداث :

الفرق بين البرمجة الإجرائية و البرمجة المسيرة بالأحداث : طرق كتابة HTML محرر النصوص Text Editor مثل Notepad محرر بطريقة واجهة المستخدم الرسومية GUI Editor وهو محرر يكتب كود بلغة Dream تلقائيا باستخدام القوائم الموجودة فيه مثل برنامج Weaver 8.0 HTML 2 انواع محررات

المزيد من المعلومات

PowerPoint Presentation

PowerPoint Presentation عرض لنظام المعماري الاستراتيجي لمتابعة الأداء وتنفيذ الاستراتيجيات 1999 مقدمة تاسست عام في مصر شركة مساهمة خاصة من عام 2002 المقر الرئيسي بالقاهرة 35 موظف شركاء استراتيجيين في الشرق الأوسط خبرات دولية

المزيد من المعلومات

60 ) ( ) ( ) منطمة العاصمة التعل م ة اختبار تجر ب للصف السادس مدرسة عبد العز ز حس ن الفصل الدراس الثان للعام 8 االسم أوال كفا ة المراءة والمشاهدة / 9

60 ) ( ) ( ) منطمة العاصمة التعل م ة اختبار تجر ب للصف السادس مدرسة عبد العز ز حس ن الفصل الدراس الثان للعام 8 االسم أوال كفا ة المراءة والمشاهدة / 9 60 منطمة العاصمة التعل م ة اختبار تجر ب للصف السادس مدرسة عبد العز ز حس ن الفصل الدراس الثان للعام 8 االسم أوال كفا ة المراءة والمشاهدة / 9 م / الصف / : المع ار: مول هللا تعالى : }و اص ب ر ن ف س ن م ع

المزيد من المعلومات

اختر عنوان مناسب

اختر عنوان مناسب 1 كيفية الوصول الى البريد االلكتروني في الكلية 2 3 الهدف من المحاضرة.Webmail كيفية الدخول الى حساب البريد االلكتروني في الخادم الجديد باستخدام كيفية استعراض الرسائل االلكترونية في السيرفر القديم..Microsoft

المزيد من المعلومات

Microsoft Word - Suites_Numériques_1_sm.doc

Microsoft Word - Suites_Numériques_1_sm.doc الا ستاذ الا لى علم رياضية المتتاليات العددية - I عمميات 4 ; 8 ; ; 6 ; ; ; أمثلة تمهيدية مثال أتمم بشكل منطقي ما يلي نقترح تخصيص رمز لكل من هذه الا عداد لهذا نضع u 4 ; u 8 ; u ; u 6 ; 4 5 فيكن لدينا I

المزيد من المعلومات

شرح برنامج استعادة الملفات المحذوفة Recover my files من اعداد : رافاييل يوسف مقدمة: آلنا يعلم ان اجهزة الكومبيوتر قادرة على حفظ الملفات على قرصها الصل

شرح برنامج استعادة الملفات المحذوفة Recover my files من اعداد : رافاييل يوسف مقدمة: آلنا يعلم ان اجهزة الكومبيوتر قادرة على حفظ الملفات على قرصها الصل شرح برنامج استعادة الملفات المحذوفة Recover my files من اعداد : رافاييل يوسف مقدمة: آلنا يعلم ان اجهزة الكومبيوتر قادرة على حفظ الملفات على قرصها الصلب على شكل موج ات آهرومغناطيسية و اننا نعلم باننا نستطيع

المزيد من المعلومات

عرض تقديمي في PowerPoint

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

المزيد من المعلومات

دليل الحسابات دل ل الحسابات هو عبارة عن نافذة تحوي شجرة حسابات افتراض ة تضم هذه الشجرة األنواع الثالثة لتصن ف الحسابات وه حسابات ( المتاجرة األرباح وا

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

المزيد من المعلومات

نظرية الملاحظة

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

المزيد من المعلومات

كيفية استخدام موقع 4shared لرفع الملفات وتنظيمها على النترنت للمبتدئين. والمتقدمين في الحاسب. كتاب ل ابراهيم شاهين

كيفية استخدام موقع 4shared   لرفع الملفات وتنظيمها على النترنت للمبتدئين. والمتقدمين في الحاسب. كتاب ل ابراهيم شاهين كيفية استخدام موقع 4shared www.4shared.com لرفع الملفات وتنظيمها على النترنت للمبتدئين. والمتقدمين في الحاسب. كتاب ل ابراهيم شاهين بسم ال الرحمن الرحيم مقدمة بسيطة موقع 4shared.com هو موقع لرفع الملفات

المزيد من المعلومات

Allomani Warehouse User Guide

Allomani Warehouse User Guide المخزن warehouse.allomani.com دليل المستخدم اللوماني للخدمات البرمجية www.allomani.com / 11 اكتوبر / 2010 1 P a g e المحتويات اضافة و اعداد موقعك في المخزن... 3 اعداد بيانات ال...FTP 3 اعدادات بيانات حقوق

المزيد من المعلومات

دليل المستخدم لبوابة اتحاد المالك التفاعلية

دليل المستخدم لبوابة اتحاد المالك التفاعلية دليل المستخدم لبوابة اتحاد المالك التفاعلية الشاشة الرئيسية 3 إنشاء مستخدم جديد 4 أوال: التسجيل كفرد 5 - نوع الهوية «سعودي» : 5 - نوع الهوية «مقيم :» 6 - نوع الهوية «خليجي» : 7 : التسجيل كمنشأة : 9 ثانيا

المزيد من المعلومات

Our Landing Page

Our Landing Page نظام البرمجة SIMATIC S7 PLC وفقا للمستوى المتقد م ف الا صدار S7-300/400 الصفحة 1 من 6 يقد م هذه الدورة التدريبية مدر ب من شركة الهندسية (مجموعة دي و) متخصص ف إصدارات سيمنز. لمحة عامة الهدف الري يس لهذه

المزيد من المعلومات

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

دبلوم متوسط برمجة تطبيقات الهواتف الذكية دبلوم متوسط برمجة تطبيقات الهواتف الذكية الهواتف الذكية عدد مرات تنزيل التطبيقات توقع ارتفاع عدد مرات تنزيل التطبيقات 178B 2017 258B 2020 66% 54% عدد مستخدمي 3,8B االجهزة الذكية 4/2018 استخدام التطبيقات

المزيد من المعلومات