مرحبا بكم فى موقعكم التعليمى مفيدا ومستفيدا

الدرس الثاني - المتغيرات

اذهب الى الأسفل

الدرس الثاني - المتغيرات

مُساهمة من طرف sayed في السبت أكتوبر 29, 2011 12:17 am

الدرس الثاني

المتغيرات
في الدرس الأول تعلمنا أن كل شيئ في الحاسوب يعتبر كائن
وفي الحقيقة هناك نوعين من الكائنات :
كائنات حقيقية: وهي التي لها صفات وأفعال ويمكن أن يكون لها تمثيل مرئي
متغيرات : وهي متغيرات لا تحتوي على صفات أو أفعال وإنما تحتوي على قيمة محددة ولا تكون مرئية
أي انه من الممكن أن يحتوي الكائن "المتغير" X على قيمة مخزنة في ذاكرة الحاسوب
ومن الممكن أن تكون قيمة المتغير أما رقم أو نص أو حرف أو رقم عشري أو....
وإذا أردنا أن ننشئ متغير في ذاكرة الحاسوب فيجب أن نحدد نوع القيمة التي سيحملها المتغير
مع العلم أننا نختار إسم الكائن كما نشاء مادام الإسم يحقق الشروط التالية:
1-أن يكون اسم المتغير حروف أو ارقام لاتينية
2-أن لا يكون أول حروف الإسم رقم , فهذا الإسم غير مسموح 5int بينما هذا مسموح int5
3-أن لا يحتوي الإسم على علامات أواشارات مثل # أو $ أو * أو + , الإشارة المسموحة فقط هي _
وهذه الشروط تنطبق على أسماء الكائنات أو المتغيرات التي سنقوم بإنشائها
إذاً المتغير هو كائن يستخدم لتخزين قيمة من نوع محدد
مثلاً إذا أردنا أن نعرف متغير اسمه x من نوع رقم سيكون الكود كالتالي:
كود:
int x;
وكلمة int إختصار لكلمة integer ومعناها عدد صحيح
الكود السابق معناه أنا عرفنا متغير اسمه x سيحمل قيمة من نوع عدد صحيح
لاحظ أنك تستطيع تغيير اسم المتغير كما تشاء المهم أن تراعي شروط التسمية الثلاثة
وإذا أردنا تحميل هذا المتغير قيمة محدد يكون الكود كالتالي:
كود:
x=20;
الكود السابق معناه أن المتغير x يحمل القيمة 20 ويستمر بحمل القيمة حتي يتوقف البرنامج أو نحملة قيمة أخرى
لاحظ الكود التالي:
كود:
int Var1;
int Var2;
Var1=10;
Var2=Var1;

قمنا بتعريف متغيرين من نوع رقم صحيح ثم حملنا الرقم الأول قيمة 10
وفي السطر الأخير حملنا المتغير الثاني قيمة المتغير الأول أي أن المتغير الثاني يحمل أيضاً القيمة 10
ملاحظة مهمه:في لغات البرمجه معامل التساوي ليس تبادلي يعني أن
Var2=Var1
لا تساوي أبداً
Var1=Var2
لإن معامل = في لغات البرمجة يقوم بنقل قيمة المتغير في اليمين إلى المتغير في اليسار

فلو عكسنا المعاملات في السطر الأخير من الكود السابق هكذا :
كود:
int Var1;
int Var2;
Var1=10;
Var1=Var2;

فسيظهر لنا خطأ عند السطر الأخير لأن المعالج سيحاول نقل ما في المتغير Var2 إلى المتغير Var1
ولكن المتغير Var2 لا يحتوي على أي قيمة لذلك سيظهر لنا الخطأ
بعض أنواع المتغيرات وكيفية تعريفها:
رقم صحيح int
نص أو كلمة string
رقم حقيقي "رقم يقبل الكسور العشرية مثل 41.51" double
حرف char
تاريخ أو وقت DateTime
قيمة بوليانية bool
معنى القيمة البوليانية أي أن المتغير يحمل قيمة صح أو خطأ , للتوضيح:
كود:
int k;
string w;
double m;
char n;
bool p;
k=15;
w="هذا نص";
m=12.15;
n="م";
p=true;

لا حظ أن المتغير من نوع رقم لا يحتاج إلى علامتي إقتباس
بينما المتغير من نوع نص أو حرف يحتاج إلى علامتي إقتباس
المتغير من نوع bool يحمل أما قيمة true أو false
ماذا لو جربنا الكود التالي:
كود:
k="نص";
سيظهر لنا خطأ لأنا نحاول أن نحمل المتغير k قيمة من نوع نص
بينما المفروض أن يحمل قيمة من نوع رقم كما عرفناه
وأيضاً هذا الكود خاطئ لنفس السبب
كود:
k=w;
حيث أن w يحتوي على قيمة من نوع نص و k المفروض أن يحمل قيمة من نوع رقم
ماذا لو كان لدينا هذا الكود:
كود:
w="45";
k=w;

سيظهر لنا خطأ أيضاً عند السطر الثاني بالرغم من أن w يحمل رقم
لأن المترجم لا يعرف أن w يحمل رقم , فهو يعتبر كل ما هو بين علامتي اقتباس على أنه نص
وبالتالي فالمترجم لن يقبل أن يحمل k قيمة نصية لأن من المفروض أن يحمل رقم
للتغلب على هذه المشكلة يوجد في بيئة التطوير كائن للتحويل ما بين الأنواع
وهذا الكائن يقوم بتحويل القمية إلى أي نوع فإذا اردنا تنفيذ الكود السابق بإستخدام كائن التحويل:
كود:
w="45"; k=Convert.ToInt32(w);

الكائن Convert قام بأخذ قيمة w وحولها إلى رقم ثم حملها للمتغير k
لاحظ أننا للوصول إلى أفعال أو صفات الكائن نكتب اسم الكائن ثم نقطة ثم فعل أو صفة الكائن
فالكائن Convert يحتوي على فعل ToInt32 لذلك كتبنا اسم الكائن ثم نقطه ثم فعل الكائن
ووضعنا بين القوسين المدخلات , ومن أفعال الكائن Convert:
ToInt32 للتحويل إلى رقم صحيح كما رأينا في المثال السابق
ToString للتحويل إلى نص
ToDouble للتحويل إلى عدد عشري
ToChar للتحويل إلى حرف
ToBoolean للتحويل إلى قيمة بوليانية
ملاحظة: الرقم الأخير من المتغير ToInt32 يعني حجمة في الذاكرة, مثلاً int16 حجمه 16 بت و int32 حجمة 32 بت
ويوجد أيضاً 64, وكل نوع له مدى محدد لا يستطيع يتجاوزه, مثلاً int16 يستطيع خزن أي رقم من – 32,768 إلى 32,767
و int32 يستطيع خزن أي رقم من – 2,147,483,648 إلى 2,147,483,647
و int64 له مدى أكبر بكثير, لذلك إخترنا int32 كحل وسط , لأنه يخزن أرقام كبيرة , ولا يستهلك مكان كبير في الذاكرة
يتبع ... التطبيق.. في الرد التالي



التطبيق:
أفتح مشروع التطبيق الذي طبقنا عليه في الدرس الماضي
غير النص الكتوب في الزر من "ترحيب" إلى "اظهار قيمة x" من خلال تعديل الصفة Text من جدول الصفات
انقر نقراً مزدوجا على الزر لتنتقل إلى شفرة الزر .. ثم قم بحذف سطر الأوامر التالي:
كود:
MessageBox.Show("مرحباً بكم إلى سي شارب");
في مكان الكود المحذوف أكتب الكود التالي:
كود:
int x;
x=50;
MessageBox.Show(x);

في السطر الأول عرفنا متغير اسمه x سيحمل قيمة من نوع رقم صحيح
في السطر الثاني حملنا المتغير x قيمة 50
في السطر الثالث كتبنا أمر اظهار الرسالة , لاحظ أننا وضعنا x بدل نص الرسالة
حيث أن المترجم سيقوم بإظهار رسالة ويكتب داخلها القيمة المحملة على x
قبل تجربة البرنامج , هل تعتقد أن هناك خطأ في الشفرة السابقة؟
نعم هناك خطأ فلو جربت تشغيل البرنامج ثم الضغط على الزر ستظهر لك رسالة خطأ
وسبب الخطأ أن كائن MessageBox.Show يحتاج إلى مدخلات من نوع نص ليظهرها في الرسالة
وقد مررنا x على أنه المدخلات ولكنه من نوع رقم صحيح
ربما يتسائل البعض ما أدراني أن الكائن MessageBox.Show يحتاج إلى مدخلات من نوع نص وليس من نوع رقم
الأمر بسيط جداً , إذا كنت تريد ان تعرف نوع المدخلات التي يحتاجها الكائن
سيظهر لك ذلك في رسالة صغيرة بمجرد أن تفتح القوس الأول كما في الصورة:

عندما انتهيت من كتابة القوس الأول ظهر صندوق المعلومات وأظهر اسماء وانواع المدخلات التي يحتاجها الكائن
السهم يشير إلى الكلمة التاليه:
اقتباس:

string text
الجزء الأول من الكلمة السابقة يعني نوع المدخل وهو string أي نص
والجزء الثاني هو أسم المدخل text وهذا سنشرحه فيما بعد ,
ولكن ما يهمنا هو الجزء الأول لنعرف نوع المدخل الذي يحتاجه الكائن

ملاحظة:بعض الكائنات ومنها كائن MessageBox.Show يمكن أن تقبل مدخلات متعدده
فيمكن أن تقبل مدخل واحد وهو نص الرسالة كما رأينا في الدرس السابق و يمكن أن تقبل أكثر من مدخل

الكائن MessageBox.Show يقبل 21 نوع من المدخلات
ومن الممكن أن تتجول بين أنواع المدخلات الممكنه للكائن بالضغك على زر الأسهم فوق وتحت
في لوحة المفاتيح عند ظهور صندوق معلومات المدخلات كما في الصورة:

ولكن ما يهمنا حالياً من أنواع المدخلات هو النوع رقم 15 الذي يحتاج فقط لنص الرسالة
نعود إلى الكود السابق الذي أظهر لنا خطأ نتيجة تضارب انواع البيانات
لحل مشكلة التضارب نستخدم كائن التحويل لتحويل قيمة x إلى نص ثم تمريرها إلى الكائن
MessageBox.Show
لأنه كما قلنا لا يقبل إلا مدخلات من نوع نص و x من نوع رقم
الكائن الذي يحول من رقم إلى نص هو Convert.ToString
وبالتالي سيصبح الكود الصحيح هكذا:
كود:
int x;
x=50;
MessageBox.Show(Convert.ToString(x));

جرب البرنامج الآن واضغط على الزر ستظهر لك رسالة مكتوب عليها 50
وهكذا تغلبنا على مشكلة تضارب البيانات
..
لتوسيع التطبيق سنستخدم كائن آخر من كائنات البيئة وهو مربع النص
اضغط على زر Design أسفل الشفرة لترجع إلى نافذة التصميم

الآن قم بسحب كائن مربع النص وأفلته فوق النافذة كما سحبت الزر في الدرس الأول

ليصبح شكل النافذة هكذا:

تأكد من إختيار مربع النص واذهب إلى جدول الصفات
إبحث عن الصفة (Name) ستجد مكتوباً أمامها textBox1 غيرها إلى t1
لاحظ أنا غيرنا إسم الكائن من textBox1 إلى t1 وذلك لسهولة التعامل معه في الشفره كما سنرى لاحقاً
الآن اضغط مزدوجاً على الزر لترجع إلى الشفرة
أمسح السطر الثاني من الكود السابق وأكتب بدل منه هذا الكود
كود:
x=t1.Text;
لاحظ أن الكائن t1 الذي هو مربع النص له صفة اسمها Text وهي تمثل النص المكتوب عليه
معنى الكود السابق أن المترجم سيقوم بأخذ ما هو مكتوب في مربع النص المسمى t1 ويحمله للمتغير x
أي أن الكود كاملأ سيصبح هكذا:
كود:
int x;
x=t1.Text();
MessageBox.Show(Convert.ToString(x));

ملاحظة:لمعرفة صفات وأفعال الكائن أكتب إسم الكائن ثم أكتب نقطة ,
ستظهر لك نافذة بجميع اعمال وصفات الكائن ففي المثال السابق بمجر د كتابة تكتب t1 ثم نقطة
سيظهر لك هذا الصندوق :

وبمجرد أن تكتب حرف t من كلمة Text سينقل الإختيار في الصندوق إلى كلمة Text:

وللإختصار اضغط على زر Tab لكي تكتب كلمة Text آلياً


لاحظ في الصورة السابقة أن نوع صفة Text هو string أي نص
وبالتالي لو حاولت تنفيذ البرنامج وضغط الزر سيظهر خطأ لأننا حاولنا أن نحمل المتغير x قيمة نصيه
بينما يجب أن نحملة رقم , يأتي دور كائن التحويل مرة أخرى ولكن هذه المرة من نص إلى رقم
فيصبح الكود الكامل والصحيح هكذا:
كود:
int x;
x=Convert.ToInt32(t1.Text);
MessageBox.Show(Convert.ToString(x));

في السطر الأول عرفنا متغير من نوع رقم
وفي السطر الثاني حملنا هذا المتغير القيمة المكتوبة في مربع النص وحولناها إلى رقم
وفي السطر الثالث لم نغير شيء
الآن نفذ البرنامج , وقبل أن تضغط الزر أكتب أي رقم في مربع النص ثم اضغط الزر
ستظهر لك رسالة بالرقم الذي كتبته
تأكد انك ستكتب رقم وليس حرف وإلا ظهرت لك رسالة خطأ
..
لتوسيع التطبيق أضف متغيرين آخرين y,z وأضف مربع نص آخر وسمه t2
غير النص المكتوب على الزر وأكتب بدلاً منه "اظهار ناتج الجمع"
ليكون شكل النافذة هكذا:

الآن اذهب إلى الشفرة وعدلها إلى التالي:
كود:
int x;
int y;
int z;
x=Convert.ToInt32(t1.Text);
y=Convert.ToInt32(t2.Text);
z=x+y;
MessageBox.Show(Convert.ToString(z));

عرفنا ثلاثة متغيرات من نوع رقم صحيح
في السطر الرابع حملنا x الرقم المكتوب في t1
وفي السطر الخامس حملنا y الرقم المكتوب في t2
وفي السطر السادس حملنا z مجموع x وy
وفي السطر السابع أظهرنا قيمة z في الرسالة , لاحظ أنا وضعنا z بدل x في السطر الأخير
الآن قم بتنفيذ البرنامج , وأكتب عدداً صحيحاً في كل مربع نص وأضغط الزر
ستظهر لك نافذة مجموع العددين :

اغلق الرسالة وجرب أن تضع في أحد مربعات النص رقماً حقيقياً مثل 41.25 واضغط على الزر
ستظهر لك رسالة خطأ لأن المتغيرات xوyوz تحمل متغيرات من نوع رقم صحيح وأنت حاولت أن تحملها رقم حقيقي
اضغط على زر Continue في رسالة الخطأ ليتم إيقاف تنفيذ البرنامج:

إذهب إلى الشفرة وحاول أن تجد الحل للقيام بجمع أعداد حقيقية, وذلك هو الواجب
تلميح:نعرف أن double تعني رقم حقيقي والكائن Convert.ToDouble يحول إلى رقم حقيقي
ما عليك إلا أن تضع double بدل من int
وتضعConvert.ToDouble بدل من Convert.ToInt32

لحظة , لم ينتهي الواجب بعد
أضف إلى البرنامج ثلاثة أزرار إضافية للقيام بباقي العمليات الرياضية
1-اظهار ناتج الطرح
2-اظهار ناتج الضرب
3-اظهار ناتج القسمة
ليصبح شكل النافذه هكذا:

.نهاية الدرس الثاني.
avatar
sayed
Admin

عدد المساهمات : 190
تاريخ التسجيل : 10/10/2011
العمر : 63
الموقع : computer.hooxs.com

http://computer.hooxs.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى