المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : THE BEST BOOK IN C++


THE LOVER
22-Aug-2006, 12:57 PM
بسم الله الرحمن الرحيم
والصلاة والسلام على أشرف المرسلين محمد ابن عبدالله الصادق الأمين و على أله و من اتبعه الى يوم الدين
أما بعد . . .
فسوف أقدم لكم اليوم درس تعليم لغة c++ بالطريقة الإحترافية و لن أطيل عليكم الشرح بل سوف أترككم مع الشرح . . .
جميع الحقوق محفوظة 2006
THE DEATH GROUP
THE LOVER



Arabic Document For C++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



######
## ##
##
### _|_ _|_
### | |
##
## ##
####### Written by THE LOVER [ 22/7/2006 ]
~~~~~~~~~~~~~~~~~~~~~~~~
YAHOO Messanger : ALSANJAK1@YAHOO.Com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://deathin2005.tripod.com
~~~~~~~~~~~~~~~~~~~~~~










• السي ++ هي ناتج تطوير لغه سي ، بعد قراءة هذا المستند تكون قادر على كتابه برامج كامله و
• نافعه في لغه سي ++ ، ولحسن حظك فإن أكثر نظم التشغيل يمكن كتابه فيها شفرات بهذه اللغه ، مثلا
• ستكون قادر على البرمجه على نظام Linux أو FreeBSD وحتى QNX ونوفل ونتوير وويندوز .. الخ
• هذا يعني أنك قادر على كتابه برنامج وتشغيله في ويندوز ثم نقل المصدر وتشغيله على ليون** مثلا
• وبهذا يكون لديك نسختين من البرنامج واحد في ويندوز وواحد في ليون** ، دون البحث عن برنامج تحويل
• أو دون البحث عن لغه تعمل على ليون** لتترجم بها شفرتك ....الخ
• وأيضا ستكون عارف 90 % من لغه جافا الشهيره إذا عرفت سي ++ ، وسوف تكون لك هيبه تقدر بـ 9
• درجات على مقياس رختر إذا أجدت الكتابه على هذه اللغه ، أنصح بالإبتعاد عن فيجوال بيسك والذي
• هو هدفي من كتابه هذا المستند :)


• ملاحظه:
• Sources Code - /*شفرة */ الموجود في نص هو يعبر عن كود ، يعني ما هو جزء من الكود ،
• الهدف منه توضيح لك بأن المكتوب بعده هو كود ، وكذلك /* MS-DOS */ فهو يرمز الى واجه
• دوس DOS









• إفتح النوتباد وأكتب التالي


• /* Sources Code - شفرة */

• # include <iostream.h>

• int main()
• {
• cout << "C++ is Cool \n " ;
• return 0 ;
• }



• وأحفظ الملف بالإسم cppiscool.cpp
• تأكد من الإسم أنه ينتهي بـ cpp وليس txt ، يجب ان لا يظهر رمز ملف txt ويمكن فعل
• ذلك عن طريق إختيار save as type في مربع Save As ومن الإشارة الى All File

• الخطوة الثانية :
• إقتح الملف cppiscool.cpp في برنامج السي ++ الذي تستخدمه مثلا سي ++ بولدر من
• شركة بورلاند أو فيجوال سي ++ من شركة مايكروسوفت ، مثلا قمت بفتح البرنامج على
• فيجوال سي ++ إضغط على Ctrl+ F7 وانتظر حتى ينتهي من الترجمه ثم إضغط Ctrl+F5 لكي
• يترجم لك البرنامج الى ملف تنفيذي ، قد يسالك عن مكان حفظ المشروع ، إختر المكان
• الذي يناسبك ، والآن يمكنك الذهاب الى الدليل الذي حفظة فيه المشروع وسوف تلاقي
• مجلد بإسم Debug ، أفتحه ، وسوف تجد البرنامج cppiscool.exe


• شرح الكود :
• السطر

• /* Sources Code - شفرة */

• # include <iostream.h>


• يطلب الأمر include بأن يتم إضافه الملف iostream.h الى الشفره ، ويتم البحث عن
• هذا الملف ومن نسخ كل مافيه ووضعه بدل سطر الأمر include ...... سترى أن البرنامج
• رايح يشتغل بدون أي أخطأ ومشاكل ، ولا حجمه بزيد والسبب هو أن الأمر include يظيف
• الملف اللي بعده ، ولو بدلت عنه بالي موجود بالملف اللي بعده رايح يمشي كل شئ
• تمام ...
• علامتي القوس "<" و ">" تدل على تواجد الملف الذي بينهم في الأماكن المعتاده ،
• مثلا داخل مجلد include الذي يحتوي على كافه ملفات *.h
• لو كان الملف iostream.h أو غيره يوجد في دليل غير دليل البرنامج وهذا شئ نادر
• طبعا وقد لا يواجهك لذلك لا تشغل بالك بما ساقوله الآن ;-) ، يمكن أن نستعيده
• بالطريقه التاليه


• /* Sources Code - شفرة */

• # include <C:\My Documents\iostream.h>


• يبدوا في المثال السابق أننا طلبنا الملف iostream.h من My Documents ، ولكن في
• الغالب الملف iostream.h يكون متواجد مع البرنامج الذي تستخدمه لكتابه شفرات السي
• ++ في المجلد include لذلك لن تحتاج الا لكتابه فقط ، والمعالج سيعرف مكانه ، ولا
• داعي لتشغل بالك بما قلت أنا في الأخير




• الى هنا ننتهي ، إضغط على الوصله التي في الاسفل لتذهب الى الدرس الثاني في سي ++
• ، وقبل لا ننتقل تذكر بأن السي ++ تفرق بين كلمة Condor و condor وايضا CONDOR
• يعني تفرق بين الكبتل والسمول ، ولكن ه8ناك مترجمات حديثه قد تصرف النظر عن هذا
• الشئ ، ولكن يجب أن تعتاد على الإهتمام بهذا الجانب عشان لا يصير أخطاء لمن يريد
• تطوير برامجك في المستقبل ويستخدم مترجم غير اللي عندك .

• ----------------------------------------------------------------------------

• نكمل الدرس السابق ، يوضح الشكل التالي شفرة البرنامج الذي قمنا بصنعه في الدرس
• السابق



• /* Sources Code - شفرة */

• # include < iostream.h >

• int main()
• {
• cout << "C++ is Cool \n " ;
• return 0 ;
• }




• السطر الثاني من البرنامج وهو الذي يحتوي على العبارة


• /* Sources Code - شفرة */

• int main()



• هذا السطر هو البدايه الحقيقه للبرنامج ، وهو عبارة عن إجراء function ، وهو
• عبارة عن مجموعة من الأوامر ، والإجراء لابد أن يحدد نوع القيمه التي سيعود بها
• وهي هنا int إختصار لـ integer تدل على أنه رقم ، أنظر الى السطر قبل الأخير في
• البرنامج وهو


• /* Sources Code - شفرة */

• return 0 ;



• لقد أعاد الرقم 0 وهذا يخبر النظام بأن البرنامج نفذ على الوجه السليم ، يميز
• الإجراء ()main عن بقيه الإجراءات الأخرى هو أنه يتم طلبه من النظام أثناء تشغيل
• البرنامج تلقائيا ( لا تشغل بالك بهذا الكلام ، أعرفه فقط كما هو مكتوب وقريبا
• ستفهم ما قلته لك تماما :-) )
• بعد () main ] انظر الى الكود في الأعلى ] نجد بعده علامة "}" ، السبب هو ان كافه
• الإجراءات يجب أن تبداء بعلامه } وتنتهي بـ { ، وهي تدل على بدايه ونهايه ، ويأتي
• في وسطها قلب البرنامج وهذه المنطقه تسمى بالكتله وهو في مثالنا



• /* Sources Code - شفرة */

• cout << "C++ is Cool \n " ;



• الكائن cout وينطق سي آوت ، هو لطباعه نص على الشاشه ، وكما في مثالنا قمنا
• بطباعه C++ is Cool ، طريقه إستخدام الكائن cout هو كتابه cout ثم علامه أقل من
• مرتين >> وبعدها علامه التنصيص " ثم العبارة ثم نقفل علامه التنصيص " ولاتنسى
• العلامه ; في الأخير ، ولا تنسى أيضا طلب المكتبه iostream.h في اول البرنامج عن
• طريق الأمر include الذي تعلمناه في الدرس السابق ، لأنها ضروريه للكائن cout
• فالكائن متواجد بها :)

• ملاحظه : العلامه n\ الموجوده في النهايه تطلب بدء سطر جديد ، وهي إختصار لـ New
• Line وتنطق New Line أيضا ولكن البعض ينطقها سلاش إن


• ----------------------------------------------------------------------------

• أكيد سالت نفسك ، هل توجد علامات غير n\ أم لا ؟ الجواب هو نعم يوجد ، وهذا
• الجدول يوضحها لك

• n\ ( سطر جديد ، إختصار لـ New Line)
• t\ ( جدولة ، تماما مثل ضغط Tab ، إختصار لـ Tab)
• b\ ( مسح الحرف الأخير ، إختصار لـ BackSpace )

• حاول كتابه شفره تطبع العلامه ( " ) على الشاشه ، أعتقد أنك سوف تفشل ، اسف على
• التحطيم ، شفرة البرنامج ستكون على النحو التالي



• /* Sources Code - شفرة */

• #include < iostream.h >
• int main ()
• {
• cout << " " " << "\n" ;
• return 0 ;
• }




• عند الترجمة يظهر الخطأ التالي :





• Cpp1.obj - 2 error(s), 0 warning(s)




• والسبب هو وجود العلامة " في الأول تدل على أن اللذي يليها هو الذي سوف تتم
• كتابته الى أن تتأتي العلامة " مره أخرى ، عند مرور المترجم على الكود السابق سوف
• يجد العلامة " بعد سي آوت ويعرف أن اللذي سوف يأتي بعدها هو الذي سوف يتم عرضه ،
• ولكن لا شئ بعدها الا العلامة مره أخرى " وهذا يدل على انه لا يعرض شئ ، ولكن تم
• فتح العلامة مره أخرى ( " ) ولم تقفل ، هل تريد التأكد من كلامي ، قم بإضافه
• العلامة " مره أخرى لتصبح أربع علامات وسوف ترى صحه كلامي ، يعني لازم يكون العدد
• موجب للعلامات وليس مفرد ، وأكيد أنك تتسأل وش هو الحل /
• إذا أردت عرض رساله وتحتوي على ( " ) كل ماعليك هو وضع أمامها علامة \ فقط
• نفس الشئ في العلامة ( \ ) نفسها ، فلو اردت عرضها في رسالتك وكتبت \ كما هي فلن
• تعرض ، ولكن يتوجب كتابه \\ لتعرض \ فقط ، حاول معرفه السبب بنفسك


• إستخدام الكائن cout للجمع والطرح والقسمه :=-

• سوف اعتبر انك سوف تتطلب المكتبه iostream.h وأن تعلن عن الإجراء ()main وتصع
• القوس } في البدايه والقوس { في النهايه وأن تعيد القيمه 0 عن طريق return وكل
• ذلك دون أن أطلب منك ، وكل ماعلي هنا هو شرح لك إستخدام الكائن cout فقط
• الجمع


• /* Sources Code - شفرة */

• cout << (1+1) "\n" ;




• هذه الشفره بعد ما تقوم بكل ما قلت لك عنه سابقا وهو أن تتطلب المكتبه iostream.h
• و وأن تعلن عن الإجراء ()main وتضع القوس } في البدايه والقوس { في النهايه وأن
• تعيد القيمه 0 عن طريق return


• /* Sources Code - شفرة */


• #include < iostream.h >
• int main ()
• {
• cout << (1+1) << "\n";
• return 0 ;
• }



• يقوم هذا الكود بجمع القيمتين 1+1 ويتضح لنا أننا قمنا بوضعها داخل قوسين ، وفي
• الحقيقه فإن هذا الإجراء غير مطالب به أحيانا ولكن بعض المترجمات تحدث خطأ إذا لم
• تقوم بوضعه فالأفضل أن تعتاد على وضعه فكثير من المترجمات لا يفرق بين وضعه أو
• غير وضعه بينما هناك من يفرق ، لذلك تعود علىوضعه لكي لا تحدث أخطأ لم يريد تطوير
• برامجك ويستخدم مترجم غير اللي عندك :)


• القسمه والضرب والطرح :

• القسمه يكون بدل علامة + علامة /
• الضرب يكون بدل علامة + علامة *
• الطرح يكون بدل علامة + علامة -

• مثال على الطرح


• /* Sources Code - شفرة */

• cout << (1-1) << "\n";




• القسمه


• /* Sources Code - شفرة */

• cout << (1/1) << "\n";




• الضرب


• /* Sources Code - شفرة */

• ضع الشفره هنا واربح



• لا تصدقني في الشفره السابقه ، فإذا قمت بالفعل بترجمتها فسوف يظهر لك





• Cpp1.exe - 87 error(s), 0 warning(s)





• ولكن لو أردت كاتبتها كل ما عليك هو إضافه // أمامها لكي يقوم المترجم بتجهلها
• كما هو مبين هنا


• /* Sources Code - شفرة */

• // condor@phreaker.net



• ولك الخيار المفضل ويسمى بنمط سي ، وهو أن تضع */ في البدايه و /* في النهايه كم
• هو مبين لك هنا مثلا



• /* Sources Code - شفرة */

• /* E-Mail : condor@phreaker.net
• Msn Messnger : kondor_900@hotmail.com */



• ونسمي ما يتم وضعه داخل العلامة / أو */ بالتعليقات ، وفائده التعليقات هو أن
• يسهل عليك تعديل برنامجك في المستقبل ، أو يسهل على غيرك قراءته ، فتكتب في
• التعليق ما هي وظيفه الكود القادم ولماذا وكيف وكل شئ عنه ..


• ----------------------------------------------------------------------------

• الإجراءات :
• الإجراء ما يبغا له واحد يتفلسف فيه ويقعد يعرفه أو يخترع له تعاريف ويدعي أنها
• تسهل مفهومه ، فهو شئ بسيط جدا وسهل جدا جدا جدا ، لناخذ مثال

• ماذا يقوم به البرنامج التالي


• /* Sources Code - شفرة */

• #include < iostream.h >
• int main ()
• {
• cout << "condor home page" << endl ;
• return 0;
• }




• ملاحظه : العبارة endl تقوم بمثل عمل n\ وتنطق إيند إل أو إيند لاين ولكن يفضل
• End-ell ) إيند إل)

• وماذا يقوم به البرنامج التالي


• /* Sources Code - شفرة */

• #include < iostream.h >
• void condor()
• {
• cout << "condor home page" << endl ;
• }
• int main ()
• {
• condor();
• return 0;
• }




• كلها تقوم بعرض رساله
• condor home page ) لك الحريه في تغييرها )
• في البرنامج الأول تم طلب الكائن cout مباشرة لطباعة رساله على الشاشه ، ولكن في
• البرنامج الثاني ونحن نعلم بأن البدايه الحقيقيه تكون بعد () int main وهي


• /* Sources Code - شفرة */

• int main ()
• {
• condor();
• return 0;
• }



• نجد أنه تم وضع العبارة ;()condor بدل من cout << "condor home page" << endl ;
• في البرنامج الأول ، ومع هذا فلقد عمل بنفس عمل البرنامج الأول وهذا يدل على أن
• ;()condor هو الذي يقوم بعرض الرساله ، ولكن كيف !!
• لو نظرت في أول البرنامج لوجدت الكلمة void وهي تستخدم لتعريف الإجراءات ، فلقد
• تم فيها تعريف إجراء مسمى بـ ()condor وأعطي مهمه وهي عرض الرساله condor home
• page كما هو موضح


• /* Sources Code - شفرة */

• void condor()
• {
• cout << "condor home page" << endl ;
• }



• الآن قد تم تعريف هذا الإجراء ، وإن تم مقابله كلمة ()condor في برنامجك فسوف يتم
• تنفيذ الشيفره cout << "condor home page" << endl ; مباشره

• قواعد أساسيه لإستخدام الإجراءات دون أخطاء :
• 1- عند تعريفك لإجراء يجب أن لا تنسى إستخدام void (أو غيرها، سوف نوضح هذا في
• الدرس القادم) وثم بعدها إسم الإجراء ولا تنسى القوسين () بعد إسم الإجراء فذلك
• ضروري جدا إذا إستخدمت void ، في الدرس القادم سوف نتعلم إنشاء إجراءات من نوع
• integer وسوف يكون الأمر مختلف عن هذا تماما ، لا تشغل بالك الآن .
• 2- بعد الإعلان عن الإجراء وقبل البدء في كتابه الشيفره الخاصه به لا تنسى فتح
• القوس { وعند الإنتهاء من كتابه الشيفره لا تسنى إقفال القوس } كما هو مبين هنا


• /* Sources Code - شفرة */

• void condor()
• {
• cout << "condor home page" << endl ;
• }



• 3- خذ هذه قاعده أساسيه تخفف عليك وجع الراس ، دائما عند طلب تعريف إجراء لا لا
• لا نضع العلامة ; في النهايه ولا نضع له العلامة { في البداية ولا العلامة } في
• النهايه ، وعند طلب إجراء يتوجب عليك وضع إسمه كاملا مثلا الإجراء ()condor الذي
• تم تعريفه في المثال السابق وثم العلامة ;
• 4- عند رغبتك في تعريف إجراء وطلبه لا تضع طلبه قبل إنشاءه ، بمعنى آخر لا تقوم
• بطلبه وأنت لم تقم بإنشاءه وثم تتذكر ذلك وتقوم بإنشاءه في آخر البرنامج مثل هذا


• /* Sources Code - شفرة */

• #include < iostream.h >
• int main ()
• {
• condor();
• return 0;
• }
• void condor()
• {
• cout << "condor home page" << endl ;
• }




• إذا فعلت ذلك فأنت خارق للقانون .
• 4- ما يصلح يكون إسم الإجراء فيه مسافات .
• 5- لطلب إنشاء إجراء لازم يكون ذلك في أول البرنامج بعد include ، فما يصير مثلا
• يكون داخل بدايه البرنامج الفعليه ، أي بعد () int main



• خلاصه الكلام :
• الإجراء هو مجموعه من الأوامر يتم تعيين له إسم وتخزن في الذاكره طيله تشغيل
• البرنامج ، وتقوم بتنفيذ الشيفرات المكتوبه بداخلها عندما يتم طلبها ، والهدف
• منها هو تسهيل التعديل في البرنامج لاحقا ، فلو أفترضنا أنك تريد كاتبه برنامج
• بقوم بعرض رساله بشكل متكرر عند حالات معينه ، فسوف تقوم بكتابه هذه الرساله أكثر
• من مره ، وعند تعديلها سوف تتعب من البحث عن الرسائل هذه وتغييرها ، ولكن لو قمت
• بإعطائها إجراء فسوف يسهل ذلك عن طريق تعديل الإجراء فقط !!


• ----------------------------------------------------------------------------

• في الدرس السابق عرفنا إن الإجراء هو إسم محجوز في الذاكره وعند طلبنا له يقوم
• بتنفيذ الشيفره المناطه به ، ولكن هذا ليس كل شئ ، فالإجراءات لها فوائد أكثر من
• ذلك وليس كل شئ عنها ما ذكرناه وليس كل شئ أيضا هو الذي سأذكره الآن ...

• الإجراءات قد تعود بقيمه لنا وقد لا تعود بشئ ، مثلا ممكن أن تقوم بجمع قيمتين
• وطرح قيمتين أو ضرب ثلاث قيم أو قسمه أربع قيم وتعود لنا بالنتيجه.... الخ

• مثال :


• /* Sources Code - شفرة */

• #include < iostream.h >
• int mns (int a,int b)
• {
• return int (a-b);
• }
• int main()
• {
• int c,d,f;
• cout << "Plz Enter 2 Number: \n";
• cin >> c ;
• cin >> d ;
• f=mns (c,d);
• cout << f << endl;
• return 0 ;
• }



• عند تصريفك للكود التالي وتشغيله سوف يظهر لك كما هو مبين هنا



• /* MS-DOS */

• :Plz Enter 2 Number





• كل ما عليك هو إدخال رقمين ، أما أن تدخل الأول ثم مسافه وتدخل الثاني أو تدخل
• الأول وثم تضغط إنتر وتدخل الثاني ، مثلا ندخل رقم 2 ثم مسافه ورقم 2 ونضغط إنتر
• كما هو هنا


• /* MS-DOS */

• :Plz Enter 2 Number
• 2 1
• 1
• Press any key to continue






• بعد ضغط زر إنتر قام البرنامج بطباعه لنا الرقم 1 ، هذا يدل على عمل البرنامج وهو
• طرح القيمتين من بعض ، الآن سوف نقوم بشرح الكود كيف عمل ذلك ..

• شرح الكود :
• السطر الأول معروف ، في السطر الثاني هو كما ميبن لنا هنا


• /* Sources Code - شفرة */

• int mns (int a,int b)



• قمنا بالإعلان عن إجراء وأعطاناه الإسم mns ، صحيح أننا لم نستخدم void ، و void
• التي تعلمناها في الدرس السابق ماهي الا تعريف الإجراء ولكن يمكن تعريف الإجراءت
• بـ int ، ولكن متى نستخدم الأولى ومتى الثانيه ، نستخدم الأولى إذا لم يكن هناك
• قيمه يرجع بها ، مثلا يطبع رساله ، أما إذا كان يأخذ عددين ويعمل عليهما عمليه
• مثل طرح ويرجع لنا النتيجه فيجب أن تستخدم int وهي إختصار لـ integer أي أنه
• سيرجع لنا عدد صحيح وليس حرف أو رمز
• وقمنا بإعطاء الإجراء الذي قمنا بتعريفه بالإسم mns قيمتين هما a و b كما هو موضح
• ، ستعرف السبب قريبا :)
• السطر الثالث وفيه العلامة } معروفه ، والسطر الرابع وهو المهم



• /* Sources Code - شفرة */

• return int (a-b);




• هذا هو السطر الذي يقوم بطرح القيمتين a و b ويعود لنا بالنتيجه
• السطر الخامس وفيه العلامة {

• السادس وهو بدايه البرنامج الفعليه ، وهو اللي يبداء منه البرنامج ، وقبل قمنا
• بشرحه
• السطر السابع معروف
• السطر الثامن يعلن لنا عن ثلاث قيم c و d و f ومن نوع integer


• /* Sources Code - شفرة */

• int c,d,f;




• السطر التاسع :


• /* Sources Code - شفرة */

• cout << "Plz Enter 2 Number: \n";



• يظهر رساله للمستخدم تطالبه بإدخال رقمين Two Number

• السطر العاشر والحادي عشر :


• /* Sources Code - شفرة */

• cin >> c ;
• cin >> d ;



• فيه هنا جديد ...
• أولا لاحظ أن العلامة أكبر من مرتين ع** العلامة أصغر من مرتين لـ cout وهذه نقطه
• مهمه ، الآن وبعد أن عرفت هذا سنتكلم عن cin
• cin تقوم بأخذ القيمه الأولى التي أدخلتها وتجعلها بدل c الذي أعلنت عنه في السطر
• الثامن وعلى أنه integer ، و cin في السطر التالي تاخذ القيمه الثانيه التي
• أدخلها المستخدم وتجعلها بدل d الذي كذلك اعلنت عنه في السطر الثامن على أنه
• integer عدد صحيح

• السطر الثاني عشر والثالث عشر:
• f والذي أعلنت عنه أيضا في السطر الثامن لم يأخذ قيمته ، c أخذ العدد الأول الذي
• أدخله المستخدم و d أخذ العدد الثاني ، إذن f كما هو موضح = mns ، و mns هو
• المعلن عنه في السطر الثاني ويعيد لنا مطروح عددين ، والعددين هما القيمتان التي
• أدخلهما المستخدم لـ c و d ، يتم أخذ القيمتان الى a و b المعلن عنهما في أول
• البرنامج ويتم إجراء عمليه الطرح عليهما من خلال


• /* Sources Code - شفرة */

• return int (a-b);



• ويعود لنا بالقيمه وتسجل لـ f ، وفي السطر الثالث عشر


• /* Sources Code - شفرة */

• cout << f << endl;



• يتم تبديل f بقيمتها التي سجلت لها ، ولكن لماذا لا يتم طباعه f كماهي ، السبب هو
• أننا لم نضعها داخل علامات تنصيص ! عليك تجربه ما قلت لك وأن تقراء هذا الدرس
• أكثر من مره ولا تقراء فقط لتقراء ، إقراء لتفهم ..... ولا تستغرب فهذه هي طريقه
• سي ++ فمع الممارسه ستتعود ...
• ملاحظه :
• البرنامج الذي كتبناه في الأعلى إذا قمت بكتابه لاجل جمع عددين فأنت أحمق بالفعل
• ، اقصد ما انت عارف الطبخه :) هذا مجرد مثال للإجراءات وليس مثال لجميع عددين أو
• غيرهما ، إذا أردت جمع عددين او طرحمها أو ضربهما إستخدم البرنامج التالي



• /* Sources Code - شفرة */

• #include < iostream.h >
• int main()
• {
• int a, b;
• cout << "Enter Two Number\n";
• cin >> a;
• cin >> b;
• cout << a <<"\tand\t" << b << "\t=" << a+b << "\n" ;
• return 0;
• }







• فهذا هو الصحيح ، ولاداعي لشرحه فأنت ستفهم إذا فهمت ما سبق من هذا الدرس والدروس
• السابقه وباقي عندي ملاحظه فهي لو جربت تقسم عدد 22 على 7 رايح يطلع الناتج 3 ،
• وين الباقي وهو 1 ، لا تشغل بالك فهذه احد قوة سي ++ ، لاتستغرب ستعرف في درس
• ثاني كيف جات قوه وكيف نحسب الباقي..

• حاول كتابة برنامج يقوم بعمليه ضرب لثلاث قيم بإستخدام الإجراءات، إذا إستطعت فعل
• ذلك فأعتبر نفسك فهمت كل شئ في الدرس هذا، ولكن تذكر ان كل ماقلت لك في الدرس هذا
• والدروس السابقه ما هي الا القشور واللب يأتي بعد مسافه كيلو من هنا ;) ، تقدر
• تروح للدرس السادس .

• ----------------------------------------------------------------------------

• كيف تقسم عددين مع حساب المتبقي من القسمه ؟ كيف تقسم عددين دون حساب متبقي
• القسمة ؟ كيف تحسب باقي القسمة فقط ؟‍!

• البرنامج التالي ماذا يفعل ، حاول أن تعرف دون ترجمته



• /* Sources Code - شفرة */

• #include < iostream.h >
• int main()
• {
• int a,b;
• cout << "Enter Two Number" << endl;
• cin >> a;
• cin >> b;
• cout << a << "\t/\t" << b <<"\t=\t"<< a/b << endl;
• return 0;
• }





• إذا ماعرفت وش يصلح لازم ترجع لدروس السابقه والا ترى تحوس نفسك !

• البرنامج يقوم بطلب رقمين من المستخدم إما أن يدخل الأولف ثم مسافه ويدخل الثاني
• او يدخل الأول وثم يضغط إنتر ويدخل الثاني ، وعند إدخال الرقمين يقوم البرنامج
• بطباعه نتيجه قسمه العددين على بعض فمثلا نأخذ هذا المثال من موجه الدوس إثناء
• تشغيل البرنامج



• /* MS-DOS */

• Microsoft(R) Windows 98
• C)Copyright Microsoft Corp 1981-1998.(

• C:\WINDOWS\Desktop\MyJunk\C++\Debug>cpp1.exe
• Enter Two Number
• 22
• 7
• 22 / 7 = 3

• >C:\WINDOWS\Desktop\MyJunk\C++\Debug





• ملاحظه : العلامة " / " تعني قسمة

• نرى نتيجه 22 / 7 هي 3 ، وين راح الباقي واللي هو 1 ، السبب هو أننا في البرنامج
• طلبنا القسمه دون الباقي ، ولكن إذا أردنا طلب الباقي يجب ان نضع 22 % 7 وهذا
• ينتج لنا الرقم 1 فقط واللي هو الباقي ، ولو وضعنا 22 / 7 و 22% 7 رايح يطلع لنا
• الناتج والباقي ....
• مثال على حساب الباقي فقط
• كل ما علينا هو تغيير السطر الثامن ، وبالتحدد تغيير العلامة "/" ليصبح هكذا


• /* Sources Code - شفرة */

• cout << a << "\t%\t" << b <<"\t=\t"<< a%b << endl;



• لاحظ أننا ما نسينا نغيرها حتى في الرساله التوضيحيه :)
• يعني الشفره كلها تصير مثل كذا


• /* Sources Code - شفرة */

• #include < iostream.h >
• int main()
• {
• int a,b;
• cout << "Enter Two Number" << endl;
• cin >> a;
• cin >> b;
• cout << a << "\t%\t" << b <<"\t=\t"<< a%b << endl;
• return 0;
• }




• نشوف البرنامج من الدوس ، طبعا البرنامج يحسب الباقي فقط ، ما يجيب النتيجه ،
• يعني 22 % 7 تطلع 1 وهو متبقي القسمه وهذا تشوفه الحين مو مفيد لكن رايج تحتاج
• تطلع باقي القسمه دون الناتج في برامج كثيره جدا



• /* MS-DOS */

• Enter Two Number
• 22
• 7
• 22 % 7 = 1
• Press any key to continue





• طيب بقي سؤال واحد ، كيف تصلح برنامج يحسب الناتج والباقي سواء ، والله إذا ما
• عرفت تحلها فأنت ... والا بلاشي ، أقولك إذا ماعرفت تحلها يعني انا ما أعرف اشرح
• :)

• هذا هو الحل :


• /* Sources Code - شفرة */

• #include < iostream.h >
• int main()
• {
• int a,b;
• cout << "Enter Two Number" << endl;
• cin >> a;
• cin >> b;
• cout << a << "\t/\t" << b <<"\t=\t"<< a/b << "\nwalbagi ho\t" << a%b <<
• endl;
• return 0;
• }



• كل اللي عليك تشوف التغييرات في السطر الثامن ....... شكل البرنامج في الدوس مثل
• كذا



• /* MS-DOS */

• Enter Two Number
• 22
• 7
• 22 / 7 = 3
• walbagi ho 1
• Press any key to continue





• وهذا شكل ثاني لقسمه 21 / 3



• /* MS-DOS */

• Enter Two Number
• 21
• 3
• 21 / 3 = 7
• walbagi ho 0
• Press any key to continue



• المعاملات الحسابيه :-
• هي خمسة
• + الحمع
• - الطرح
• * الضرب
• / القسمه
• % لحساب الباقي من عمليه القسمه


• ----------------------------------------------------------------------------

• مراجعة :-

• في الدرس الأول
• عرفنا أن الأمر include ......
• سأذكر لك صيغه أخرى للأمر include وهي على الشكل


• /* Sources Code - شفرة */

• #include "iostream.h"



• وضعنا العلامة (") بدل من (<) ، أنا لا أنصحك بهذه الطريقه لأنها قد تسبب أخطأ في
• بعض المترجمات وقد تعمل مع أخرى ، ولاتنسى # في بدايه أمر include

• في الدرس الثاني
• كان كل كلامنا حول الكائن سي آوت cout وصيغته العاديه على الشكل



• /* Sources Code - شفرة */

• cout << "C++ is Cool \n " ;




• عندي نصيجه تقلل من وجع الراس وهي ضع علامة (;) في نهايه كل سطر داخل تحت الإجراء
• ()int main من بدايه القوس { الى نهايته } وكذلك في كل سطر تجده يبن قوسين القوس
• { و } .... هذه خذها قاعده ، ولكن هناك حالات شاذه مثل إستخدام
• #define
• لتعريف الثوابت ، لاتشغل بالك بهذا الآن

• الدرس الثالث
• كان كل حديثنا حول علامات الهروب مثل
• n\
• t\
• و برامج بسيطه توضح عمليه الجمع والطرح والقسمه ، و في النهايه تكلمنا عن علامات
• التعليق



• /* Sources Code - شفرة */

• /* E-Mail : condor@phreaker.net
• Msn Messnger : kondor_900@hotmail.com */





• الدرس الرابع
• أشهر صوره تنشاء في إجراءات وتطلب ، ولكن أستعجلنا فيه شويه ، والا الإجراءات
• موضوعها طويل ورايحين نتكلم قيه بدقه في درس ثاني .

• الدرس الخامس
• تابع للإجراءات

• الرس السادس
• حلينا مشكله ، وهي إظهار باقي القسمه ، وصممنا برنامج يطلب إدخال رقمين لإجراء
• عمليه حساب عليهما ، وأخذنا الأشكال الخمسه للمعاملات الحسابيه ...



• ----------------------------------------------------------------------------

• المتغيرات (Variable):
• المتغير هو قيمه (حروف او أرقام) يتم الإعلان عنها في أول البرنامج ويعطى لها إسم
• وتخزن في ذاكرة جهازك (عندما أقول لك ذاكرة فأنا اقصد الـRAM ) وعند يتم مقابله
• إسم اللمتغير يتم يبديله بقيمته التي اعلنت له في البدايه ، والهدف منها ما أقدر
• أحصره لك لأن أهدافها كثيره وماراح تعرفها الا مع الممارسه راح تكتشف حاجتك
• الماسه للإعلان عن متغيرات ، كل ماعليك الآن هو فهمها فيوم تحتاجها ، أما إذا كنت
• قد عملت على لغه برمجه غير سي ++ فاكيد عارف فائداتها.

• كيفيه الإعلان عن متغير :
• كل ماعليك لتعريف متغير هو ذكر نوعه وثم مسافه وثم إسمه وأخيرا فاصله منقوطه (;)
• مثال



• /* Sources Code - شفرة */

• int c;




• النوع هو integer يعني رقم ، وإسم المتغير هو c ويوجد إنواع للمتغيرات غير النوع
• int وهو كما يلي

• أنواع المتغيرات
• long int (عدد طويل)
• وهو يقبل من سالب 2147483648 الى موجب 2147483647

• unsigned long int (عدد طويل ولكن بدون علامة ، أي بدون علامة سالب والا موجب)
• من صفر الى 4294967295

• short int (عدد قصير)
• يقبل من سالب 32768 الى موجب 32767

• unsigned short int (عدد قصير بدون علامة)
• من صفر الى 65535

• char (متغير حرفي)
• من صفر الى 256

• float (عدد بعلامة عشريه)
• 12e-38 الى سالب 34e38

• double
• من 22e-308 الى سالب 18e308

• bool
• true (or) false

• هذا على نظام 32 بت أما عن الأجهزة القديمه التي تعمل على 16 بت فما أدري عنها ،
• ما اعتقد بقي أحد على أنظمه قديمه ، أكثر المبرمجين يستخدمون ويندوز 98 أو أحدث
• او ليون** :)

• ملاحظه :
• عند كتابه المتغير int فهذا يعني انه long int أو signed long int

• كما ذكرنا سابقا ان المتغير يحجز له مكان في ذاركة جهازك ، ولمعرفه هذه المساحه
• فالامر يختلف من نظام الى نظام آخر ، لمعرفه كم تحجز المتغيرات على جهازك عليك
• إستخدام sizeof لمعرفه ذلك ، على النحو التالي



• /* Sources Code - شفرة */

• # include < iostream.h>
• int main()
• {
• cout << sizeof(unsigned short int);
• return 0;
• }





• هذا البرنامج يقوم بعرض المساحه التي يحجزها المتغير unsigned short int مقاسه
• بالبايت byte
• وهذا يعرض الماسحه التي يحجزها المتغير ............. (أكمل الفراغ(




• /* Sources Code - شفرة */

• # include < iostream.h>
• int main()
• {
• cout << sizeof(bool);
• return 0;
• }





• شروط ونصائح يجب إحترامها لكاتبه أسماء المتغيرات :
• 1- ما يصلح تحط في الإسم مسافه
• 2- ما تحط إسم متغير وهذا الإسم محجوز في سي ++ مثل تحط إسمه return
• 3- أعلنت عن إسمه مستخدم حروف كبيتل وسمول لازم تستدعيه بنفس الأحرف مع التقيد
• بالكبيتل والسمول
• 4- ممكن تستخدم السرطه اللي على تحت (_) لتعبير عن مسافه بدل من وضع مسافه

• تعيين قيمة للمتغيرات :-
• سبق وان قلت أن المتغيرات لها قيمه ، وحنا اللي عرفناه الحين كله كيف نعلن عن
• متغير ونعطيه إسم ونوع فقط ، طيب وين قيمته اللي يحملها ...
• في الحقيقه القيمه يمكن أن يقوم مستخدم البرنامج بإدخالها ، أو من الممكن أن
• تحددها أنت في البرنانج ، وذلك راجع لعمل البرنامج ، مثلا على الشكل التالي قمنا
• بتحديد قيمه



• /* Sources Code - شفرة */

• int x=16;




• الحين تم تعين متغير من نوع integer وله الإسم x وقيمته هي 16
• هذا مثال آخر ، ولكن عن إعلان لمتغيرين ثم ضربهما في بعض



• /* Sources Code - شفرة */

• # include < iostream.h>
• int main()
• {
• long int a=10;
• long int b=10;
• cout << a*b < return 0;
• }





• لو اردنا المستخدم هو الذي يحدد القيمه للمتغير a و b نستخدم الكائن cin ، حاول
• فعل هذا ، أذكر أني حطيت مثال ممتاز في الدرس 6 راجعه إذا نسيت

• الكلمة الأساسية typedef :-
• مع الوقت وخصوصا إذا كنت بصدد كتابه برنامج كبير رايح تشوف أن كتابه unsigned
• short nint مثلا مملا وقد يحتمل حتى حدوث أخطأ وقد يصعب عليك تعديل المتغير هذا
• الى unsigned long int مثلا مستقبلا ....
• الحل هو إنك تنشئ إسم مرادف يعبر عن unsigned short int ولكن أقصر وسهل الحفظ ،
• إستخدم typedef لفعل هذا ، وكل ما عليك فعله هو كتابه typedef ثم نوع المتغير
• ومسافه وإسمه الجديد وأخيرا فاصله منقوطه ، مثال



• /* Sources Code - شفرة */

• typedef unsigned short int usi ;




• في هذا المثال نكون قد أنشأنا كلمة usi لتحل مكان unsigned short int

• يعني نقدر نكتب



• /* Sources Code - شفرة */

• usi x=16;




• بدلا من



• /* Sources Code - شفرة */

• unsigned short int x=16;




• وهذا مثال كامل



• /* Sources Code - شفرة */

• #include <iostram.h>
• typedef unsigned short int usi;
• int main()
• {
• usi x=16;
• cout << x << endl;
• return 0;
• }





-----------------------------------------------
| Copyright (C) 2001 THE DEATH GROUP Home Page |
| http://DEATHIN2005.TRIPOD.COM |
| ALSANJAK1@YAHOO.COM |
-----------------------------------------------

EOF

taoufyq
13-Sep-2006, 03:51 PM
chokran 3ala atawdi7at akhi alkarim