مشاهدة النسخة كاملة : درس في ال Arrays - للمبتدئين والمتوسطين


م طارق عودة
05-08-2007, 08:33 PM
بسم الله الرحمن الرحيم

مقدمة :


نذكر أننا عندما تعلمنا انشاء ال variables أو المتغيرات أخذنا بعين الاعتبار انها متغيرات يمكن أن تكون أعداد صحيحة ( Integers ) أو أعداد غير صحيحة كال ( float ) وال ( double ) وكذلك يمكن أن تكون أحرف ( char ) ولكن منها طريقة في الانشاء( declaration ) وأسلوب تحديد قيمها ( initialization ), فكانت كالتالي :

int Number1
أو
double Number1
أو
float Number1
أو حتى
char Number1

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

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

اما أن يفهم الانسان برنامجك من غير وجودك . او ان لا تكن مبرمجا


انتبه!

ألا تعتقد انك غفوت عن شيء خطير؟
فعلا, السطر الرابع هو الخطأ , لكن الا تتسأل مالخطأ؟؟
ليس هناك أي أخطاء برمجية أو حتى لفظية ... لكن انه اسلوب برمجي خاطىء فلماذا تعبر عن charecter بـ Number1 ؟؟


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

نعود الى درسنا.

ال arrays هي variables ولكنها تستطيع أن تحمل العديد من القيم.
نتساءل, كيف لمتغير واحد أن يحمل 100 أو 10000 متغير؟؟
ببساطة فلنتخيل أن ال array هي خزانة ملابس وبها عدد من الدروج, اذا
الخزانة واحدة لكنها تحمل عددا من الدروج .
فلنأخذ هذه المسألة .

توجد خزانة بها 10 دروج . وكل درج يتحمل قطعة ملابس واحدة ولديك 10 قطع ملابس
فاذكر الخطوات ؟ مع العلم بأن كل فطعة مختلفة عن الاخرى ويجب أن تتذكر أين مكانها ؟

الحل :

نرقم الدروج على التوالي .
الدرج الاول ثم الدرج الثاني والثالث وهكذا .

دعنا الان نحول هذه المسألة الى الكمبيوتر .
الى حد ما تعلمنا الان, ببساطة نضع كل قطعة ملابس في متغير ( variable )
ونسميها
clothes1
clothes2
clothes3
وهكذا .

وبالتالي نخزن كل الفطع, ونستطيع أن نخرج أي منها في أي حال أردنا .

فلنجعلها أكثر تعقيدا .
ماذا لو كنا نريد وضع 12321 فطعة, اتعتقد أن clothers1 و clothes2 ستفيدنا
الى حد أن نصل الى clothes12321 . لا لا لا
لاننا سنكون قد أمضينا نصف حياتنا, ونحن نكتب في المتغيرات

اذا فلنصنع خزنة جديدة ونضع كل شيء بداخلها .
ولكن ماذا نسمي الخزنة . ؟؟ فلنسميها clothesBox, وكم درجا نضع فيها ؟ وماذا نستخدم من مواد لهذه الدروج؟ وماذا ستحمل بداخلها ؟

أولا نضع المواد التي سنضعها في داخلها. مع العلم بأن الخزنات في الكمبيوتر لا تأخذ اكثر من نوعية للمتغيرات بداخلها ( على الاقل الى حد ما تعلمنا الان ) فلو حلونها للواقع , فنحن لانستطيع وضع الماء في درج وفي الدرج الاخر ملابس وفي الاخر متفجرات ّّّ!!!

فلنبدأ اذا بالشروط التي تعلمناها في انشاء المتغيرات
مهلا: لم أقل لكم ماذا سنضع في داخل هذه الخزنة, فلنضع integers

تصبح كالتالي
----------------
اذا ها قد علمنا ماسوف نستخدمه لصنع خزنتنا الجديدة
1 - أن تكون من مواد تسمح لها بتحمل ال integers أو الارقام الصحيحة
2 - أن نسميها clothesBox
3 - أن تحمل 12321 درجا

فنستخرج التالي

ألنوعية : int
الاسم : clothesBox
عدد الدروج : 12321

دورنا كمبرمجين أن نحول هذه القيم الى الكمبيوتر .

تصبح اذا

int clothesBox 12321

ولكن مهلا, الكمبيوتر لايفهم مامعنا 12321 , ولكن يفهم أنه لو وضع بين اشارتي
[1231]int clothesBox فهو عدد الدروج

فتصبح اذا
[1231]int clothesBox


ثم ننتقل لوضع الملابس في الدروج
فلنبدأ
أول درج سنضع فيه قطعة ملابس رقمها 110

يتساءل الكمبيوتر؟ أين تريد وضعها
فتقول له في
clothesBox
سيقول لك , وفي أي درج
فتقول له
في الدرج رقم 1 أو 50 أو حسب ماتريد.
[1] او [50]
حسنا وماذا هو رقم هذه القطعة
تقول له رقمها هو 110

نستنتج أن

clothesBox[1]= 110
أو
clothesBox[50] = 110

حسب أختيارنا .

وهكذا الى أن نملآ الخزنة .


حسنا ولكن أليست العملية أطول من عملية المتغيرات ؟ نعم الى هذا الحد ولكن بسطر واحد يمكن أن نملآ جميع هذه الدروج وبالتالي نكون قد اختصرنا 12321 سطر .

فالنرى . نستخدم ال for loop,أو الى while loop وهي عملية اعادة الشيء أكثر من مرة
نستخدم كلمة for في السي++ لبدء هذه العملية
ونستخدم متغير بداخلها, ليمثل رقم الدرج الحالي .
ونستخدم أيضا عدد الدروج ا لتي نحتاج الى ملئها , ليس بالضرورة جميعها

اذا نحتاج الى for لتقوم لنا بالمهمة 12321 مرة .
و نحتاج أن نخبر هذه العاملة باسم خزنتنا وبعدد الدروج التي نريد ملئها .

ونعطيها التالي :
اسم خزنتنا : clothesBox
عدد الدروج الازم ملئها : 12321
ورقم الدرج الحالي , ستتصرف هي بخبرتها. ( الى هذا الحد على الاقل )

فتصبح
(++for(int i=0; i < 12321; i

مهلآ : ماهي i وماهي 12321 وماهي i++

i هو اسم الدرج
12321 هو عدد الدروج التي نريد نحن ملئها ,, وكما قلنا, فانت قد تريد ملىء 5 فقط أو 100 ولكن انتبه فانت لاتستطيع ان تملئها اكثر من قدرتها! .

وi++ أي انه عندما تنتهي أول عملية انتقل الى الدرج الذي يليه
فنستخرج أن
الدرج = الدرج + 1
لينتقل الى الدرج الثاني
وهكذا .

نكمل اذا

(++for(int i=0; i < 12321; i
}

cout << "please put the first peace of clothes" << endl


;[cin >> clothesBox[i

**

وبذلك فهي سوف تسأل المستخدم i مرات الى ان تصل الى العدد الموضوع بعد علامة أصغر من وتتوقف . وسوف تضع كل رقم يضعه المستخدم في الدرج i لكل clothesBox



النهاية .