متيكو المدير والمشرف
المدير العام الجنس : عدد المساهمات : 590 تاريخ الميلاد : 02/11/1989 تاريخ التسجيل : 28/08/2009 العمر : 35 الموقع : www.matti-king.blogspot.com العمل/الترفيه : يشرف عالمنتدى ويدرس المزاج : تعبان | موضوع: تعلم لغه c++ بطريقه عجيبه الجمعة فبراير 25, 2011 12:44 am | |
| لسلام عليكم ورحمه الله اليوم اود ان ارغب في اعطاءكم بعض الدروس الابتدائيه من لغه السي بلس بلس ومنها قد تقودكم الي اعترافها
مقدمة إلى البرمجة بلغة السي بلس بلس
تعتبر لغةC++ من أشهر اللغات التي تتمتع بطابع القوة والمرونة لإنتاج أسرع برامج وأفضلها أداءاً. وعلى الرغم من وجود العديد من لغات البرمجة الأخرى إلا أنها تفتقر شمولية لغة C++ وقوتها . فاللغة C++ تتميز بقابليتها على معالجة التطبيقات الكبيرة والمعقدة، والقوة في صيانة البرامج المكتوبة بها مما يوفر وقتاً في تصميم البرامج وتطويرها . تعتبر اللغة C++ امتداداً للغة C. وقد أنشأها Bjarne Stroustrup عام 1979 م، وكانت تسمى حينها C مع فئات( C with classes)، وتغير اسمها إلى C++ في العام 1983م. تعتمد اللغة C++ أسلوب البرمجة كائنية المنحى Object Oriented Programming، والذي يعرف اختصاراً بـ (OOP)، والذي تم تطويره بسبب قيود كانت أساليب البرمجة القديمة المتمثلة في اللغات الإجرائية تفرضها على المبرمجين. ولكي نتعرف على طبيعة تلك القيود يجب أن نلقى الضوء على ما يحدث في اللغات الإجرائية. اللغات الإجرائية: لغات Pascal،C ،Basic و Fortran وغيرها من لغات البرمجة التقليدية هي لغات إجرائية (Procedural). أي أن كل عبارة في اللغة هي عبارة عن تعليمة للحاسوب أن ينفذ شيئاً ما : أحصل على دخل أو أجمع أرقام الخ..… . لذا نجد أن البرنامج المكتوب بلغة إجرائية هو عبارة عن لائحة من التعليمات. لا تبدو هنالك مشكلة مع البرامج الإجرائية الصغيرة، فالمبرمج ينشئ لائحة التعليمات ويقوم الحاسوب بتنفيذها. ولكن مع كبر حجم البرامج لا تعود لائحة من التعليمات فعالة حيث يصعب فهم برنامج يتألف من مئات من العبارات إلا إذا كانت مقسمة إلى أجزاء أصغر، لذا تم اعتماد أسلوب الدالات (Functions) والإجراءات (Procedures) كوسيلة لجعل البرامج أسهل للقراءة والفهم، حيث تمتلك كل دالة في البرنامج واجهة محددة، وتنفذ هدفاً محدداً. ولكن المشكلة ما تزال قائمة : مجموعة من التعليمات تنفذ مهاماً محددة. و مع تزايد حجم البرامج وتعقيدها، يظهر ضعف الأسلوب الإجرائي، حيث تصبح البرامج الضخمة معقدة إلي حد كبير. من أهم أسباب فشل اللغات الإجرائية هو الدور الذي تلعبه البيانات فيها، حيث تعطى البيانات أهمية ثانوية على الرغم من أنها هي السبب في وجود البرامج، ويكون التشديد على الدالات التي تعمل على هذه البيانات، حيث يتم تعريف البيانات خارج أي دالة لكي يصبح بالإمكان الوصول إليها من كل الدالات في البرنامج، لذا غالباً ما تكون البيانات عرضة للتغيير أو التعديل الخطأ. وعلى الرغم من أن هنالك بعض اللغات كـ Pascal وC تعرف متغيرات محلية (Local )، وهي متغيرات معرفة في دالة واحدة. لكن المتغيرات المحلية غير مفيدة للبيانات المهمة التي يجب الوصول إليها من عدة دالات في البرنامج. أيضاً هناك مشكلة طريقة تخزين البيانات بسبب إمكانية عدة دالات للوصول إليها. لا يمكن تغيير ترتيب البيانات من دون تغيير كل الدالات التي تتعامل معها. وإذا أضفنا بيانات جديدة نحتاج لتعديل كل الدالات حتى تستطيع هذه الدالات استعمال هذه البيانات الجديدة . غالباً ما يكون تصميم البرامج الإجرائية صعباً، لأن مكوناتها الرئيسية (الدالات) عبارة عن بنية بيانات لا تقلد العالم الحقيقي جيداً .و يصعب في اللغات الإجرائية إنشاء أي نوع بيانات جديد بخلاف الأنواع المعرفة أصلاً في تلك اللغات ، لكل هذه الأسباب تم تطوير الأسلوب الكائني المنحى. الأسلوب الكائني المنحى:- الفكرة الأساسية وراء اللغات كائنية المنحى هي دمج البيانات والدالات التي تعمل على تلك البيانات في كينونة واحدة تسمى كائن (Object)، وعادة تزود دالات الكائن -والتي تسمى أعضاء دالية (Member functions)- الطريقة الوحيدة للوصول إلي البيانات، لذا تكون البيانات محمية من التعديلات الخطأ ويقال أن البيانات ودالاتها مغلفة (Encapsulated) في كينونة واحدة. مميزات اللغات كائنية المنحى : هنالك تطابق بين الكائنات في البرمجة وكائنات الحياة الفعلية، فالعديد من الكائنات الفعلية لها وضعية ( خصائص يمكن أن تتغير ) وقدرات (أشياء يمكن أن تقوم بها). في C++ تسجل بيانات الكائن ووضعيته كما تتوافق أعضاءه الدالية مع قدراته، تدمج البرمجة كائنية المنحى المرادف البرمجي للوضعيات والقدرات في كينونة واحدة تسمى كائن النتيجة لذلك كينونة برمجية تتطابق بشكل جيد مع الكثير من كائنات الحياة الفعلية. الفئات والوراثة (Inheritance): الكائنات في OOP هي مثيلات من الفئات، حيث يمكننا تعريف كثير من الكائنات تابعة لفئة معينة، وتلعب دور خطة أو قالب يتم إنشاء الكائنات على أساسه، وهي التي تحدد ما هي البيانات والدالات التي سيتم شملها في كائنات تلك الفئة. لذا فالفئة هي وصف لعدد من الكائنات المتشابهة. وتؤدى فكرة الفئات إلي فكرة الوراثة، حيث يمكن استعمال فئة OOP كأساس لفئة فرعية واحدة أو أكثر تسمى الفئة القاعدة (Base class)، ويمكن تعريف فئات أخرى تتشارك في خصائصها مع الفئة القاعدة ولكنها تضيف خصائصها الذاتية أيضاً، تسمى هذه الفئات المشتقة (Derived classes). قابلية إعادة الاستعمال Reusability: بعد كتابة الفئة يمكن توزيعها على المبرمجين لكي يستعملوها في برامجهم ، يسمى هذا الأمر قابلية إعادة الاستعمال Reusability ويزود مفهوم الوراثة ملحقاً هاماً إلي فكرة إعادة الاستعمال حيث يستطيع المبرمج أخذ فئة موجودة أصلاً ومن دون تغييرها يضيف ميزات وقدرات جديدة إليها وذلك من خلال اشتقاق فئة جديدة من الفئة القديمة. إنشاء أنواع بيانات جديدة:- من أهم فوائد الكائنات أنها تعطى المبرمج وسيلة لإنشاء أنواع بيانات جديدة، كالأرقام المركبة أو الإحداثيات ثنائية الأبعاد أو التواريخ أو أي نوع من أنواع البيانات قد يحتاج المبرمج إلي استعمالها. تعدد الأشكال والتحميل الزائد : Polymorphism and overloading يسمى استعمال الدالات والعوامل في أساليب مختلفة وفقاً لما يتم استعمالها عليه بتعدد الأشكال. لا تضيف اللغة C++ إمكانية إنشاء أنواع بيانات جديدة فقط، بل وتتيح أيضاً للمبرمج القدرة على العمل على أنواع البيانات الجديدة تلك باستعمال نفس العوامل التي تستخدمها الأنواع الأساسية كـ + أو = ويقال عندها أنه تم تحميل هذه العوامل بشكل زائد لتعمل مع الأنواع الجديدة.
سنبدأ بكتابة برنامج يعرض نصاً على الشاشة:-
//Program 1-1: //This program will display a message on the screen. #include<iostream.h> main ( ) { cout <<''welcome to C++ !\n''; return 0; }
الخرج من البرنامج:
welcome to C++ !
يقوم الحاسوب بتنفيذ البرنامج ويعود سريعاً للمحرر IDE. من الآن فصاعداً، إذا أردت تثبت المخرجات على الشاشة عليك إضافة التالي إلى البرنامج: #include <conio.h> في أول البرنامج، وإضافة العبارة: getch( ) في السطر الذي يسبق العبارة return 0
التعليقات:Comments // Program 1-1: //This program will display a message on the screen.
يبدأ هذا السطر من البرنامج بالشرطة المزدوجة (//) الدالة على أن بقية السطر عبارة عن تعليق (comment)، تضاف التعليقات إلى البرامج لتساعد المبرمج أو أي شخص آخر قد يحتاج إلى قراءة البرنامج على فهم ما الذي يفعله البرنامج، لذا من المستحسن أن يبدأ كل برنامج في لغة C++ بتعليق يوضح الغرض الذي من أجله كتب البرنامج. تستخدم الشرطة المزدوجة (//) إذا كان التعليق يمتد لسطر واحد فقط single-line comment . هنالك نوع آخر من التعليقات يتيح لنا كتابة تعليقات تمتد إلى عدة أسطرmulti-line comments ، نستطيع كتابة التعليق السابق على الصورة: /* Program 1-1: This program will display a message on the screen */
يبدأ الرمز */ التعليق وينهيه الرمز */ . نجد أن نهاية السطر لا تعنى انتهاء التعليق لذا يمكننا كتابة ما نشاء من أسطر التعليقات قبل الانتهاء بالرمز */. مرشدات المهيئ(Preprocessor Directive) :- #include<iostream.h> يسمى هذا بمرشد المهيئ Preprocessor directive، وهو عبارة عن تعليمة للمصرف أن يدرج كل النص الموجود في الملفiostream.h في البرنامج، وهو ملف يجب تضمينه مع أي برنامج يحتوى على عبارات تطبع بيانات على الشاشة أو تستقبل بيانات من لوحة المفاتيح. يسمى iostream ملف ترويسة (header file)، وهنالك الكثير من ملفات الترويسة الأخرى، فمثلاً إذا كنا نستعمل في برنامجنا دالات رياضية كـ sin( ) وcos( ) نحتاج إلى شمل ملف ترويسة يدعى math.h، وإذا كنا نتعامل مع سلاسل الأحرف سنحتاج للملف string.h. وعموماً هنالك عدد كبير من ملفات الترويسات التي يجب تضمينها على حسب طبيعة البرنامج ، تعتبر ملفات الترويسات جزء مهم من برامج لغة C++ وسنحتاج إلى شمل الملف iostream.h لتشغيل أي برنامج يقوم بعمليات إدخال وإخراج. الدالة main :- main( ) يبدأ تشغيل أي برنامج C++ من دالة تدعي main( )، وهي دالة مستقلة ينقل نظام التشغيل التحكم إليها. وهي جزء أساسي في برنامج C++. الأقواس بعد main تشير إلى أن main هي عبارة عن دالة. قد يحتوى برنامج C++ على أكثر من دالة إحداهما بالضرورة هي main. يحتوى البرنامج السابق على دالة واحدة. يبدأ تنفيذ البرنامج من الدالة main حتى لو لم تكن هي الأولى في سياق البرنامج. يتم حصر جسم الدالة main بأقواس حاصرة { } . الخرج إلى الشاشة:- cout<<'' welcome to C++ !\n ''; هذه العبارة (statement) تجبر الحاسوب أن يظهر على الشاشة النص المحصور بين علامتي الاقتباس '' .'' ويسمى هذا النص ثابت سلسلي. يجب أن تنتهي كل عبارة في برنامج C++ بفاصلة منقوطة ; (semi colon). الاسم cout والذي يلفظ كـ C out يمثل كائن في C++ مقترن مع الشاشة والعامل << والذي يسمى بعامل الوضع Put to operator يجبر على إرسال الأشياء التي على يمينه إلى أي شئ يظهر على يساره
//Program 1-2: Output #include <iostream.h> main ( )
{ cout << 7 << " is an integer.\n"; cout << 'a' << "is a character.\n"; }
الخرج من البرنامج:
7 is an integer. a is a character
من خرج البرنامج يتضح لنا الآتي: 1- يتم حصر النص المطلوب ظهوره على الشاشة بين علامتي اقتباس"is an integer ". 2- تتم كتابة الثوابت الرقمية بدون علامتي اقتباس << 7. 3- يتم حصر حرف واحد مطلوب ظهوره على الشاشة بعلامة اقتباس فردية <<’a’. تقوم بعض اللغات كـ Basic مثلاً بالانتقال إلى سطر جديد تلقائياً في نهاية كل عبارة خرج ، لكن C++ لا تفعل ذلك كما أن العبارات المختلفة والموضوعة في أسطر مختلفة لا تؤدي إلى ذلك . لا ينشئ الكائن cout أسطراً جديدة تلقائياً، والمخرجات في البرنامج التالي توضح ذلك:- //Program 1-3:This program displays output on the screen #include<iostream.h> main ( ) { cout<<10; cout<<20<<30; return 0; }
تظهر الخرج:-
102030
حيث يلتصق كل الخرج ببعضه البعض ، لذا من الجيد أن يكون لدينا طرق في C++ للتحكم بطريقة تنسيق الخرج والتي منها تتابعات الهروب(Escape Sequences). تتابعات الهروب (Escape Sequences): نلاحظ أنه لم تتم طباعة \n على الشاشة ، \ تسمى الشرطة الخلفية (Back slash) أو حرف هروب (Escape character) وتسمى هي والحرف الذي يليها تتابع هروب. تتابع الهروب \n يعنى الانتقال إلى سطر جديد حيث يجبر المؤشر على الانتقال إلى بداية السطر التالي ، الآن إليك بعض تتابعات الهروب الشائعة:- تتابع الهروب الوصف \n سطر جديد. \t مسافة أفقية. \b حرف التراجع back space. \\ لطباعة شرطة خلفية. \r حرف الإرجاع، يجبر المؤشر على الانتقال إلى بداية هذا السطر. '' لطباعة علامة اقتباس العبــارة return 0 :- تكتب العبارة return 0; في نهاية الدالة main( ) . القيمة 0 تشير إلى أن البرنامج انتهى نهاية صحيحة وسيبدو لنا سبب تضمين هذه العبارة واضحا عندما نتعرف على الدوال في C++ بالتفصيل. مثال آخر لبرنامج C++ :- إليك الآن مثالاً لبرنامج يستقبل رقمين من المستخدم ويجمعهما ويعرض ناتج الجمع:-
// Program 1-4: Addition program #include<iostream.h> #include<conio.h> main ( ) { int integer1, integer2, sum; cout <<"Enter first integer\n"; cin >> integer1; cout <<"Enter second integer\n"; cin >> integer2; sum= integer1+integer2; cout <<"sum="<<sum<<endl; getch(); return 0; }
Enter first integer 7 Enter second integer 3 sum= 10
1. حدد ما إذا كانت العبارات الآتية صحيحة أم خطأ: التعليقات تجبر الحاسوب على طباعة النص الذي يلي // على الشاشة عند تنفيذ البرنامج. تتابع الهروب \n يجبر المؤشر على الانتقال إلى سطر جديد. برنامج C++ والذي يقوم بطباعة ثلاث أسطر على الشاشة يجب أن يحتوى على ثلاث عبارات تستعمل cout. 2. ما هو الخرج من العبارة الآتية: cout << “\n **\n ***\n ****\n”;
تمت الوحده الولي بحمده ساواصل ان شاء الله
| |
|