ونة حزن
07-27-2006, 01:00 AM
الكتابة على الشاشة
إن الأوامر الأكثر إنتشارا للكتابة على الشاشة هي أمر cout ، وهو عبارة عن stream ، والأمر موجود ضمن مكتبة iostream ، والتي من إسمها والذي يعني Input Output Stream ، أي تيار المدخلات والمخرجات المستمر.
مثال
cout <<"hello world";
المتغيرات
تستخدم المتغيرات لتخزين القيم. وبشكل أكثر تقنية، المتغير يربط بين شيء (بالمعنى العام، أي قيمة معينة، رقم أو حرف أو غيره) وإسم يميزه (إسم المتغير) بحيث يمكن الوصول لهذا "الشيء" أو القيمة لاحقا، فيمكن وصفه أنه "تسمية" للأشياء لتسهيل الوصول إليها.
طبعا في الحاسوب، يتم التعامل مع "الأشياء" بقيمها الرقمية، التي يمكن تحويلها لاحقا في سياق البرنامج إلى خصائص وقيم تبدو للبشر غير عددية، مثل الألوان والأحرف وغيرها.
تستخدم لغة سي وسي بلس بلس مجموعة من أنواع المتغيرات المعرفة مسبقا للتسهيل على المبرمجين، وتشتمل هذه الأنواع على:
العدد الصحيح int
العدد الصحيح، والذي يتم تعريفه بإستخدام int والتي هي إختصار لكلمة integer هو نوع من المتغيرات الذي يمكنه أن يحمل قيمة عدد صحيح ، قد يكون سالبا وقد يكون موجبا، وهو محدود بـ 16 أو 32 بت. وبشكل إفتراضي ، فإن المتغيرات من نوع int يمكن أن تحمل قيم سالبة وموجبة، وفي حال أردت أن يتم إستخدام القيم الموجبة فقط يمكن إضافة كلمة unsigned، فإن ذلك سيزيد آخر قيمة موجبة يمكن تخزينها إلى الضعف.
مثال
int x;
unsigned int y;
long int z;
int w=5,a,b;
هنا يمكنك أن تلاحظ الإعلان عن متغير من نوع int إسمه x في السطر الأول، ثم متغير آخر من نوع int ولكنه غير حامل لإشارة ، وبالتالي لا يحمل إلا قيم موجبة وذلك في السطر الثاني، وفي السطر الثالث يتم الإعلان عن متغير إسمه z ومن نوع long int، أي عدد صحيح مكون من 32 بت على الاقل، وفي السطر الأخير تلاحظ الإعلان عن ثلاثة متغيرات من نوع int، الأول هو w وتم إرساء القيمة 5 له، وتبعه على ذات السطر إعلن عن متغيران آخران هما a و b.
الحروف charالحروف يتم تعريفها بإستخدام النوع char والذي هو إختصار لكلمة character، وهو يحمل قيمة رقم معين بين 0 و 255 بحيث يعني كل رقم من هذه الأرقام حرفا معينا، وتسمى القيم من 0 إلى 127 بقيم ASCII. وبحسب التريف ، فإن char يحمل قيما عددية صحيحة، مما يسمح بإستخدامه لتخزين الأرقام التي دون 255، ولكن ذلك يعني أيضا بأن قيمه قد تكون سالبة أو موجبة، ولتأكيد كونها سالبة أو موجبة ، أضف كلمة signed او unsigned إلى جانب إعلانك عن متغير من نوع char.
الأعداد الكسرية Floating-point types
عندما نحتاج لتخزين عدد غير صحيح، أي عدد كسري، فإننا نستخدم الأنواع float و double و long double. وهي أنواع لا تخلتف إلا في مدى دقة تخزينها للقيم والحدود القصوى للقيم التي يمكن تخزينها فيها. ف float بشكل عام يتكون من 32 بت، و double من 64 بت. و long double قد يكون أكبر من ذلك، ولكنه قد يكون بذات طول double.
وهناك نوع خاص آخر يسمى void. وفي الحقيقة لا يسمح لك بإستخدام متغيرات من نوع void . ولكن هناك إستخدامات عديدة ل void، منها تمكين دالة ما من عدم إرجاع إي قيمة للبرنامج. و void لم تكن موجودة قبل أن تدخل ضمن لغة C القياسية عام 1989.
الثوابت
الثوابت تشبه المتغيرات كثيرا، بل إنها عبارة عن متغيرات من ناحية كونها طريقة لتسمية الأشياء لتسهيل الوصول إليها، ولكنها تختلف عن المتغيرات أنها لا يمكن تغيير قيمها بعد أول تحديد للقيمة.
لتعريف الثوابت تستخدم كلمة const والتي تعني ثابت أو مستمر مدموجة مع نوع الشيء الذي نود التعامل معه (أي نوع المتغير) وقيمته! قد يجد البعض أن كون الثابت هو متغير لا يمكن تغيير قيمته جملة عديمة المعنى، ولكن لو إعتبرنا أن الثابت عبارة عن قيمة متغير تبقى تحمل ذات القيمة بإستمرار، قد تكون الأمور أوضح.
لإنشاء ثابت من نوع ما، لنفرض أنه ثابت عدد صحيح، ونود تسميته x وإسناد القيمة 7 إليه فإننا نكتب :
const int x = 7;
ما فائدة الثوابت؟
قد تكون قد لاحظت أن الثوابت عبارة متغيرات ممنوع تغييرها! إذا لماذا تم إنشائها؟ وألم يكن من الممكن الإستعاضة عنها بمتغيرات عادية، وأن نقوم وببساطة بتجنب تغييرها؟
في الحقيقة أن أحد أهم الأهداف التي تم إنشاء المتغيرات لأجلها هي مساعدة المبرمج على عدم الوقوع في الخطأ. وبالتالي تحديد ما يمكن فعله وعدم فعله بمتغير معين مع الإبقاء على الشيفرة المصدرية مقروءة ومفهومة. على سبيل المثال، لو أن أحد المبرمجين يود أن يكتب برنامجا، فيه قيمة تمثل القاسم المشترك الأصغر لعددين صحيحين، والذي هو دوما قيمته 1. فإن تحديد القيمة التي يحملها دوما بواحد ومنع تغييرها، ستمنع المبرمج بالوقوع في الخطأ وتعديل هذه القيمة (الأمر الذي قد يحدث إما بالخطأ أو بسبب عدم الفهم الواضح للمعنى الرياضي خلف هذه القيمة، وهو الأمر الشائع جدا)، كما أنه لا داعي لتغيير قيمة ثابت الدوائر باي (3.14..) مثلا، وهكذا دواليك. "(té"(-té-té(-
بماذا تختلف const عن #define ؟
قد يعرف البعض أن هناك طريقة لتعريف أسماء لقيم بإستخدام #define، هذه الطريقة تجعل المجمّع (الترجمان أو كومبايلر) يستبدل كل تعريف define يجده بالقيمة المعطاة، ولكنه لا يعطي لها نوعا محددا. على النقيض من const.
العمليات الأساسية
العمليات الأساسية، ترجمة لمصطلح operators، هي العمليات التي يمكن القيام بها على المتغيرات والكائنات بشكل عام، وهي تشمل الآتية:
العملية الأساسية الوصف Associativity
()
[]
.
->
Parentheses (grouping)
Array sub******
Element selection by identifier
Element selection by pointer
left-to-right
++ --
+ -
! ~
(type)
*
&
sizeof
Prefix/postfix increment and decrement
Unary plus and minus
Logical NOT and bitwise zero's complement
Type cast
Dereference
Reference (address-of)
Size of
right-to-left
* / % Multiplication, division, and modulus (remainder) left-to-right
+ - Addition and subtraction
<< >> Bitwise left shift and right shift
< <=
> >=
Relational “less than” and “less than or equal to”
Relational “greater than” and “greater than or equal to”
== != Relational “equal to” and “not equal to”
& Bitwise AND
^ XOR على مستوى البت (exclusive or)
| Bitwise OR (inclusive or)
&& Logical AND
|| Logical OR
c?t:f Ternary conditional right-to-left
=
+= -=
*= /= %=
<<= >>=
&= ^= |=
Direct assignment
Assignment by sum and difference
Assignment by product, dividend, and remainder
Assignment by bitwise shift
Assignment by bitwise AND, XOR, and OR
, Comma left-to-right
إن الأوامر الأكثر إنتشارا للكتابة على الشاشة هي أمر cout ، وهو عبارة عن stream ، والأمر موجود ضمن مكتبة iostream ، والتي من إسمها والذي يعني Input Output Stream ، أي تيار المدخلات والمخرجات المستمر.
مثال
cout <<"hello world";
المتغيرات
تستخدم المتغيرات لتخزين القيم. وبشكل أكثر تقنية، المتغير يربط بين شيء (بالمعنى العام، أي قيمة معينة، رقم أو حرف أو غيره) وإسم يميزه (إسم المتغير) بحيث يمكن الوصول لهذا "الشيء" أو القيمة لاحقا، فيمكن وصفه أنه "تسمية" للأشياء لتسهيل الوصول إليها.
طبعا في الحاسوب، يتم التعامل مع "الأشياء" بقيمها الرقمية، التي يمكن تحويلها لاحقا في سياق البرنامج إلى خصائص وقيم تبدو للبشر غير عددية، مثل الألوان والأحرف وغيرها.
تستخدم لغة سي وسي بلس بلس مجموعة من أنواع المتغيرات المعرفة مسبقا للتسهيل على المبرمجين، وتشتمل هذه الأنواع على:
العدد الصحيح int
العدد الصحيح، والذي يتم تعريفه بإستخدام int والتي هي إختصار لكلمة integer هو نوع من المتغيرات الذي يمكنه أن يحمل قيمة عدد صحيح ، قد يكون سالبا وقد يكون موجبا، وهو محدود بـ 16 أو 32 بت. وبشكل إفتراضي ، فإن المتغيرات من نوع int يمكن أن تحمل قيم سالبة وموجبة، وفي حال أردت أن يتم إستخدام القيم الموجبة فقط يمكن إضافة كلمة unsigned، فإن ذلك سيزيد آخر قيمة موجبة يمكن تخزينها إلى الضعف.
مثال
int x;
unsigned int y;
long int z;
int w=5,a,b;
هنا يمكنك أن تلاحظ الإعلان عن متغير من نوع int إسمه x في السطر الأول، ثم متغير آخر من نوع int ولكنه غير حامل لإشارة ، وبالتالي لا يحمل إلا قيم موجبة وذلك في السطر الثاني، وفي السطر الثالث يتم الإعلان عن متغير إسمه z ومن نوع long int، أي عدد صحيح مكون من 32 بت على الاقل، وفي السطر الأخير تلاحظ الإعلان عن ثلاثة متغيرات من نوع int، الأول هو w وتم إرساء القيمة 5 له، وتبعه على ذات السطر إعلن عن متغيران آخران هما a و b.
الحروف charالحروف يتم تعريفها بإستخدام النوع char والذي هو إختصار لكلمة character، وهو يحمل قيمة رقم معين بين 0 و 255 بحيث يعني كل رقم من هذه الأرقام حرفا معينا، وتسمى القيم من 0 إلى 127 بقيم ASCII. وبحسب التريف ، فإن char يحمل قيما عددية صحيحة، مما يسمح بإستخدامه لتخزين الأرقام التي دون 255، ولكن ذلك يعني أيضا بأن قيمه قد تكون سالبة أو موجبة، ولتأكيد كونها سالبة أو موجبة ، أضف كلمة signed او unsigned إلى جانب إعلانك عن متغير من نوع char.
الأعداد الكسرية Floating-point types
عندما نحتاج لتخزين عدد غير صحيح، أي عدد كسري، فإننا نستخدم الأنواع float و double و long double. وهي أنواع لا تخلتف إلا في مدى دقة تخزينها للقيم والحدود القصوى للقيم التي يمكن تخزينها فيها. ف float بشكل عام يتكون من 32 بت، و double من 64 بت. و long double قد يكون أكبر من ذلك، ولكنه قد يكون بذات طول double.
وهناك نوع خاص آخر يسمى void. وفي الحقيقة لا يسمح لك بإستخدام متغيرات من نوع void . ولكن هناك إستخدامات عديدة ل void، منها تمكين دالة ما من عدم إرجاع إي قيمة للبرنامج. و void لم تكن موجودة قبل أن تدخل ضمن لغة C القياسية عام 1989.
الثوابت
الثوابت تشبه المتغيرات كثيرا، بل إنها عبارة عن متغيرات من ناحية كونها طريقة لتسمية الأشياء لتسهيل الوصول إليها، ولكنها تختلف عن المتغيرات أنها لا يمكن تغيير قيمها بعد أول تحديد للقيمة.
لتعريف الثوابت تستخدم كلمة const والتي تعني ثابت أو مستمر مدموجة مع نوع الشيء الذي نود التعامل معه (أي نوع المتغير) وقيمته! قد يجد البعض أن كون الثابت هو متغير لا يمكن تغيير قيمته جملة عديمة المعنى، ولكن لو إعتبرنا أن الثابت عبارة عن قيمة متغير تبقى تحمل ذات القيمة بإستمرار، قد تكون الأمور أوضح.
لإنشاء ثابت من نوع ما، لنفرض أنه ثابت عدد صحيح، ونود تسميته x وإسناد القيمة 7 إليه فإننا نكتب :
const int x = 7;
ما فائدة الثوابت؟
قد تكون قد لاحظت أن الثوابت عبارة متغيرات ممنوع تغييرها! إذا لماذا تم إنشائها؟ وألم يكن من الممكن الإستعاضة عنها بمتغيرات عادية، وأن نقوم وببساطة بتجنب تغييرها؟
في الحقيقة أن أحد أهم الأهداف التي تم إنشاء المتغيرات لأجلها هي مساعدة المبرمج على عدم الوقوع في الخطأ. وبالتالي تحديد ما يمكن فعله وعدم فعله بمتغير معين مع الإبقاء على الشيفرة المصدرية مقروءة ومفهومة. على سبيل المثال، لو أن أحد المبرمجين يود أن يكتب برنامجا، فيه قيمة تمثل القاسم المشترك الأصغر لعددين صحيحين، والذي هو دوما قيمته 1. فإن تحديد القيمة التي يحملها دوما بواحد ومنع تغييرها، ستمنع المبرمج بالوقوع في الخطأ وتعديل هذه القيمة (الأمر الذي قد يحدث إما بالخطأ أو بسبب عدم الفهم الواضح للمعنى الرياضي خلف هذه القيمة، وهو الأمر الشائع جدا)، كما أنه لا داعي لتغيير قيمة ثابت الدوائر باي (3.14..) مثلا، وهكذا دواليك. "(té"(-té-té(-
بماذا تختلف const عن #define ؟
قد يعرف البعض أن هناك طريقة لتعريف أسماء لقيم بإستخدام #define، هذه الطريقة تجعل المجمّع (الترجمان أو كومبايلر) يستبدل كل تعريف define يجده بالقيمة المعطاة، ولكنه لا يعطي لها نوعا محددا. على النقيض من const.
العمليات الأساسية
العمليات الأساسية، ترجمة لمصطلح operators، هي العمليات التي يمكن القيام بها على المتغيرات والكائنات بشكل عام، وهي تشمل الآتية:
العملية الأساسية الوصف Associativity
()
[]
.
->
Parentheses (grouping)
Array sub******
Element selection by identifier
Element selection by pointer
left-to-right
++ --
+ -
! ~
(type)
*
&
sizeof
Prefix/postfix increment and decrement
Unary plus and minus
Logical NOT and bitwise zero's complement
Type cast
Dereference
Reference (address-of)
Size of
right-to-left
* / % Multiplication, division, and modulus (remainder) left-to-right
+ - Addition and subtraction
<< >> Bitwise left shift and right shift
< <=
> >=
Relational “less than” and “less than or equal to”
Relational “greater than” and “greater than or equal to”
== != Relational “equal to” and “not equal to”
& Bitwise AND
^ XOR على مستوى البت (exclusive or)
| Bitwise OR (inclusive or)
&& Logical AND
|| Logical OR
c?t:f Ternary conditional right-to-left
=
+= -=
*= /= %=
<<= >>=
&= ^= |=
Direct assignment
Assignment by sum and difference
Assignment by product, dividend, and remainder
Assignment by bitwise shift
Assignment by bitwise AND, XOR, and OR
, Comma left-to-right