algol
09-25-2005, 03:45 PM
بسم الله الرحمن الرحيم
فهم قلب لغه سي:الدرس الثالث: الثوابت Constants و أنواعها
ال Constants أوالثوابت في لغه C تكون إما تحتوي على أرقام Numbers أو حروف أو رموز Characters .وهي هنا إما تكون ثوابت مضمنه في نفس اللغه أي في أساسيات اللغه و القلب المحرك فيها . بينما يمكن في اللغات السهله مثل فجوال بيسك أن يكون الثابت من أي نوع .
في الحقيقة الرمز أو الحرف chars تكون ممثلة على شكل أرقام Numbers , أي النصوص في C أصلاً لا تكون على شكل String نصوص كما في اللغات المشتقة منها أو الغات الأخرى مثل فجوال بيسك ويمكن هنا تمثيل النص من غلال مصفوفة من الرموز المتسلسلة .
وهنا يجب أن لا نخلط بين الثوابت النصية character String و بين ال Literal الثوابت النصية الصغيرة فسيتم شرح ال Literal في الخطوة الثانية من هذا الدرس .
ففي لغه السي C يتم تعريف الثابت على أنه متغير موجود في الذاكرة كلن مع عدم إمكانية تغير قيمته في سياق البرنامج على العكس كما في بعض اللغات الحديثة .
ولكن هنا يقوم ال Preprocessor بعمل تبديل لقيمة الثابت قبل البدء في ترجمة البرنامج و يتم تعويض القيمة والمعاملة مع القيمة بدل من الثابت .
هنا يمكن أن نرى عدد من الثوابت في تعريف ال constants ...
فمثلاً نقوم بإستخدام ال Preprocessor التي تسمى #define و بعدها نقوم بتعريف إم للثابت و بعده نضع فراغ و بعد الفراغ نضع القيمة العديدية أو النصية.
سنقوم في الخطوة التالية بشرح الثوابتي الرقيمة Numeric Constants والثوابت النصية Character Constants .
الثوابت الرقمية Numeric Constants
هنا سنقوم بشرح الثوابت الرقمية , وهي في العاده تأخذ القيمة long أو float أو double
ويمكن أن تكون القيمة موجبة أو سالبة , و أيضاً في الثوابت من نوع float يمكن أن نضيف الأس للثابت.
هنالك بعض الحروف توضع مع أسماء الثوابت لكي توضح للمبرمج أن الثابت من نوع رقمي معين مثل الحروف التالي ..
مثلاً إذا وضع الحرف D أو d في بداية الثابت من نوع double فإن الحرف لا يأثر على قيمة الثابت فقط يعطي إشارة للمبرمج أن الثابت عبارة عن قيمة double كما في المثال التالي ..
C++
#define dMyNumber -2253e-2
فهنا قمنا بتعريف ثابت من نوع double وها التعريف ليس في الحرف d بل يقوم المترجم بحساب قيمة العدد المراد تعريفة على أنه ثابت فيجد أن قيمة ال float لا تسع هذا الرقم فيقوم بتعريفة على شكل double فيجب هنا أن نتعامل مع الثابت في البرنامج في برنامجنا على أنه double .
أما مثلاُ إذا عرفنا ثابت كما في الكود التالي ...
C++
#define fnum 325.22
نجد أن المترجم عرفه على أنه من نوع float لأن العدد حقيقي و يمكن للمتغير من نوع float يحتوي القيمة, ويجب أن أذكر هنا أن الحرف f عبارة عن إشارة للمبرمج وليس له علاقة بتعريف النوع .
وهنا أذكر بعض حروف التلميح لنوع الثابت .. مثل
الصور المرفقة
--------------------------------------------------------------------------------
وهنا أضع ملاحظه يمكن أن تكون حروف التلميح صغيرة أو كبيرة مثل F أو f ..
يوجد هنالك بعض الأمور المهم يجب أن أنفهمها مثلاً إذا وضع حرف التلميح بعد الرقم وليس قبل إسم ثابت الرقمي فإنك تقم بإجبار المترجم على أن يعرف الثابت من نوع معين يمكن أن يتتضح ذلك من خلال الأمثلة التالية ..
C++
// ثابت من نوع حقيقي وفيه إشارة الأس
#define dNum -22453e-2
// ثابت من نوع حقيقي أجبر المترجم على تعريفه مع أن قيمة
// الرقم الحقيقي يمكن تخزينها في نقطة عائمة
#define dNum 132.45d
// ثابت من نوع النقطة العائمة
#define fNum 325.21f
// لا يوجد فرق بين الحرف الكبير أوا لصغير
#define fNum 325.21F
// ثابت من نوع طويل
#define lNum -22453L
// ثابت من نوع ساد عشري
// BTF
// وهي هنا عباة عن طويل من غير إشارة
#define xNum 0XB5FUL
http://s1.simpload.com/0926433845f814d09.jpg
الثوابت النصية CConstants haracter
أي حرف أو نص رمزي يذكر على هيئة ثابت نصي يذكر داخل النصوص يعطي معناً في التخزين وفي عمليات العرض للنص .
وهو دائماً يكون داخل الإشارات النصية مثل " النص " أو ال 'الحرف' فنحن مثلاً نريد أن نخزن علامات التنصيص داخل النص فنقوم بكتابة التالي
"\"" فإن \" تعني أننا خزنا " داخل النص أو الحرف وهذه هي الثوابت النصية ..فنرى هنا أننا ستخدمنا ال \ لكي نقوم بالدلالة على الحرف أو المعنى المراد مع أننا لا نعني أننا نريد أن نخزن ال \ بذاتها أو لاحقتها .. أيضاً يمكن أن يسأل أحد كيف يمكن أن نخزن ال \ في النص فنقول له يمكن ذلك من خلال المثال التالي "\\" فإذا قمنا بطباعة النص على الشاشة فإنه يقوم بطباعة \ واحدة وليسة إثنيتن ...إلن إقتران الطباعه يفهمها و يقوم بحذفها من العملية ..
وهنا أضع جدول ببعض الثوابت النصية التي لها العلاقة ب \ ..
الصور المرفقة
http://s1.simpload.com/0926433846a9ae9fa.jpg
--------------------------------------------------------------------------------
يمكن هنا أن ننظر على مثال تطبيقي على كل واحده لنرى ماذا يكون الناتج ...
C++
#include <stdio.h>
int main()
{
printf("to make Beep \\a : \a \n");
printf("to print \\b :\b it will delete the : \n");
printf("to print \\f :\f \n");
printf("to print the Next Line text in the next line\n");
printf("to print the : \nthe Next Line text in the next line \n");
printf("to print \\r :\r \n");
printf("to print \\t :\t make tab \n");
printf("to print \\v :\v \n");
printf("to print \\\' :\' \n");
printf("to print \\\":\" \n");
printf("to print \\\\ :\\ \n");
printf("to print \\? :\? \n");
printf("to print \\\347 :\347 \n");
printf("to print \\\x010:\x010 ");
return 0;
}
فيظهر الناتج على الشاشة كما يلي ...
http://s1.simpload.com/09264338471228591.jpg
الصورة عندنا في السعودية محجوبة من مصدرها هل هية عندكم أيضا محجوبة ردو بسرعة كي أتصرف
فهم قلب لغه سي:الدرس الثالث: الثوابت Constants و أنواعها
ال Constants أوالثوابت في لغه C تكون إما تحتوي على أرقام Numbers أو حروف أو رموز Characters .وهي هنا إما تكون ثوابت مضمنه في نفس اللغه أي في أساسيات اللغه و القلب المحرك فيها . بينما يمكن في اللغات السهله مثل فجوال بيسك أن يكون الثابت من أي نوع .
في الحقيقة الرمز أو الحرف chars تكون ممثلة على شكل أرقام Numbers , أي النصوص في C أصلاً لا تكون على شكل String نصوص كما في اللغات المشتقة منها أو الغات الأخرى مثل فجوال بيسك ويمكن هنا تمثيل النص من غلال مصفوفة من الرموز المتسلسلة .
وهنا يجب أن لا نخلط بين الثوابت النصية character String و بين ال Literal الثوابت النصية الصغيرة فسيتم شرح ال Literal في الخطوة الثانية من هذا الدرس .
ففي لغه السي C يتم تعريف الثابت على أنه متغير موجود في الذاكرة كلن مع عدم إمكانية تغير قيمته في سياق البرنامج على العكس كما في بعض اللغات الحديثة .
ولكن هنا يقوم ال Preprocessor بعمل تبديل لقيمة الثابت قبل البدء في ترجمة البرنامج و يتم تعويض القيمة والمعاملة مع القيمة بدل من الثابت .
هنا يمكن أن نرى عدد من الثوابت في تعريف ال constants ...
فمثلاً نقوم بإستخدام ال Preprocessor التي تسمى #define و بعدها نقوم بتعريف إم للثابت و بعده نضع فراغ و بعد الفراغ نضع القيمة العديدية أو النصية.
سنقوم في الخطوة التالية بشرح الثوابتي الرقيمة Numeric Constants والثوابت النصية Character Constants .
الثوابت الرقمية Numeric Constants
هنا سنقوم بشرح الثوابت الرقمية , وهي في العاده تأخذ القيمة long أو float أو double
ويمكن أن تكون القيمة موجبة أو سالبة , و أيضاً في الثوابت من نوع float يمكن أن نضيف الأس للثابت.
هنالك بعض الحروف توضع مع أسماء الثوابت لكي توضح للمبرمج أن الثابت من نوع رقمي معين مثل الحروف التالي ..
مثلاً إذا وضع الحرف D أو d في بداية الثابت من نوع double فإن الحرف لا يأثر على قيمة الثابت فقط يعطي إشارة للمبرمج أن الثابت عبارة عن قيمة double كما في المثال التالي ..
C++
#define dMyNumber -2253e-2
فهنا قمنا بتعريف ثابت من نوع double وها التعريف ليس في الحرف d بل يقوم المترجم بحساب قيمة العدد المراد تعريفة على أنه ثابت فيجد أن قيمة ال float لا تسع هذا الرقم فيقوم بتعريفة على شكل double فيجب هنا أن نتعامل مع الثابت في البرنامج في برنامجنا على أنه double .
أما مثلاُ إذا عرفنا ثابت كما في الكود التالي ...
C++
#define fnum 325.22
نجد أن المترجم عرفه على أنه من نوع float لأن العدد حقيقي و يمكن للمتغير من نوع float يحتوي القيمة, ويجب أن أذكر هنا أن الحرف f عبارة عن إشارة للمبرمج وليس له علاقة بتعريف النوع .
وهنا أذكر بعض حروف التلميح لنوع الثابت .. مثل
الصور المرفقة
--------------------------------------------------------------------------------
وهنا أضع ملاحظه يمكن أن تكون حروف التلميح صغيرة أو كبيرة مثل F أو f ..
يوجد هنالك بعض الأمور المهم يجب أن أنفهمها مثلاً إذا وضع حرف التلميح بعد الرقم وليس قبل إسم ثابت الرقمي فإنك تقم بإجبار المترجم على أن يعرف الثابت من نوع معين يمكن أن يتتضح ذلك من خلال الأمثلة التالية ..
C++
// ثابت من نوع حقيقي وفيه إشارة الأس
#define dNum -22453e-2
// ثابت من نوع حقيقي أجبر المترجم على تعريفه مع أن قيمة
// الرقم الحقيقي يمكن تخزينها في نقطة عائمة
#define dNum 132.45d
// ثابت من نوع النقطة العائمة
#define fNum 325.21f
// لا يوجد فرق بين الحرف الكبير أوا لصغير
#define fNum 325.21F
// ثابت من نوع طويل
#define lNum -22453L
// ثابت من نوع ساد عشري
// BTF
// وهي هنا عباة عن طويل من غير إشارة
#define xNum 0XB5FUL
http://s1.simpload.com/0926433845f814d09.jpg
الثوابت النصية CConstants haracter
أي حرف أو نص رمزي يذكر على هيئة ثابت نصي يذكر داخل النصوص يعطي معناً في التخزين وفي عمليات العرض للنص .
وهو دائماً يكون داخل الإشارات النصية مثل " النص " أو ال 'الحرف' فنحن مثلاً نريد أن نخزن علامات التنصيص داخل النص فنقوم بكتابة التالي
"\"" فإن \" تعني أننا خزنا " داخل النص أو الحرف وهذه هي الثوابت النصية ..فنرى هنا أننا ستخدمنا ال \ لكي نقوم بالدلالة على الحرف أو المعنى المراد مع أننا لا نعني أننا نريد أن نخزن ال \ بذاتها أو لاحقتها .. أيضاً يمكن أن يسأل أحد كيف يمكن أن نخزن ال \ في النص فنقول له يمكن ذلك من خلال المثال التالي "\\" فإذا قمنا بطباعة النص على الشاشة فإنه يقوم بطباعة \ واحدة وليسة إثنيتن ...إلن إقتران الطباعه يفهمها و يقوم بحذفها من العملية ..
وهنا أضع جدول ببعض الثوابت النصية التي لها العلاقة ب \ ..
الصور المرفقة
http://s1.simpload.com/0926433846a9ae9fa.jpg
--------------------------------------------------------------------------------
يمكن هنا أن ننظر على مثال تطبيقي على كل واحده لنرى ماذا يكون الناتج ...
C++
#include <stdio.h>
int main()
{
printf("to make Beep \\a : \a \n");
printf("to print \\b :\b it will delete the : \n");
printf("to print \\f :\f \n");
printf("to print the Next Line text in the next line\n");
printf("to print the : \nthe Next Line text in the next line \n");
printf("to print \\r :\r \n");
printf("to print \\t :\t make tab \n");
printf("to print \\v :\v \n");
printf("to print \\\' :\' \n");
printf("to print \\\":\" \n");
printf("to print \\\\ :\\ \n");
printf("to print \\? :\? \n");
printf("to print \\\347 :\347 \n");
printf("to print \\\x010:\x010 ");
return 0;
}
فيظهر الناتج على الشاشة كما يلي ...
http://s1.simpload.com/09264338471228591.jpg
الصورة عندنا في السعودية محجوبة من مصدرها هل هية عندكم أيضا محجوبة ردو بسرعة كي أتصرف