قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 09-12-2010, 02:04 PM المشاركة 1   
افتراضي 6- البرمجة بلغة السى : المصفوفات Arrays وسلاسل النصوص Strings Twitter FaceBook Google+



6- البرمجة بلغة السى : المصفوفات Arrays وسلاسل النصوص Strings :

مقدمة :

تستخدم المصفوفات فى لغة السى لتخزين البيانات ذات الصلة بطريقة مفهرسة تحت اسم متغير واحد .

من الأسهل أن نفكر في المصفوفة على أنها قائمة list أو ببساطة أمر لتجميع متغيرات من نفس النوع. على هذا النحو فإن المصفوفات تساعد المبرمج على تنظيم مجموعات من البيانات بكفاءة وبشكل حدسي (بديهى) .

في وقت لاحق سوف ننظر في مفهوم المؤشر pointer والذي يعتبر إمتداد طبيعى للمصفوفة (حيث يمكن تسمية المصفوفة كمؤشر ثابت).

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

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

الآن سوف نبحث فقط فى إعلان declareواستخدام المصفوفة .

إعلان المصفوفة declare:

كل ما ستفعله هو كتابة نوع المصفوفة ثم اسمها ثم يأتى حجمها كما فى الشكل التوضيحى .




فإذا كان لدينا مصفوفة تحتوى على أربع عناصر (متغيرات) نعلن عنها بالعبارة :


int arr[4];


وهذا يعنى أننا قمنا بحجز أربعة أماكن فى الذاكرة كل منها بحجم المتغير int .

والعبارة :

char dice[5];


تعلن عن مصفوفة اسمها dice تحتوى على 5 متغيرات من نوع الحروف :
المتغير الأول يكون dice[0] والأخير يكون dice[4].

مثال : إذا كنا نريد مصفوفة ( مجموعة ) من ستة أعداد صحيحة ( اسمها numbers) ، نكتب في لغة السى



ولمصفوفة من الحروف تسمى lettersنكتب :


and so on. وهلم جرا.

تهيئة (إعداد) المصفوفة initialize:

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 09-12-2010, 02:13 PM المشاركة 2   
افتراضي


تهيئة (إعداد) المصفوفة initialize:

توجد طريقتين لإعطاء قيمة للمصفوفات ( التهيئة ) :

الطريقة الأولى :

هى كتابة المصفوفة ثم بعدها مباشرة القيم التى بها(أى إعلان وتهيئة فى سطر واحد ) باستخدام الأقواس المقوسة }المجعدة{curly bracket مثل :


char p[3] = {3,6,9};

وهى عبارة عن مصفوفة حروف مكونة من المجموعة : العنصر الأول هو p[0] بالقيمة 3 و والعنصر الثانى هو p[1] بالقيمة 6 و العنصر الثالث هو p[2] بالقيمة 9 .
و مثل مصفوفة الأعداد الصحيحة :

int arr[4] = {10,12,13,15};

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

الطريقة الثانية :

هى الإعلان عن المصفوفة ثم فيما بعد إعطاء كل عنصر قيمته (التهيئة) (عناصر الصف بدءا من العنصر الأول ودليله 0 إلى العنصر الرابع والأخير ودليله 3) مثال :





مثال آخر:

int point[6]={0,0,1,0,0,0};




إذا لم يتم تهيئة كافة العناصر في المصفوفة فإن العناصر المتبقية سوف تحتوي على قيمة 0.
وإذا أردنا الوصول إلى المتغير المخزن في المصفوفة ومع الإعلان أعلاه فإن الكود التالى سوف يحفظ 1 فى المتغير x:

int x;x = point[2];


· السطر الأول : أعلان متغير نوع int باسم x (حجز مكان فى الذاكرة)
· السطر الثانى : جعل قيمة المتغير x بالقيمة الموجودة فى العنصر الثالث (دلالة رقم 2) من المصفوفة pointالمعرفة سابقا .

ملحوظة :

فى لغة السى يتم فهرسة (ترقيم - ترتيب) المصفوفات بدءا من 0 وليث من 1 . العنصر[0] الأول من المصفوفة أعلاة هو point[0] رقم (دليل) آخر قيمة فى المصفوفة هو حجم المصفوفة ناقص واحد . ففي المثال أعلاه دليل العناصر هو من 0 إلى 5 .

المصفوفات متعددة الأبعاد

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 09-12-2010, 02:25 PM المشاركة 3   
افتراضي


المصفوفات متعددة الأبعاد

تدعم لغة السى أيضا المصفوفات متعددة الأبعاد (أو بمعنى آخر مصفوفات المصفوفات ).

أبسط نوع هو المصفوفة ثنائية الأبعاد . وهو ما يخلق مصفوفة (مجموعة) مستطيلة مكونة من صفوف وأعمدة .



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



إعلان المصفوفة ذات البعدين



لكتابة مصفوفة ذات بعدين نكتب مصفوفة عادية ثم نضيف إليها صف آخر كما يلى :








حيث ثم إنشاء المصفوفة الثنائية وأعطينا قيم لكل صف من صفوف المصفوفة .



إعطاء قيم للمصفوفة ثنائية الأبعاد (التهيئة) :



الطريقة الأولى :


كما فى المثال السابق "إعلان ثم بعد ذلك تهيئة" .


الطريقة الثانية :





وهى مشابهة للمصفوفة ذات البعد الواحد أى "إعلان وتهيئة فى نفس الوقت " .


مثال :

char temp[3][2];

هنا : إعلان مصفوفة حروف أسمها temp أى درجة الحرارة على شكل مصفوفة مكونة من 3 صفوف و 2 عامود .


العنصر الأول : temp[0][0] "صف أول 0 و عامود أول 0 "
والعنصر الثانى هو : temp[0][1] "صف أول 0 و عامود ثانى 1"
والعنصر الثالث هو : temp[1][0] "صف ثانى 1 و عامود أول 0 "
والعنصر الرابع هو : temp[1][1] " صف ثانى 1 و عامود ثانى 1 "
والعنصر الخامس هو : temp[2][0] " صف ثالث 2 وعامود أول 0 "
والعنصر الأخير هو : temp[2][1] " صف ثالث 2 و عامود ثانى 1 "

مثال :

للحصول على مصفوفة حروف مكونة من 3 صفوف و 5 أعمدة نكتب :


char two_d[3][5];


أى " إعلان مصفوفة حروف char اسمها two_d ذات بعدين : عدد الصفوف 3 وعدد الأعمدة 5 "


للوصول / تعديل قيمة في هذه المصفوفة نحتاج دليلين subscripts :

char ch;
ch = two_d[2][4];





· السطر الأول : إعلان متغير نوع char اسمه ch.
· السطر الثانى : جعل قيمة المتغير ch بقيمة العنصر الموجود بالصف الثالث (ذو الدلالة 2 ) والعمود الخامس (ذو الدلالة4 ) .

أو
two_d[0][0] = 'x';




· جعل قيمة العنصر الموجود بالصف الأول والعامود الأول بالمصفوفة two_d (المعرفة سابقا على أنها مصفوفة حروف) بالحرف x (علامتى التنصيص للدلالة على الحروف ) .

وبالمثل يمكن تهيئة مجموعة متعددة الأبعاد كما يلى :

int two_d[2][3] = {{ 5, 2, 1 },
{ 6, 7, 8 }};





أى : إعلان declare مصفوفة نوع int ثنائية الأبعاد تحتوى على 2 صف و 3 عامود و تهيئة initialize عناصرها بحيث تصبح عناصر الصف الأول 5, 2, 1 و عناصر الصف الثانى 6, 7, 8 .



التعامل مع السلاسل الحرفية (النصوص) string باستخدام المصفوفات :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 09-12-2010, 02:35 PM المشاركة 4   
افتراضي


التعامل مع السلاسل الحرفية (النصوص) string باستخدام المصفوفات :

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

السلاسل الحرفية (النصوص) هى سلاسل بها أماكن وكل مكان به حرف أورمز أو رقم .

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

· إعطاء حجم لمصفوفة من نوع char حيث يكون حجمها هو الحد الأقصى لعدد الحروف التى يمكن إدخالها مثال :





· أو يمكن تجزئة النص كما يلى :





· لاحظ أنه فى هذه الطريقة تم إضافة الرمز( \0 ) والذى يعنى نهاية السلسلة وعدم وجوده سيعطى نتائج غير مرغوب فيها ، أما فى الطريقة الأولى فيكفى أن نعطيه مكان إضافى وسيتم إضافته تلقائيا , فإذا انتبهت إلى المثال السابق :







فستلاحظ أن عدد الأحرف 13 (الفراغ يعتبر حرف) ونحن قمنا بحجز 14 مكان والمكان الرابع عشر سيكون للرمز (\0) حيث سيتم إضافته تلقائيا .

مثال :




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

مثال :

لتخزين السلسلة النصية : "Merkkijono" يجب أن نكتب :

char string[] = "Merkkijono";



or أو

char string[] = {'M', 'e', 'r', 'k', 'k', 'i', 'j', 'o', 'n', 'o', '\0'};




في الطريقة الأولى سوف يلحق حرف الصفر تلقائيا فى النهاية بمعرفة المترجم .

فى الطريقة الثانية تم الإعلان عن العناصر الفردية وعلى هذا النحو نحتاج إلى إضافة صفر النهاية يدويا .

إنشاء سلسلة اضافية طويلة :

عليك تقسيم السلسلة إلى أقسام متعددة ، عن طريق إغلاق القسم الأول بعلامتى اقتباس quote وإعادة وصل السلسلة على السطر التالي (أيضا تبدأ وتنتهى بعلامتى لاقتباس) كما يلى :


char string[] = "This is a very, very long "


"string that requires two lines.";







القادم إن شاء الله
الثوابت Constants

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )

chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:0
قديم 09-12-2010, 09:16 PM المشاركة 5   
sun chaalali


السلام عليكم ورحمة الله
جزاك الله خير أخي العزيز
أرجوا من حضرتكم توضيح هذا أمر



كيفية عمل أنماط الحركة الجمل عن طريق Led Matrix

على سبيل المثال

-إنزال الجملة من الفوق إلى الأسفل

-تثبية الجملة في وسط Matrix

-دوران الجملة

شكرا جزيل أخاكم في الله شعلالي


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 09-12-2010, 10:44 PM المشاركة 6   
افتراضي


السلام عليكم ورحمة الله
جزاك الله خير أخي العزيز
أرجوا من حضرتكم توضيح هذا أمر



كيفية عمل أنماط الحركة الجمل عن طريق Led Matrix

على سبيل المثال

-إنزال الجملة من الفوق إلى الأسفل

-تثبية الجملة في وسط Matrix

-دوران الجملة

شكرا جزيل أخاكم في الله شعلالي

اخى الكريم

شكرا جزيلا لك

بارك الله فيك

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


الصورة الرمزية صقر الافق
صقر الافق
:: مهندس جيد ::
تاريخ التسجيل: Dec 2009
الدولة: المغرب
المشاركات: 218
نشاط [ صقر الافق ]
قوة السمعة:0
قديم 11-12-2010, 03:36 PM المشاركة 7   
افتراضي


كل ما تقدمه لهدا المنتدى العزيز فيه خير ...1000 على دلك


الصورة الرمزية اكزي
اكزي
:: عضو ذهبي ::
تاريخ التسجيل: May 2009
الدولة: المغرب iguizzi06*hotmail.com // www.facebook.com/iguizzi.abdallah
المشاركات: 2,434
نشاط [ اكزي ]
قوة السمعة:143
قديم 11-12-2010, 03:41 PM المشاركة 8   
not funny


السلام عليكم

شكرا لأخونا الكريم على هدا الموضوع الشيق وبارك الله فيك


إضافة رد

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

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 12:26 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024