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

مشاهدة النسخة كاملة : من C إلى C++



PaPEr Cut
21-07-2002, 01:56 PM
مقدمة :


الدورة مخصصة لمن لديهم أساسيات في لغة السي و يريدون تطوير أنفسهم إلى لغة السي بلس بلس ..... و مع ذلك فإننا نبدأ الدورة بتذكير بأساسيات لغة السي ..... أي أن الالمام التام بهذه اللغة ليس شرط من شروط الالتحاق معنا في هذه الدورة .


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

سنبدأ الدورة مع بعض أساسيات لغة السي التي نحتاجها قبل الانتقال للسي بلس بلس ثم سنبدأ في الجزء الخاص بالسي بلس بلس .


منهج الدروة إن شاء الله (سيتم تحديثه مع التقدم في الدروس إن شاء الله) :


من C إلى C++

أ - تقديم :


1- المنهج (هذه الصفحة).

2-لمحة تاريخية (لمحة تاريخية عن اللغتين - للمهتمين فقط ! :)).

3-مقدمة برمجية عامة لابد منها .


ب-أساسيات لغة الـ C

(لا نستطيع البدء في تعلم لغة السي بلس بلس دون التطرق لبعض الأساسيات في لغة السي .... و لا أنسى أن أدعو الجميع لزيارة دروس الأخت زهرة النرجس في لغة السي في الموسوعة) :



1- البرنامج الأول .

2- شرح للبرنامج الأول .

3- الشكل العام للبرنامج .

4- تعريف المتغيرات .

5- شروط تسمية المتغيرات .

6- أمثلة لتعريف المتغيرات .

7- العمليات الحسابية الأساسية .

8- أساسيات القراءة و الكتابة .

9-الانتقال إلى C++ .


-الامتحان الأول .


جـ - دروس متقدمة في سي-سي بلس بلس

(هنا لا يهمني إن كنت تريد تعلم السي أو السي بلس بلس فالأوامر متطابقة ):

1- التعرف على الشرط IF .

2- التعرف على Switch .

3- أوامر التكرار (For - While) .

4- التعرف على المصفوفات .

5- كيف تنشأ دالة بنفسك ؟


-الامتحان الثاني .


د - أساسيات لغة السي ++ :

1- لماذا سي ++ ؟

2- البرمجة الشيئية .

3- تعريف الـ Class .


-الامتحان النهائي (مشروع التخرج) .

PaPEr Cut
21-07-2002, 01:58 PM
ولدت لغة البرمجة سي في بدايات السبعينيات الميلادية مع بداية ظهور نظام التشغيل يونكس.


لغة السي هي وليدة للغة المسماة[Johnson 73]B وهذه الأخيرة هي وليدة للغة BCLP [Richards 79] . طورت لغة السي كثيراً سنة 1972 ثم تطورت أكثر ما بين 1977 و 1979 تبعاً لتطور نظام اليونكس في هذه الفترة .في منتصف هذه الفترة الثانية انتشرت لغة السي بشكل واضح وظهر لها كتاب يشرحها هو The C Programming Language أو ما يسمى عادة الكتاب الأبيض أو K&R . في منتصف الثمانينات الميلادية وضعت المقاييس العالمية لهذه اللغة فأصبحت ANCI C أو السي القياسية .


* إلى من تنسب لغة السي؟

إلى دينيس ريتشي dmr@bell-gabs.com


ْْْْْْْْْْْْْْْْْْْْْْْْْْْْْ


بداية السي بلس بلس :


و مع تطور البرامج و زيادة عدد الأسطر في كل برنامج بدأ المبرمجون يفكرون في تطوير للغة السي .... نحن بحاجة للغة تعطيني القدرة على إعادة استخدام أكوادنا القديمة ، طريقة تسمح باشتراك مجموعة كاملة من المبرمجين في مشروع واحد مع الحفاظ على السرية و الأمان ، كما أننا بحاجة لطريقة برمجية تكون قريبة من التفكير البشري ===> هنا ظهرت الحاجة للغة السي بلس بلس ...


اخترعت هذه اللغة على يد المبرمج Bjarne Stroustrup في عام 1979 في معامل بيل في نيوجرسي ....

في البداية ،أطلق على هذه اللغة الاسم "C with Classes" ثم تم اعتماد اسم C++ في عام 1983

لغة السي بلس بلس تحتوي على جميع خصائص لغة السي التقليدية (بالإضافة للمزيد من الخصائص بالطبع) .

بعد ذلك تم تطوير الصيغة القياسية المعتمدة لهذه اللغة بالطبع :حيث كانت أول محالة لذلك في عام 1994 .

PaPEr Cut
21-07-2002, 01:59 PM
ما هي شروط تسمية المتغيرات؟


· أن يتكون هذا الاسم من حروف هجائية و أرقام و الحرف الخاص _ (underscore)


· أن يكون أول حرف هو أحد الأحرف الهجائية الانجليزية المعروفة أو _ على أنه يعتبر البدء بـ _ محدود الاستخدام لأن نظام السي نفسه يستخدمه لتسمية متغيراته وعلى هذا ينبغي تجنب استخدامه


· أغلب أنظمة السي تفرق بين الأحرف الكبيرة و الصغيرة فمثلاً A تختلف عن a ولكل منهم شفرته الخاصه


أقصد بالشفرة هنا التشفير المستخدم في أي حاسب آلي فمثلاً الحرف a له رقم يعبر عنه ألا و هو 65 على حسب التشفير ASCII وهو التشفير المستخدم في الحاسبات الشخصية


· أن لا يكون هذا الاسم هو أحد الاسماء المحجوزة في نظام السي مثل كلمة int


· أن لايكون اسما لأحد الدوال المعروفة في السي مثل printf


· أن لا يزيد طوله على حد معين و هذا الحد المعين يختلف من نظام سي لآخر و في السي القياسيANCI C فإن هذا الحد هو 31 حرف


أمثلة لمتغيرات صحيحة :


K


_id


imanidentifier2


so_am_I


ولكن ليس:


not#me لأنه يحتوي على #


101_south لأنه يبدأ برقم


-plus لأنه يحتوي على – و ليس _



الكلمات المحجوزةkeywords



align="center">
Auto
break
case
char
const
continue

Default
do
double
else
enum
extern

Float
for
goto
int
if
Register

return
short
signed
sizeof static switch

Struct
typedef
union unsigned void Voltaic

while long





***بقي أن نذكر أن هذه الشروط يجب استخدامها كذلك عند تسمية الدوال التي تعرفها بنفسك أو ما يطلق عليه مسمى identifier بشكل عام وهو يشمل المتغيرات و اسماء الدوال وأسماء انواع البيانات التي تعرفها بنفسك و غيرها.

PaPEr Cut
21-07-2002, 02:04 PM
مما يتكون أي برنامج سي؟


إن أي برنامج بلغة سي يتكون من ملف أو أكثر . وتنقسم الملفات إلى نوعين:


· :Source files


وتحتوي على شفرات البرنامج وهو الملف الذي كتبته في البرنامج الأول ويتكون من مجموعة من الدوال أحدها الدالة main التي يبدأ عندها التنفيذ. بعد كتابة هذا النوع من الملفات على محرر النصوص فإننا نختم الاسم بـ .c للدلالة على نوعه .يمكن أن يكون لدينا أكثر من source file في البرنامج الواحد وبالطبع فإن هناك طريقة ما لربطهم مع بعضهم تجدها مفصلة في الفصول اللاحقة إن شاء الله.


· Header files:


يمكن أن يحتوي البرنامج في لغة سي على أكثر من header file وقد لا يحتوي على أي منها كما أن هناك نوع من هذه الملفات تكون معرفة مسبقاً وملحقة بنظام السي مثل stdio.h و string.h و conio.h و غيرهم ويتم ربط هذا النوع من الملفات مع النوع الأول عن طريق استخدام الأمر #includeثم اسم الملف محصورا بين قوسين مثلثين < اسم الملف> . يمكنك كتابة ملفات من هذا النوع بنفسك كما سنرى لاحقاً إن شاء الله وفي هذه الحالة ستستخدم نفس الأمر #include لربط ملفك ولكنك ستكتب اسم الملف بين علامتي تنصيص عوضاً عن الأقواس المثلثة "اسم الملف ". سنتطرق لهذا النوع من الملفات بشكل مبسط في دروس لاحقة.


ما هو الشكل العام للدالة؟


كل دالة هي عبارة عن جزءين:


· Header


1. يحتوي على أي preprocessing directive وهذه ما هي إلا الجملة #include وأخواتها ومنهن #define والتي سنتعرف عليها قريباً وهي بشكل عام أي سطر يبدأ بالعلامة #.


2. يحتوي على اسم الدالة ونوعها والمتغيرات التي تقبلها .


· Body


وهو أساس كل دالة وجسمها و يحتوي على الجمل المنفذة و تعريف المتغيرات .تنتهي كل من هذه الجمل بفاصلة منقوطة. ويكون جسم الدالة محصورا بين قوسين { }.


ملاحظات عامة مهمة:


· الجملة #include تجعل ال (preprocesser) يأخذ نسخة من ال (header file) ويضعها في المكان الذي كتبت فيه هذه الجملة.إن الأقواس المثلثة حول اسم الملف تخبرنا بأن هذا الملف موجود في المكان المعتاد.ما هو هذا المكان المعتاد؟الجواب يختلف من نظام لآخر المهم أن هذا المكان لا يعنينا نحن لأن النظام هو المسؤول عن إحضاره ولكن أوردت هذه الملاحظة حتى تكون مطلعاً على ما يحدث فعلاً. أما علامات التنصيص حول اسم الملف فإنها تستخدم عندما تكتب أنت هذا الملف بنفسك .


· عند استخدامك للتعليقات أو ال(comments) في برنامجك وهي الجمل الغير مقروءة من قبل المترجم و المحصورة بين /* */ فإنك تستطيع كتابتها في أكثر من سطر أي أن تبدأ بسطر ثم يطول معك التعليق لتصل إلى السطر التالي ثم تغلق التعليق بالعلامة /* ولكن لا تستطيع استخدام تعليق داخل تعليق أي تستخدم /* */ داخل تعليق آخر.فعلى سبيل المثال:



/* this is


a comment */


/* but /*this*/one is not */

حلوة ودلوعة
29-09-2002, 07:45 PM
مشكوووووور على المجهود الطيب...

لكن انا ابغى اعرف كيفية استخدام التكرار في كتابة البرنامج ..

يعني متى استخدم for و while و do...while

amro_ka
29-09-2002, 11:10 PM
for (int i =0;i<10;i++)
{
//الجملة المطاوب تنفيذها حتى تصل اللووب إلى 9
}
int i = 0 لتعريف أى بأنها رقم صحيح ووضع قيمة إبتدائية بأنها تساوى صفر مع ملاحظة أنه إذا تم تعريف أى قبل ذلك ستكون صحيحة أيضا كما بهذا المثال
int i;
for (i=0;i<10;i++)
{
}
شروط عمل اللوب for
1- أن يكون لها قيمة إبتدجائية كما بالمثال وهى تساوى صفر
2-توضع فصلة منقوطة بعد الشرط الإبتدائى
3-وضع متى ستتوقف الللووب وهو كما فى المثال عندما تصل أى أن تكون أقل من 10 أى رقم 9
4-فصلة منقوطة مره أخرى
5-زيادة أى بقيمة معينة ممكن تكون 1 أو5 أو 20على حسب الإستخدام ويمكن بالنقص أيضا أو الطلب
توضع هذه الجمل مابين قوسين دائريين كما بالمثال
ملاحظة:
سيتم تنفيذ مابيين القوسين المعرجيين حتى تتوقف اللوب عندما يتحقق أن أى أقل من ولا تساوى 10 أى 9 وسيتم تنفيذ مابين القوسين المتعرجيين 10 مرات لأنه يبدأ من الصفر
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
ملاحظة هامة:
إذا نسيتى وضع الأقواس النتعرجة الفتح والغلق سيتم إعتبار الجملة التالية مباشرة لجملة الفوور هى جسم الفوور أى هى اللتىسيتم تنفيذ شرط الفوور عليها كما بالمثال التالى
for(i=10;i>0;i--)
a=i;
c=a*2;
فى هذا المثال ستقوم قيمة إيه بالتغير حسب قيمة أى حتى تتوقف اللووب وتصل قيمة أى بصفر بعد ذالك ستأخذ قيمة إيه وتضرب فى إثنان ثم توضع القيمة فى سى
أما إذا كانت الأقوس كالمثال التالى
for(i=10;i>0;i--)
{
a=i;
c=a*2;
}
سيتم تنفيذ الجملتين مع فى كل دورة لووب حتى تنتهى اللووب وتخرج إيه بقيمة وسى أيضا بقيمة
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
هناك شىء أيضا يسمى
nested loop
ولكن شرحه أطول شوية إن فهمتى من شرحى وأعجبك أشرح لك الباقى
nested loop و while و do while

-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------

amro_ka
29-09-2002, 11:36 PM
وضعته أيضا فى ملف وورد حتى إذا كان هناك بعض الأخطاء أوأقواس خطأ ستكون صحيحة فى هذا الملف

حلوة ودلوعة
30-09-2002, 06:00 PM
مشكووووووووووور على مجهودك الطيب...

ويعطيك العافية...

لكن اذا جيت اكتب برنامج.. والبرنامج يتطلب عمل تكرار ..
على أي أساس استخدم for أو while أو do while...

يعني ايش الفرق بينهم؟؟...

amro_ka
01-10-2002, 10:34 PM
الفرق بين for loop , while & do while
الفرق منطقى
أولا نتفق أن do while و while وجهان لعملة واحدة
فمعناهم طالما أن الشرط يتحقق قم بتنفيذ هذه الأوامر حتى تصل إلى مرحلة عدم تحقق الشرط فينتقل إلى باقى الأوامر اللتى بعد التكرار وبالتالى عدد مرات التكرار غير معروفة من الممكن تكون 5 أو 10 أى عدد من المرات حتى يتحقق الشرط


ولا يوجد فرق بين do while و while
الإثنان شىء واحد ولكن كل شخص يفضل واحدة منهما على حسب راحته للصيغة أو على حسب التعود و أيضا يمكن تحويل أى while إلى اليغة dp while و إذا نظرت لمعناهم ستجديهم متقاربين تماما (طالما الشرط يتحقق قم بتنفيذ هذه الأوامر while ) و ( أفعل هذه الأوامر طالما الشرط يتحقق do while)



أما for
فعدد مرات التكرار معلومة حيث أنه من الشروط الأساسية لل for أن
شرط التوقف للتكرار يكون رقم معروف قيمته وليس مجهول القيمة


لاتنسى بعد إجراء أى تكرار أن تقومى بإجراء مراجعة لعدد مرات التكرار حتى لا تزيد أو تقل عن المطلوب

نجلا العيون
02-10-2002, 11:21 AM
هلا ياجماعه.... انا عضوه جديده بالمنتدى :) واتمنى انى احصل الترحيب من الجميع.....
اخوى الجاسوس .... مشكور وماتقصر الدروس حلوه وبسيطه .... لكن بليز اذا سمحت يوم اتوصل شرح
data structure and specialy the--- STACK--- plzzz explain it in more details .....

ع فكره انا عندى خلفيه في سي ++ مع انى مادرست السي .... لكن الحمد الله انا مشيه فيها .....
ومشكور ياخوى وعسى مااكون ثقلت عليك بطلبي هذا ..... ^_^

عبد الحليم حافظ
04-10-2002, 01:56 AM
ان شايف انه اسهل و اوضح طريقة هي طريقة ال"while"!

e.g.


int count=0; //this int "count" we will make it increase till 10!
// u can put any number! this is just an example!

//note: حتى الان لم نفعل شيئ

//now we start the loop!

while (count<=10)
{
// هون...(بين القوسين) بتحط الشي المهم البدك ايا يتكرر 10 مرات

// انا بدي اطبع هادي الجملة "I hate c++"
cout<<"I hate c++"<<endl;

//الان الخطوة مهمة! لازم تزيد "count" بمقدار "1" بس

count++; //this will increase "count" by "1"!

}

كل الي بين الاقواس رح يتكرر 10 مرات، "count" رح تزيد كل مرة لحد العشرة!
لما "count" تصير 10 الشرط تاع "while" رح يصير غلط، فتطلع بره الووب!

ps: i wrote that post so fast! i didn't check!
ps: i will explain stack later, it's easy!

http://members.lycos.co.uk/ashit3aj/aj/3aj_signature_ver_3.gif