-
PDA

عرض كامل الموضوع : لمحة تاريخية في سي++


ملك الهكرز
03/09/2005, 18:41
ولدت لغة البرمجة سي في بدايات السبعينيات الميلادية مع بداية ظهور نظام التشغيل يونكس.

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

* إلى من تنسب لغة السي؟
إلى دينيس ريتشي ////////////// الروابط الي بيحطوها الأعضاء بيقدر فقط الأعضاء يشوفوها ، اذا مصرّ تشوف الرابط بك تسجل يعني تصير عضو بأخوية سوريا بالأول -///////////////

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

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

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

اخترعت هذه اللغة على يد المبرمج Bjarne Stroustrup في عام 1979 في معامل بيل في نيوجرسي ....
في البداية ،أطلق على هذه اللغة الاسم "C with Classes" ثم تم اعتماد اسم C++ في عام 1983
لغة السي بلس بلس تحتوي على جميع خصائص لغة السي التقليدية (بالإضافة للمزيد من الخصائص بالطبع) .
بعد ذلك تم تطوير الصيغة القياسية المعتمدة لهذه اللغة بالطبع :حيث كانت أول محالة لذلك في عام 1994 .

ملك الهكرز
03/09/2005, 18:42
مقدمة برمجية في السي ++


ماهي البرامج؟

تكتب البرامج حتى يتمكن المبرمج من إعطاء أوامره للآلة بتنفيذ عمل محدد أو لحل مشكلة ما.

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


ما هو الحاسب الآلي ؟

الحاسب ما هو إلا جهاز رقمي مكون من ثلاث مكونات أساسية هي :المعالج الدقيق والذاكرة و أجهزة الادخال و الاخراج.المعالج هو الجزء المسؤول عن التعامل مع الأوامر التي تكون مخزنة أصلا في الذاكرة مع البيانات و تمثل أجهزة الادخال و الاخراج الأجهزة التي تراها متصلة بجهازك وهي لوحة المفاتيح و الطابعة.
التحرير, الترجمة و الربط:
إن القاسم المشترك بين جميع لغات البرمجة هي العناصر التالية:

· محرر النصوص أو ال(editor)

· المبرمج أو ال(compiler)

· نظام التشغيل أو ال(operating system)

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

ملك الهكرز
03/09/2005, 18:43
بيئة العمل في سي:


إن لهذه اللغة الرائعة بيئة عمل متكاملة حيث تجمع لك هذه البيئة كل ما تحتاجه من أدوات لتعمل كمبرمج محترف.تتكون هذه البيئة من العناصر البرمجية الأساسية المذكورة في الدرس الأول وهي محررالنصوص والمترجم.

هناك العديد من البرامج الجاهزة التي تمثل بيئة عمل متكاملة للسي و يعتمد هذا الموقع على استخدام البرنامج الخاص بشركة ميكروسوفت ألا وهو microsoft visual C++ وهو أحد البرامج المكِونة لمجموعة microsoft visual studio.

لنتعرف سويا على هذا البرنامج:


إذا كان البرنامج جاهزا عندك الآن فابدأ بتشغيله لنتعرف على أهم مكوناته.حاول أن تتنقل بين قوائمه المختلفة
لتتعرف على هذه القوائم ابدأ بكتابة برنامجك الأول متبعا الخطوات التالية:

· من قائمة ملف اختر الأمر جديد

· من التبويبة مشروعات اختر win32 console application

· اكتب اسما لمشروعك في المكان المخصص لذلك واختر المجلد الذي تريد أن تخزّن برنامجك فيه

· اضغط موافق

· من قائمة ملف اختر الأمر جديد مرة أخرى

· من التبويبة ملفات اختر c++ source file

· اكتب اسما لبرنامجك في المكان المخصص

· اضغط موافق

· و الآن ابدأ بكتابة السطور التالية على الصفحة البيضاء التي أمامك




/* File hello */

#include

int main(void)

{

printf("hello world!n");
return 0;

}



· من قائمة (build) اختر الأمر (compile) ثم انتظر قليلا و راقب ماذا يكتب لك البرنامج في أسفل النافذة و هو دليلك لوجود أخطاء في الأوامر البرمجية أو عدم وجود أخطاء

· من قائمة (build) اختر الأمر build وانتظر قليلا حتى ينتهي البرنامج من ربط برنامجك

· الآن من قائمة (build) اختر الأمر execute

· سوف تفتح لك نافذة سوداء تفحّص ما كتب فيها

سوف تجد الشرح التفصيلي لهذا البرنامج في الدرس التالي

ملك الهكرز
03/09/2005, 18:43
شرح للبرنامج الأول






/* File hello */

#include

int main(void)

{

printf("hello world!n");
return 0;

}






/* File hello */



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



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




#include





إن هذه الجملة موجِه للمترجم وتأمره بإحضار نسخة من ملف المدخلات و المخرجات القياسية و الموجود ضمن مكتبة تابعة لبيئة سي . إن الهدف من هذه الخطوة هو أننا سوف نحتاج هذا الملف عند استخدامنا للأوامر الجاهزة الموجودة فيه و المتعلقة بالتعامل مع وحدات الإدخال و الإخراج القياسية وهي لوحة المفاتيح(إدخال)و الشاشة(إخراج).إذا تذكر دوما كتابة هذه الجملة عندما تريد استخدام الأمرين printf( ) أو scanf( ) اللذين سنأتي على شرحهما لاحقاً. الواقع أن هناك ملفات أخرى جاهزة يمكن استخدامها منها و وغيرهم الكثير و سنقوم بشرح كل واحدة عندما نحتاج إلى استخدامها.



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




int main(void)



كل برنامج يحتوي على دالة اسمها main يبدأ عندها تنفيذ البرنامج .الأقواس بعد كلمة main تخبر المترجم بأن هذه دالة .int هي كلمة محجوزة لاستخدام المترجم أي لا يمكنك أنت تعريف أي متغير بهذا الاسم وهي هنا تخبر المترجم بأن القيمة التي سترجعها الدالة هي من نوع int وسوف نتعرف على هذه الأنواع فيما بعد.

الكلمة المحجوزة void تخبرنا بأن الدالة لا تأخذ متغيرات(arguments).



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




{



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



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




printf( );



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



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




printf("hello worldn");





هذا نداء للدالة printf( ) مع متغير واحد هو سلسة الحروف “hello, world!n”

إن الثابت من نوع string في سي هو سلسة من الحروف بين علامات التنصيص .لاحظ أن علامات التنصيص عبارة عن علامتي تنصيص وليس علامة واحدة. هذه الجملة تحدد ماسيطبع على الشاشة.آخر حرفان من هذه الجملة هما n وتقرأ(backslash n) وهما يمثلان حرفاً واحداً في السي اسمه newline إنه حرف غير قابل للطباعة وتأثيره هو تحريك المؤشر إلى السطر التالي .أي أننا عندما ننادي هذه الدالة مرة أخرى فإن الحروف ستبدأكتابتها من السطر التالي.لست ملزماً باستخدام هذا الحرف إذا كنت لا تريد أن ينتقل المؤشر إلى السطر التالي. لاحظ أن هذا السطر مختوم بفاصلة منقوطة.إن جميع السطور التي تحتوي على جمل منفذة

(statements)تنتهي بهذه الفاصلة و كذلك السطور التي تحتوي على تعريف لمتغيرات(declarations).



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




return 0;



القيمة الصحيحة(integer) صفر هي القيمة التي ترجعها الدالة main( ) لنظام التشغيل.هذا الصفر يعني أن الدالة اكتملت بشكل صحيح.





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




}



هذا القوس المغلق من جهة اليمين هو لإقفال القوس الأول المفتوح من جهة اليسار وهو ينهي الدالة

ملك الهكرز
03/09/2005, 18:44
مما يتكون أي برنامج سي؟

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

· :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 */

ملك الهكرز
03/09/2005, 18:45
ماهو المتغير؟

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

أنواع المتغيرات:

هناك عدة أنواع للمتغيرات و حتى تعرّف متغيراً ما يجب أن تحدد نوعه من هذه الأنواع
int وهو للأرقام الصحيحة أي التي لا تحتوي على فاصلة عشرية

double أو floatوهي للأرقام التي تحتوي على فاصلة عشرية أو التي كتبت باستخدام ال e مثل 3E2

char وهو للحروف الهجائية و غيرها من الرموز التي تجدها على لوحة مفاتيحك

اقرأ المثال التالي



#include



int main (void)

{

int inches,feet;



feet=6;
inches=12*feet;
printf("feet=%dn inches=%dn",feet,inches);

printf("feet=%dn",feet);

printf("inches=%dn",inches);

return 0;

}



اكتب هذا البرنامج على أحد محررات النصوص ثم ترجمه compile ثم نفذه run كما هو مشروح في الدروس السابقة ولتفهم هذا المثال اقرأ السطور التالية:

في المثال السابق عرّفنا متغيريين من نوع int الأول هو inches والثاني هو feet ولأنهم من نفس النوع فإننا فصلنل بينهم بفاصلة لاحظ أنه بعد أن كتبنا جملة التعريف ختمنا السطر بفاصلة منقوطة وبعد تعريف المتغيرات خزّنا في المتغير feet القيمة 6 ثم خّنا في المتغير inches العبارة الرياضية 12*feet ونعني هنا أننا نريد تخزين 12 مضروباً في قيمة المتغير feet ويمكنك أن تحاول تغيير عملية الضرب إلى أي عملية أخرى حاول استبدال رمز النجمة بالرموز التالية + و-و / و % وأعد ترجمة البرنامجcompilation وراقب ما يحدث في كل مرة

+ : عملية الجمع العادية 1+1 =2

- : عملية الطرح العادية 1-1=0

/ : عملية القسمة العادية 4/2 =2 ولكن يجب أن تنتبه هنا إلى أنه إذا كان المتغير الذي تخزن فيه ناتج عملية القسمة هو من نوع int وهذا النوع كما ذكرنا سابقاً هو للأرقام بدون فاصلة عشرية فإن الناتج سيكون بدون فاصلة عشرية أيضاً أي أن 7/2=3 وليس 3.5 كما هو متوقع و لكن إذا خزنت هذا الناتج في مخزن من نوع float فإن الناتج سيكون دقيقاً ولكن لاحظ أيضاً أنه يجب أن تكتب 7.0/2.0 وليس 7/2 إذا كنت تريد أن يكون الناتج كاملاً

في نهاية البرنامج كتبنا قيم المتغيرات على الشاشة باستخدام الأمر printf

Printf كيف تعمل؟

سنشرح هنا بشكل مختصر على المثال السابق و نستطرد في الشرح في درس لاحق:

لاحظ و جود جزئين داخل علامتي التنصيص لهذه الدالة الجزء الأول هو الذي يحدد ما يطبع على الشاشة فعلاً و الجزء الثاني يحتوي على متغيرات فقط أو قيم ثابتة .إن ما يحدث فعلاً أن الجزء الأول يكتب كما هو إلا أن العلامات d% تستبدل بقائمة المتغيرات على أساس ترتيبها يعني أول %dتأخذ أول متغير و يكتب بدلاً عنها على الشاشة قيمة هذا المتغير.

%d تتغير على حسب نوع المتغير المراد كتابته فمثلاً نكتب %f إذا كان المراد كتابة متغير من نوع float أو double

ونكتب %c لكتابة الحروف ونكتب %s لكتابة سلسلة من الحروف.

ملك الهكرز
03/09/2005, 18:45
ما هي شروط تسمية المتغيرات؟

· أن يتكون هذا الاسم من حروف هجائية و أرقام و الحرف الخاص _ (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 بشكل عام وهو يشمل المتغيرات و اسماء الدوال وأسماء انواع البيانات التي تعرفها بنفسك و غيرها.
__________________

ملك الهكرز
03/09/2005, 18:46
مع تحياتي الكون :D

اميرة الظلام
06/09/2005, 19:07
:D

ملك الهكرز
06/09/2005, 19:10
اهلين اميرة الظلام :D
ميرسي على الرد :D

Syria Man
07/09/2005, 04:03
شكراً هكرز
الله يعطيك العافية
:D :D :D

ميخوووووووو
02/10/2005, 01:50
شكرا كتير لألك يا ملك الهكر


كل يوم موضوع حلو و مفيد

dampi
22/12/2005, 03:06
موضوع حلو ياملك الهكرز

شكررااا لك

الله معك

soryaya
01/01/2006, 15:44
تعرف يا ملك الهاكرز تعمل برامج بالسي تشتغل في الوندوز

soryaya
01/01/2006, 15:45
انا بصراحة ماعندي مصادر كافية لهيكي شي
كل مصادري تعلم لغة سي القياسية واللي ما تنفع بالبرمجة المتقدمة لعمل تطبيقات

henry6600
05/01/2008, 20:57
thanksss