اهم الكلمات المفتاحية في سي شارب

مؤمل محمد راضيمنذ سنتين

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

 

- as

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

 

 

 

-  goto

 

يمكن استخدام goto للانتقال إلى سطر محدد داخل الكود وتحديده لاجراء العمليات عليه مثال :

 

 

 

- stackalloc

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

 

 

كما هو الحال مع جميع المؤشرات في C # لا توجد حدود في عملية التحقق من القراءة والواجبات التي تقوم بها لغه C#. سيكون للقراءة خارج حدود الذاكرة المخصصة نتائج غير متوقعة

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

 

 

 

تذكر دائما انه في  c#تتم إزالة الذاكرة المخصصة للحزمة تلقائيًا عند خروج النطاق الذي تم إنشاؤه فيه. هذا يعني أنه يجب عليك عدم إرجاع الذاكرة التي تم إنشاؤها باستخدام stackalloc أو تخزينها خارج عمر النطاق.

 

        

 

 

                    المصفوفات

 

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

  ، والتي يمكن حلها باستخدام المصفوفات وسنعرض مدى فائدتها .

 

ما هي "المصفوفات"؟

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

يمكنك النضر الى الشكل الاتي لبعض التوضيح :

- يتم ترقيم عناصر المصفوفة في C # بـ 0 ، 1 ، 2 ،… N-1. تلك الأرقام

تسمى مؤشرات.

- العدد الإجمالي للعناصر في مجموعة معينة نسميها

طول صفيف.

- جميع العناصر من نفس النوع ، بغض النظر عما إذا كانت

هي أنواع بدائية أو مرجعية. هذا يسمح لنا بتمثيل مجموعة من

عناصر مماثلة كتسلسل أمر والعمل عليها ككل.

- يمكن أن تكون المصفوفة بأبعاد مختلفة ، ولكن الأكثر استخدامًا هي المصفوفة ثنائية البعد والأبعاد ثنائية الأبعاد. حملة واحدة في الأبعاد هي

تسمى أيضا ناقلات وأبعاد ثنائية الأبعاد تعرف أيضا باسم المصفوفات

الاعلان عن المصفوفه وتنسيقها :-

يتم الاعلان عن المصفوفه بالطريقة الاتية :

 

 

في هذا المثال ، المتغير myArray هو اسم المصفوفة ، والتي هي

نوع صحيح (int [ ]). مجموعة من الأعداد الصحيحة

أرقام.

مع [ ] نشيرالى الذي نعلنه ، هو

مجموعة من العناصر ، وليس عنصر واحد.

عندما نعلن عن متغير نوع الصفيف ، والذي هو غير مرجعي ، والذي لا

لديك قيمة (تشير إلى فارغة). هذا لأن الذاكرة للعناصر

لم يتم تخصيصه بعد.

ويبين الشكل أدناه كيف تبدو مجموعة من المتغيرات ، عندما

لم يتم تخصيص الذاكرة لعناصر المصفوفة حتى الآن :

 

 

 

 

hh

 

ل

ل

 

 

 

 

 

 

 

 

 

 

 

 

في رصة تنفيذ البرنامج ، يكون المتغير باسم myArray

تم إنشاؤه وضبط قيمته إلى قيمة خالية (بمعنى أنه لا يحمل أي قيمة).

انشاء  مصفوفات - واستخدام "new"

في C # نقوم بإنشاء مصفوفة بمساعدة الكلمة الأساسية "new"، والتي يتم استخدامها في

تخصيص الذاكرة:

 

 

 

في هذا المثال ، نخصص مصفوفة بطول 6 عناصر من النوع int.

هذا يعني أنه في الذاكرة الديناميكية (حزمة) مساحة من 6 أرقام صحيحة

يتم تخصيصها ويتم تهيئتها كلها باستخدام القيمة 0:

 

 

 

 

 

    ويبين الشكل أنه بعد تخصيص الذاكرة لصفيف

يشير myArray متغير إلى عنوان في الذاكرة الديناميكية ، حيث

القيم هي نفسها.

 في C # ، يتم دائمًا تخزين عناصر المصفوفة في الديناميكية

الذاكرة (تسمى أيضًا الحزمة).

أثناء تخصيص الذاكرة لصفيف نقوم بضبط العدد الإجمالي لـ

العناصر الموجودة بين الأقواس (عدد صحيح غير سالب) ، وتعريفها

بالطول. يتم كتابة نوع العناصر بعد الكلمة المحجوزة new، لذلك نحن

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

 

تهيئة المصفوفة والقيم الافتراضية :-

قبل أن نتمكن من استخدام عنصر في مصفوفه معينه ، يجب أن يتم تهيئتها إلى

قيمة افتراضية. في بعض لغات البرمجة لا يوجد قيم افتراضية

 ثم إذا حاولنا الوصول إلى العنصر ، الذي لم يتم تهيئته ، هذا

قد يسبب خطأ.

 في C # جميع المتغيرات ، بما في ذلك عناصر المصفوفات لها

قيمة افتراضية . هذه القيمة هي إما 0 لأنواع الأرقام أو لها

مكافئ للأنواع غير البدائية (على سبيل المثال null لنوع مرجع

و false لنوع bool).

بالطبع يمكننا تحديد القيم الأولية بشكل صريح. يمكننا القيام بذلك بطرق مختلفة.

هنا هو واحد:      

                   

 

في هذه الحالة ، نقوم بإنشاء وتهيئة عناصر المصفوفة في وقت

الإعلان. في الشكل أدناه نرى كيف يتم تخصيص الصفيف في

الذاكرة عند تهيئة قيمها في لحظة إعلانها :

237

 

 

 

 

 

 

باستخدام هذه الصيغة ، نستخدم الأقواس المتعرجة بدلاً من المشغل "new". ما بين

بين قوسين نحن سرد القيم الأولية للمصفوفة ، مفصولة بفواصل.

يحدد عددهم طول الصفيف.

إعلان وتهيئة مصفوفة :

هنا مثال واضح يشرح كيفية اعلان المصفوفة

في هذه الحالة ، نقوم بتخصيص مصفوفة من سبعة عناصر من نوع string. نوع

string هو نوع مرجع (object) ويتم تخزين قيمه في

ذاكرة ديناميكية . يتم تخصيص المتغير daysOfWeek في ذاكرة التخزين المؤقت ، و

يشير إلى قسم من الذاكرة الديناميكية التي تحتوي على عناصر

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

إلى قسم مختلف من الذاكرة الديناميكية ، حيث يتم تخزين القيمة الحقيقية.

الوصول إلى عناصر المصفوفة :

نصل إلى عناصر الصفيف مباشرة باستخدام المؤشر الخاصة به. كل عنصر يمكن

يمكن الوصول إليها من خلال اسم الصفيف ومؤشر العنصر

(الرقم المتسلسل) الموضوع في الأقواس. يمكننا الوصول إلى العناصر المعطاة

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

عناصر كمتغيرات.

في ما يلي مثال للوصول إلى عنصر في صفيف:

 

في المثال أعلاه ، نعين قيمة 100 على العنصر ، الذي يقع في

مؤشر (index) الموقف.

هنا مثال ، حيث نخصص مجموعة من الأرقام ثم

نغير بعض منهم:

 

 

بعد التغيير ، يتم تخصيص وتحديد الصفيف في الذاكرة كما هو موضح أدناه:

 

 

 

 

 

 

كما نرى ، جميع العناصر ، باستثناء تلك التي يتم تعيين القيم لها بشكل صريح ،

تتم تهيئة القيمة 0 عند تخصيص ذاكرة الصفيف.

يمكننا التكرار من خلال الصفيف باستخدام بيان حلقة. الأكثر شيوعا

شكل هذا التكرار هو باستخدام for-loop:

 

 

عكس المصفوفة :

في المثال التالي سنتمكن من الوصول إلى العناصر وتغييرها باستخدامها

المؤشرات. المهمة هي طباعة العناصر في ترتيب معكوس. سنقوم بالعكس

عناصر المصفوفة باستخدام مصفوفة مساعدة ثانية ، حيث سنحتفظ بها

عناصر أول واحد ، ولكن في ترتيب معكوس. لاحظ أن طول

كلا المصفوفات هو نفسه ويظل دون تغيير بعد التخصيص الأول:


فتكون النتيجة :

يعمل المثال بالطريقة التالية: في البداية نخصص مصفوفة أبعادية من النوع int ونقوم بتهيئتها بالأرقام من 1 إلى

5. بعد ذلك نحافظ على طول الصفيف في طول المتغير. لاحظ أن

نحن نستخدم خاصية الطول ، والتي ترجع العدد الإجمالي لل

عناصر المصفوفة. في C # يحتوي كل صفيف خاصية طول.

بعد ذلك نعلن عكس مجموعة مع نفس الطول ، حيث نحن

سيحتفظ بعناصر المصفوفة الأصلية ، ولكن بترتيب معكوس.

لعكس العناصر ، نستخدم حلقة for-loop. في كل تكرار نحن زيادة

المؤشر متغير واحد ونحرص على الوصول إلى جميع المتتالية

عناصر المصفوفة. يضمن شرط الحلقة أن يكون الصفيف

تكررت من النهاية إلى النهاية.

دعونا نتابع ما يحدث عندما نكرر خلال الصفيف. على الأول

التكرار ، مؤشر له قيمة 0. باستخدام صفيف [فهرس] ندخل إلى الأول

عنصر من الصفيف ، وعلى التوالي مع عكس [طول - فهرس - 1]

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

القيم. وهكذا ، خصصنا قيمة العنصر الأول من المصفوفة

العنصر الأخير من مجموعة عكسها. في كل مؤشر التكرار هو

زيادة واحدة. بهذه الطريقة ، نصل إلى العنصر التالي في ترتيب

الصفيف والعنصر السابق في ترتيب معكوس.

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

.

 في المثال أظهرنا

التكرارات المتتالية من خلال المصفوفة ، والتي يمكن القيام بها أيضًا

أنواع مختلفة من بنيات الحلقة والشروط الحلقية (على سبيل المثال ، for و foreach).

قراءة مصفوصفة من خلال وحدة التحكم "Console"

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

for-loop وأدوات .NET Framework للقراءة من وحدة التحكم.

في البداية ، نقرأ سطرًا من وحدة التحكم باستخدام Console.ReadLine () ، ثم

نحلل هذا السطر إلى عدد صحيح باستخدام int.Parse () ونقوم بتعيينه

المتغير n. ثم نستخدم الرقم n كطول للصفيف.

 

 

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

العنصر الحالي لما قرأناه من وحدة التحكم. سوف تواصل الحلقة

 n  عدد من المرات ، مما يعني أنها سوف تتكرر من خلال الصفيف ، ولذا فإننا سوف

نعمل قراءة قيمة لكل عنصر من الصفيف:

التكرار مع حلقة  :  For

 

إنها ممارسة جيدة لاستخدام (for-loops) ، عندما نعمل مع المصفوفات و

هياكل مع مؤشرات(index). في المثال التالي سنضاعف قيم

جميع عناصر مجموعة من الأرقام وسنطبعها :

 

 

فتكون نتيجة المثال :

 

 

باستخدام for-loop نقوم بتتبع الفهرس الحالي للصفيف لاننا نحتاج

الوصول إلى العناصر حسب الحاجة. ليس لدينا للتكرار على التوالي

من خلال كل منهم ، مما يعني الفهرس الذي نستخدمه في حلقة for-loop

قد يتكرر من خلال العناصر بطريقة تتطلبها خوارزمياتنا. إلى عن على

سبيل المثال يمكننا التكرار من خلال بعض عناصر المصفوفة ، لا

من خلال كل منهم:

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

نقوم بجمع قيمهم.

أحيانًا نرغب في التكرار من خلال الصفيف بترتيب عكسي. نحن

نفعل ذلك بطريقة مماثلة ، إلا أنه ستبدأ حلقة for-with مع مؤشر

العنصر الأخير وسوف ينخفض المؤشر في كل خطوة حتى تحصل على قيمته

إلى 0 (شامل). هنا مثال:

 

في هذا المثال ، نقوم بالتكرار من خلال المصفوفة بترتيب عكسي ونحن

نقوم بطباعة كل عنصر إلى وحدة التحكم "console".

 

المصفوفات متعددة الابعاد :-

نوع آخر من المصفوفات المفيدة جدا هي المصفوفات متعددة الأبعاد. هذه المصفوفات هي جداول أرقام يمكن أن تحتوي على بعدين أو ثلاثة أو أكثر. على سبيل المثال ، يعرض الشكل التالي جدولًا ثنائي الأبعاد ، خمسة أسطر بأربعة أعمدة (5 × 4). كما في حالة الجداول البسيطة ، تبدأ مؤشرات كل بُعد من 0 وتذهب إلى N-1 ، حيث N هو عدد العناصر في كل بُعد:

 

 

الإعلان وإنشاء جدول ثنائي الأبعاد أمر سهل للغاية. على سبيل المثال ، يمكن إنشاء الجدول السابق على النحو التالي:

للوصول إلى كل عنصر ، ما عليك سوى الإشارة إلى فهارس العناصر ، مفصولة بفواصل ، بين أقواس مربعة

مرة أخرى ، يمكنك إعلان وتهيئة جدول في وقت واحد. على سبيل المثال ، يمكن إنشاء الجدول في الشكل 2.2 وتهيئته على النحو التالي:

لمعرفة العدد الإجمالي للعناصر الموجودة في الجدول ، بغض النظر عن الأبعاد ، يتم تسميته Table.Length. لمعرفة عدد أبعاد الجدول ، يتم استخدام: NomeaTabela.

وأخيرًا ، لتحديد عدد العناصر الموجودة في بُعد معين ، يتم القيام به: nameTabel a. GetLength (البعد). على سبيل المثال ، يعرض جزء التعليمات البرمجية التالي إجمالي عدد عناصر tabel a27 ، وعدد أبعاده ، وعدد العناصر في كل بُعد:

من السهل جداً استخدام المصفوفات ذات الأبعاد المختلفة ؛ كيفية استخدام الجداول ثنائية الأبعاد. على سبيل المثال ، تقوم التعليمة البرمجية التالية بإنشاء جدول ثلاثي الأبعاد ، مع عشرة عناصر في كل بُعد:

 

 

 

 تعرف المصفوفات أحادية البعد أيضًا بأنها متجهات في الرياضيات.

كثيرًا ما نحتاج إلى صفائف بأكثر من بُعد واحد. على سبيل المثال نستطيع

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

حجم 8 8 (8 خلايا في اتجاه أفقي و 8 خلايا في اتجاه عمودي).

 

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

يمكن استخدام كل نوع اساسي من متغيرات في C # لنوع الصفيف. لذا ، يمكننا الحصول على

مجموعة من المصفوفات ، والتي سنناقشها لاحقًا.

نعلن عن مجموعة واحدة من الأرقام الصحيحة باستخدام int []

،

 ونعلن عن مصفوفة ثنائية الأبعاد مع  ب

int [،].

 يوضح هذا المثال ما يلي:

  

لاحض اننا قمنا بوضع فارزة بين [ ] وبهذا نخبر الc#  اننا نستخدم مصفوفه ثنائية الابعاد

تلك المصفوفات سوف نسميها ثنائية الأبعاد ، لأن لديهم جدولان من

ألابعاد. ولكن في

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

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

(فارزة بين []):

من الناحية النظرية لا يوجد حد لأبعاد صفيف ، ولكن من الناحية العملية يمكننا ان  نقوم بذلك

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

لا تستخدم الكثير من المصفوفات مع أكثر من بعدين لذلك سنركز

على صفائف ثنائية الأبعاد.

قراءة المصفوفات من وحدة التحكم " console " :-

في هذا المثال ، سنتعلم كيفية قراءة صفيف ثنائي الأبعاد من

وحدة التحكم. أولاً ، نقرأ قيم (أطوال) الأبعاد الثنائية و

ثم باستخدام اثنين من الحلقات المتداخلة نقوم بتعيين قيمة كل عنصر (وداخل

النهاية نطبع قيم المصفوفة) :

 

 

 

 

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

ثلاثة صفوف وعمودين) يكون بالشكل الاتي :

الحد الاقصى للمصفوفة في البرنامج :-

 

في المثال التالي سنحل مشكلة أخرى مثيرة للاهتمام:

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

المصفوفة الفرعية بحجم 2 × 2 مع الحد الأقصى لمجموع عناصرها و

لطباعته إلى وحدة التحكم.

قد يكون أحد الحلول للمشكلة ما يلي:

 

 

إذا قمنا بتنفيذ البرنامج ، فسوف نرى أنه يعمل بشكل صحيح:

 حسنا .. ماذا حصل ؟

سنشرح الخوارزمية. أولا نحن قمنا إنشاء مجموعة ثنائية الأبعاد ، والتي

تحتوي على أعداد صحيحة. نعلن عن المتغيرات المساعدة لدينا bestSum ،

bestRow ، bestCol ونقوم بتهيئة bestSum بأقل قيمة من النوع

long (لذلك أي قيمة أخرى أكبر من هذا). لاحظ أن مجموع 4

قد لا تتناسب الأعداد الصحيحة في int ، لذلك نستخدم long

في المتغير bestSum نحافظ على العدد الأقصى الحالي وفي bestRum

و bestCol نبقي مصفوفة فرعية . هذا يعني

صف والعمود الحالي وصف عنصر البدء للمصفوفة الفرعية للحجم

2 × 2 ، والتي يوجد لديها حاليًا الحد الأقصى لمجموع عناصرها.

للوصول إلى جميع عناصر المصفوفة الفرعية بحجم 2 × 2 ، نحتاج إلى المؤشرات

من العنصر الأول. بامتلاكهم يمكننا الوصول بسهولة إلى العناصر الثلاثة الباقية .

نسخ المصفوفة :-

- هاذه هي الطريقة لنسخ صفيف جزئي باستخدام الأسلوب Array.Copy () الثابت

 

- طريقة نسخ الصفيف بأكمله باستخدام أسلوب  CopyTo () :

 

تجدر الاشارة هنا ان  كل من CopyTo و Clone تكون نسخ كاملة تامة بالنسبة للعناصر مما يعني أن المحتويات تحتوي على مراجع لنفس الكائن كعناصر في المصفوفة الأصلية

المحاضر

مؤمل محمد راضي

الكلمات الدليلية

عن الدرس

0 إعجاب
1 متابع
0 مشاركة
1218 مشاهدات
منذ سنتين

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !