|
مشرف منتدى مبرمجين لغات البرمجة »{ مبرمج }«
تاريخ التسجيل: May 2006
الجنس : ذكر
المشاركات: 2,075
معدل تقييم المستوى: 92
|
عالم من المتغيرات
نحن الآن في جزء من الدروس المهمة في البرمجة ألا و هي المتغيرات ...فأرجو من الجميع التركيز معي لأن الدروس القادمة ستعتمد بشكل كبير على هذا الدرس.
تلخيص و تذكير لما درسناه سابقا:
لقد تعلمتم في الدرس السابق كيف تصنعون مشروعا جديدا و كيف تنشؤون برنامجا بسيطا بالكونصول و ذلك بإستخدام ال IDE مثل Dev و Code::Blocks إلخ...
و قد شرحت لكم كم أنه من الصعب علينا نحن المبيدئين إنشاء برامج بالنوافذ لذلك و طيلة دروسنا القادمة سنتعامل فقط مع الكونصول.
أنتم الآن تعرفون كيفية كتابة نص على الشاشة .ممتاز.
قد تقولون أن هذا غير مهم , و السبب في ذلك أنكم لا تعلمون ما هي المتغيرات في البرمجة .
آه !! المتغيرات , كل لغات البرمجة فيها متغيرا كائنة من كانت و لغة السي ليست خارجة المجموعة .
قد يتساءل البعض : و ما هو التغير ؟
هذا الدرس له هدف للإجابة عن هذا السؤال . فأنا لا أريد أن أفقدكم الشوق لمعرفته . و لكن إعلموا أننا سنتحدث عن الأرقم , عن قيم يمكننا تخزينها في الذاكرة .
عنوان درسنا :
تعريف المتغير
إنشاء متغير
إظهار محتوى متغير
إسترداد قيمة مخزنة
تعريف المتغير
المتغير و بكل إختصاؤ هو عبارة عن قيمة أو معلومة صغيرة يتم تخزينها على الذاكرة Ram.
و سبب تسميته "متغير" هي أن قيمته يمكن أن تتغير خلال عمل البرنامج . مثلا , قيمة المتغير 8 هذه القيمة مثلا نعترها عدد حياة اللاعب في لعبة ما ,هذه القيمة يمكنها أن تتغير كلما خسر اللاعب فتصبح 7 ...6 ...5 ....
برامجنا القادمة و كما أشرت سابقا ستكون معمرة بالمتغيرات لذلك أعطوني كل إنتباهكم .
في لغة سي , المتغير له شيئين رئيسيين :
* له قيمة :وهي العدد الذي يأخذه المتغير مثلا 6.
* له إسم : و هذا ما يساعدنا على معرفته .عندما نبرمج بلغة سي يجب علينا تحديد أسماء للمتغيرات .
كيفية تسمية متغير:
في لغة سي إذا كل متغير يجب أن يكون له إسم . و
مثلا نريد تسمية متغير في لعبة و هو يمثل الوقت المتبقي لذلك نسميه مثلا :"Times" لكن هناك بعض القواعد التي يجب إحترامها:
1/تسمية المتغير لا تقبل سوى الأرقام و الحروف الكبيرة و الصغيرة .مثلا :abAB012...
2/إسم المتغير يجب أن يبدأ بحرف.
3/الفراغات ممنوعة منعا كليا , يكمننا إستعمال "underscore" _ وهو الركز الوحيد المحل إستخدامه كرمز دون الجروف و الأرقام .
4/ليس لكم الحق في إستخدام les accents و هم : éàê ...
و أخيرا و هو الشيئ الأكثر أهمية , و يجبمعرفته و هو أن لغة سي تفرق بين الحروف الكبيرة و الصغيرة .. مثلا هذا المتغيران ليسا متشابهين :"Times", "times" .
و لكي تعلموا فلكل مبرمج طريقته الخاصة في تسمية المتغيرات .. لذلك أنصحكم بأن تبتكروا طريقة خاصة بكم في التسمية .
مع أن لنا كل الحرية في إختيار إسم المتغير فهذا لا يعني تسمية المتغير عشوائيا بدون تفكير , بتعبير آخر يجب على المتغير أن يحمل إسم وظيفته -كنصيحة-.
و الآن سنمر إلى ما هو أهم و هو :
أنواع المتغيرات:
حاسوبنا,كما لاحظتم و تلاحظون ,ليس سوى آلة للحسابة فهو لا يعرف سوى معالجة الأرقام .
إليكم الآن مجموعة من أنواع الأرقام و التي تعرفونها بلا شك :
لدينا , الأعداد الحقيقية الموجبة :
45
357
14025
و لدينا الأعداد العشرية و هي تلك التي فيها الفاصلة :
75,909
1,7741
9810,7
إضافة إلى ذلك لدينا الأعداد الحقيقية السالبة \ك
87-
128-
و أيضا أعداد عشرية سالبة :
76,12-
100,7589-
الحاسوب أو الكومبيوتر بحاجة لمساعدة ! فعندما نطلب منه تخزين عدد من الأعداد , يجب عليكم ذكر نوع هذا العدد ..
إذا عند إنشاء متغير يجب عليكم ذكر نوعه .
و إليكم جدولا يلخص الأنواع و قدراتها الإستعابية في لغة سي :

الأنواع الثلاثة الأوائل يمكنون المبرمج من تخزين أعداد حقيقية .
التوعين الأخيرين يمكنان من تخزين أعداد عشرية .
ستلاحظون أننا في مشوارنا الدراسي سنستخدم بشكل كبير الأعداد الحقيقية char, long و double.
إحذروا عند التعامل مع الأعداد العشرية !! فالكمبيوتر لا يعرف الفاصلة لذلك وجب إستخدام النقطة بدل كتابة الفاصلة .
بالنسبة للأنواع فأنا لم أذكرها كلها بل ركزت على الأساسيات .
إنشاء متغير
الآن أنشئوا مشروعا جديدا و أسموه "variables".
سننشئ الآن متغيرا أي سنطلب من الكومبيوتر أن يسمح لنا بإستخدام قليل من الذاكرة.
إنشاء متغير جد سهل الآن خاصة بعد أن تعلمنا الأمور الأساسية , فقط يجب علينا أن نقون بالآتي بالتتابع:
+ تحديد نوع المتغير .
+فراغ
+كتابة إسم المتغير
+و أخيرا لا تنسوا النقطة الفاصلة .
و بذلك نكتب كالآتي :
كود PHP:
long NameOfVariable;
هذا كل شيئ .
أظن أنكم فهمتم المبدأ.
هذه الحركة تسمى بإستدعاء المتغير déclaration de variable.
و نقوم بهذه العميلة في أول أو بداية ال fonction . و نحن الآن نتعامل فقط مع fonction واحدة ألا و هي fonction main.. و بذلك تكون عملية إستدعاء البرنامج تتم على الشكل التالي :
كود PHP:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// بداية ال fonction
}
long BraKing;
system("PAUSE");
return 0;
// نهاية ال fonction
}
عند عمل البرنامج تلاحظون أنه...لا يقوم بأي شيئ 
شروحات لهذه الحالة :
في الحقيقة هناك أشياء تحدث لكن لا ترونها , فعندما يصل البرنامج إلى خانة الإستدعاء يطلب من الكومبيوتر بلطف :"هل يمكنني يا سيد كمبيوتر أن أقوم بإستغلال قليل من الذاكرة " فيجيب الكومبيوتر :"بالطبع يا صديقي البيت بيتك "
للإختصار فمعظم المبرمجين عندما يريدون إنشاء مجموعة من المتغيرات مثلا 6 متغيرات , فبدل تضييع الوقت في الكتابة و إعادة الكتابة نقوم بالتالي :
كود PHP:
long Time, Level, Pro;
هذا الكود سينشأ 3 متغيرا من نفس النوع long و هي : Time و Level و Pro.
و الآن؟
بعد أن أنشأنا متغير يمكننا أن نعطي له قيمته أليس كذلك ؟؟
إعطاء قيمة للمتغير :
نريد مثلا أن نعطي للمتغير Level القيمة 3 .
هذا سهل جدااااااااااا يكفي أن نقوم بالكتابة كالتالي :
ليس هناك شيئ صعب لفعله فقط علينا إستدعاء المتغير ثم فراغ ثم علامة تساوي ثم نكتب قيمة المتغير ..و لا ننسى النقطة الفاصلة كالعادة.
الآن سنقوم بالتطبيق ... نعطي للمتغير Level القيمة 5 داخل برنامج :
كود PHP:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long Level;
Level = 5;
system("PAUSE");
return 0;
}
هنا أيضا لا يجدث شيئ , الكل يحدث بين الذاكرة و البرنامج .
و كما قلت عن سبب تسميت المتغير "متغيرا" ..يمكننا اللعب و تبديل قيمة المتغير إلى أي قيمة و في نفس البرنامج :
كود PHP:
long Level;
Level = 5;
Level = 4;
Level = 150;
في هذا المثال المتغير Level سيأخذ أولا القيمة 5 ثم بعد ذلك القيمة 4 و القيمة 150 . بما أن الكومبيوتر سريع فإننا لا نشعر بتغير قيمة المتغير... و ها قد إنتهى البرنامج 
قيمة متغير
إليكم سؤالا مهما , و إذا كنت قد طرحته مسبقا فهذا دليل على أنك قد تصبح مبرمجا جيدا :
عندما نستدعي المتغير أية قيمة يأخذها ؟
في الحقيقة الحاسوب عندما يقرأ هذا السطر :
يقوم بحجز مكان صغير في الذاكرة . و لكن ما هي قيمة المتغير في هذه اللحظة ؟هل توجد قيمة أصلية (0 مثلا).
إذا ... الجواب هو لا و لا و لا . لا توجد فيمة أصلية (par defaut).المكان محجوز لكن القيمة لا تتغير , أي أن المتغير يمكن أن يأخذ أية قيمة مهما كانت .
لذلك يجب الحذر كي لا نقع في مثل هذه الأخطاء في المستقبل .و الأحسن دائما أن نعطي لمتغيراتنا قيما عندما نستدعيها.و في الأخير , هذا يتطلب منا دمج الإستدعاء و إعطاء القيمة :
هنا , المتغير Level يأخذ القيمة 5.
الإيجابي هنا هو أننا نعرف أن متغيرنا يأخذ القيمة 5 و ليس أية قيمة مهما كانت .
الثوابت constantes
قد يأتي وقت ما ,نحتاج فيه إلى متغير ذو قيمة ثابتة لا تتغير طيلة فترة البرنامج .بمعنى آخر عندما نستدعي المتغير نريده أن تبقى قيمته ذابتة و ليس لأي أحد الحق في تغييرها .
هذه المتغيرات الخاصة نسميها بالثوابت constantes, نظرا لأن قيمتهم ثابتة لا تتغير طيلة عمل البرنامج .
مثال لإستدعاء ثابت:
كود PHP:
const long LEVEL_CONSTANT = 5;
ليس إجباريا, لكن إعتاد عمالقة سي على كتابة الثوابت بالحروف الكبيرة كما فعلت الآن . هذا يمكننا من تمييز الثوابت و المتغيرات بسهولة تامة. لاحظوا أنني إستعملت _ مكان الفراغ .
بدون هذا,فالثوابت لا تختلف في أي شيئ مع المتغير العادي . يمكنكم إعطاءها و غير ذلك مما سنتعلمه الآن .الشيئ الوحيد الذي يختلف, هو أننا عندما نحاول تغيير قيمة الثابت يغبرنا المترجم compilateur أن هناك خطأ في البرنامج.
أخطاء الترجمة تظهر أسفل البرنامج .. في هذه الحالة , المترجم سيظهر لكم كلمات كالآتي :
كود:
[Warning] assignment of read-only variable ' NOMBRE_DE_VIES_INITIALES'
إظهار محتوى متغير
حتى الآن تعلمنا كيف نظهر كتابة على الشاشة بإستعمال الدالة printf .
الآن سنتعلم كيفية إظهار قيمة(محتوى) بإستعمال نفس الدالة .
في الحقيقة نحن نستعمل الدالة printf بنفس الطريقة, بإستثاء أننا نضيف رمزا في المكان الذي نريد لقيمة المتغير أن تظهر فيه .
مثلا:
كود PHP:
printf("Il vous reste %ld vies");
هذا "الرمز الخاص و المميز" الذي تحدثت عنه هو % متبوع بالحرفين ld. هذه الحروف و الرموز تبين ماذا نريد أن نظهر."ld"تعني أن الرقم هو عدد صحيح.
هناك عدة رموز لكن و لأننا لا أقول مبتدئين لكن فوق المبتدئين بدرجة سنركز على هذان الإثان :
+%ld : عدد صحيح (مثل : 4, 5 , 6 ,150)
+%lf :عدد عشري (5.18, 18.3, 120.32589)
في الدروس القادمة سنتحدث عن عدة رموز أخرى في وقت مناسب فلكل مقام مقال. في وقتنا الحالي , إعلموا أننا عندما نريد إظهار قيمة متغيرات صحيحة (char, int, long...),يجب إستعمال %ld, و بالنسبة لأرقام عشرية (float, double), يجب إستعمال %lf.
شارفنا على النهاية . لكن عندما نظهر محتوى المتغير يجب أن نبين للدالة printf أي متغير يجب إظهار قيمته .
لكي نفعل هذا, يجب ذكر إسم المتغير بعد المزدوجتان و ذلك بعد إضافة فاصلة , مثلا:
كود PHP:
printf("Il vous reste %ld vies", Vies);
%ld سيعوض بقيمة المتغير المذكور بعد الفاصلة .
لماذا لا نقوم بتجربة كل هذا في برنامج ؟
كود PHP:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long nombreDeVies = 5; // Au départ, le joueur a 5 vies
printf("Vous avez %ld vies\n", nombreDeVies);
printf("**** B A M ****\n"); // Là il se prend un grand coup sur la tête
nombreDeVies = 4; // Il vient de perdre une vie !
printf("Ah desole, il ne vous reste plus que %ld vies maintenant !\n\n", nombreDeVies);
system("PAUSE");
return 0;
}
يمكن أن يكون هذا البرنامج لعبة (لا يتطلب الأمر سوى قليل من الخيال العلمي )
شرح البرنامج :
1. في البداية اللاعب لدية خمس نقاط حياة ,نظهر هذا بإستعمال الدالة printf.
2. ثم يحدث إنفجار قرب اللاعب .
3. و في الأخير يصبح عدد نقاط حياته 4 , و نظهر هذه القيمة بواسطة printf.
كيفية إظهار محتوى عدة متغيرات في نفس ال printf .
يمكن لكل شخص أحب أن يظهر محتوى عدة متغيرات في نفس الدالة printf.يتطلب الأمر أن تبينوا المكان و نوعية العدد : %ld أو %lf , ثم تكتبوا أسماء المتغيرات كما في السابق لكن و بما أنه عندنا عدة متغيرات فيجب ذكرها و لكن حسب ترتيب الكتابة :
كود PHP:
printf("Vous avez %ld vies et vous etes au niveau n°%ld", Vies, Level);
يجب إحترام الترتيب ففي هذا البرنامج ال%ld الأول يأخذ قيمة المتغير الأول Vies و%ld الثاني يأخذ قيمة المتغير الثاني Level.
إسترداد قيمة مخزنة
المتغيرات الآن بدأت تصبح مهمة . سنتعلم الآن أن نطلب من المستخدم إدخال قيمة و سنقوم يتخزينها في متغير .عندما ستتعلمون هذه الخاصية يسيكون بمقدوركم إنجاز الكثير من الأشياء الجميلة .
لكي نطلب من المستخدم إدخال قيمة , سنستعمل دالة أخرى ألا و هي الدالة :scanf.
هذه الدالة تشبه كثيرا الدالة printf .يجب عليكم إدخال ld% أو lf% بين مزدوجتين "" لكي نبين إن كنا نريد من المستخدم إدخال عدد صحيح أو عشري . ثم بعد ذلك يجب أن ذكروا إسم المتغير بعد الفاصلة ثم إضافة الركز &.
مثلا:
كود PHP:
scanf("%ld", &age);
لا يجب وضع سوى ld% أو %lf بين المزدوجتين .
لكن يجب وضع الرمز & أمام إسم المتغير الذي سيتلقى القيمة .
بالنسبة للرمز & سأشرح في الدروس القادمة لماذا نضعه , فلا تستعجلوا.
أسئلة الدرس :
1/ بين هذه المتغيرات من هو المتغير الخاطئ:
-positionMeNuS
-largueurFenêtre
-age_du_capitaine
2/ من هو نوع المتغير الذي سيمكننا من حفظ هذا العدد :76.8:
-char
-long
-double
-int
3/ لنفترض أن لدي متغيرا "bank" ذو القيمة 65000004 ماذا سيظهر هذا السطر في الشاشة :
كود PHP:
printf("Vous avez %ld euros sur votre compte", compteEnBanque);
-Vous avez %ld euros sur votre compte
-Vous avez 6 500 000 euros sur votre compte
-Vous avez d euros sur votre compte, compteEnBanque
تمرين الدرس
من الآن فصاعدا سأقوم بوضع تمرين لكل درس بما أننا بدأنا في لغة سي فعلا و تمرين اليوم هو :
أكتب برنامجا يطلب من المستخدم عمره و شهر ميلاده و يوم ميلاده و سنة ميلاده و يظهرها على الشكل التالي :
مرحبا بك أيها المستخدم ,من خلال ما أدخلت فأنت ذو العمر 16 ولدت في 1/8/1976.
عد في العام المقبل لتتحرى عمرك .
و إنتهى درسنا .
إنتظروا الدرس القادم تحت عنوان : العمليات الحسابية في لغة سي .
__________________
أشهد أن لا إله إلا الله و أن محمدا رسول الله
التعديل الأخير تم بواسطة The KinGSofT ; 02-08-2009 الساعة 10:42 AM
|