القرية الإلكترونية | الكترونيات | كمبيوتر | هاردوير | خدمات المواقع | كهرباء | فضائيات | جوال | اتصالات | تكييف وتبريد | اجهزة الانتاج الزراعي| كهرباء السيارات


العودة   منتدى القرية الإلكترونية > القسم الالكتروني > قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي
التسجيل       اجعل كافة المشاركات مقروءة

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

رد
 
أدوات الموضوع
قديم 09-12-2010, 02:04 PM   #1
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات

المشاركات: 5,391
أحصائية الترشيح

عدد النقاط : 4822


النشاط

معدل تقييم المستوى: 230
افتراضي 6- البرمجة بلغة السى : المصفوفات Arrays وسلاسل النصوص Strings

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 غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
اعلانات
قديم 09-12-2010, 02:13 PM   #2
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات

المشاركات: 5,391
أحصائية الترشيح

عدد النقاط : 4822


النشاط

معدل تقييم المستوى: 230
افتراضي

تهيئة (إعداد) المصفوفة 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 غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
قديم 09-12-2010, 02:25 PM   #3
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات

المشاركات: 5,391
أحصائية الترشيح

عدد النقاط : 4822


النشاط

معدل تقييم المستوى: 230
افتراضي

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

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

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



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



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



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








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



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



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


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


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





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


مثال :

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 غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 09-12-2010, 02:35 PM   #4
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات

المشاركات: 5,391
أحصائية الترشيح

عدد النقاط : 4822


النشاط

معدل تقييم المستوى: 230
افتراضي

التعامل مع السلاسل الحرفية (النصوص) 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
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 09-12-2010, 09:16 PM   #5
chaalali
مهندس متواجد

المشاركات: 73
أحصائية الترشيح

عدد النقاط : 10


النشاط

معدل تقييم المستوى: 0
sun chaalali

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



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

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

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

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

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

شكرا جزيل أخاكم في الله شعلالي
chaalali غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 09-12-2010, 10:44 PM   #6
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات

المشاركات: 5,391
أحصائية الترشيح

عدد النقاط : 4822


النشاط

معدل تقييم المستوى: 230
افتراضي

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



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

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

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

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

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

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

اخى الكريم

شكرا جزيلا لك

بارك الله فيك

مع تمنياتى بدوام التوفيق
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-12-2010, 03:36 PM   #7
صقر الافق
مهندس جيد
 
الصورة الرمزية صقر الافق

الدولة: المغرب
المشاركات: 218
أحصائية الترشيح

عدد النقاط : 20


النشاط

معدل تقييم المستوى: 0
افتراضي

كل ما تقدمه لهدا المنتدى العزيز فيه خير ...1000 على دلك
صقر الافق غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-12-2010, 03:41 PM   #8
اكزي
عضو ذهبي
 
الصورة الرمزية اكزي

الدولة: المغرب iguizzi06*hotmail.com // www.facebook.com/iguizzi.abdallah
المشاركات: 2,462
أحصائية الترشيح

عدد النقاط : 1997


النشاط

معدل تقييم المستوى: 107
not funny

السلام عليكم

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

اكزي غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
رد

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

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

تعليمات المشاركة
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

الساعة الآن: 01:11 PM


Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2014, Tranz By Qariya
Feedback Buttons provided by Advanced Post Thanks / Like (Lite) - vBulletin Mods & Addons Copyright © 2014 DragonByte Technologies Ltd.
القرية الإلكترونية
qariya.com