6.18k likes | 6.35k Views
بسم الله الرحمن الرحيم. برنامه سازي پيشرفته. تعداد واحد: 3. تهيه كننده: دكتر احمد فراهي. مقدمه:.
E N D
برنامه سازي پيشرفته تعداد واحد: 3 تهيه كننده: دكتر احمد فراهي
مقدمه: زبان C يک زبان همه منظوره است. دستورالعملهاي اينزبان بسيار شبيه عبارات جبري و نحو آن شبيه جملات انگليسي مي باشد. اين امر سبب ميشود که C يک زبان سطح بالا باشد کهبرنامهنويسي در آن آسان است ›››
++C که از نسل C است، تمام ويژگيهاي C را به ارث برده است. اما برتري فني ديگري هم دارد: C++ اکنون «شيگرا» است. ميتوان با استفاده از اين خاصيت، برنامههاي شيگرا توليد نمود. برنامههاي شيگرا منظم و ساختيافتهاند، قابل روزآمد کردناند، به سهولت تغيير و بهبود مييابند و قابليت اطمينان و پايداري بيشتري دارند.
اهم مطالب اين كتاب : جلسه اول: «مقدمات برنامهنويسي باC++» جلسه دوم:«انواع اصلي» جلسه سوم:«انتخاب» جلسه چهارم: ‹‹تكرار» جلسه پنجم:«توابع» جلسه ششم:« آرايهها»
جلسه هفتم:«اشارهگرها و ارجاعها» جلسه هشتم: «رشتههاي كاراكتري و فايلها در ++Cاستاندارد» جلسهنهم: «شيئگرايي» جلسه دهم: «سربارگذاري عملگرها» جلسهيازدهم: «تركيب و وراثت»
مقدمات برنامهنويسي باC++ جلسهاول
آنچه در اين جلسه مي خوانيد: 1-چرا C++؟ 2- تاريخچۀ C++ 3- آمادهسازي مقدمات 4- شروع کار با C++ 5- عملگر خروجي 6- ليترالها و کاراکترها 7- متغيرها و تعريف آنها 8- مقداردهي اوليه به متغيرها 9- ثابتها 10- عملگر ورودي
هدف کلي: آشنايي با تاريخچه و مزاياي زبان برنامهنويسي C++ و بيان مفاهيم بنيادي شيگرايي و عناصر مهم برنامههاي C++
هدفهاي رفتاري: انتظار ميرود پس از پايان اين جلسه بتوانيد: - مزاياي زبان C++ را بر زبانهاي مشابه ذکر کرده و تفاوت آن را با زبان C بيان کنيد. - شرح مختصري از روند پيشرفت زبانهاي برنامهنويسي را بيان کرده و مشکلات هر دوره را به اختصار شرح دهيد. - مزاياي شيگرايي در توليد نرمافزار را برشماريد. - اصول سهگانۀ شيگرايي را نام برده و هر يک را به اختصار شرح دهيد. >>
- قالب کلي برنامههاي C++ را بشناسيد و بتوانيد برنامههاي کوچک را نوشته و آزمايش کنيد. - عملگر ورودي و خروجي را در C++ شناخته و از آنها در برنامهها استفاده کنيد. - نحوۀ اعلان متغيرها و شيوۀ مقداردهي به آنها را بدانيد. - سه موجوديت «ليترال»، «کاراکتر» و «عدد» را شناخته و فرق بين آنها را شرح دهيد. - علت و شيوههاي افزودن توضيح به کد برنامه را شرح دهيد. - علت و شيوۀ معرفي ثابتها در برنامه را شرح دهيد.
مقدمه در دهه 1970 در آزمايشگاههاي بل زباني به نام C ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود تا اين که در سال 1978 توسط Kernighan و Richie شرح کاملي از اين زبان منتشر شد و به سرعت نظر برنامهنويسان حرفهاي را جلب نمود. هنگامي که بحث شيگرايي و مزاياي آن در جهان نرمافزار رونق يافت، زبان C که قابليت شيگرايي نداشت ناقص به نظر ميرسيد تا اين که در اوايل دهۀ 1980 دوباره شرکت بل دست به کار شد و Bjarne Stroustrup زبان C++ را طراحي نمود
C++ ترکيبي از دو زبان C و Simula بود و قابليتهاي شيگرايي نيز داشت. از آن زمان به بعد شرکتهاي زيادي کامپايلرهايي براي C++ طراحي کردند. اين امر سبب شد تفاوتهايي بين نسخههاي مختلف اين زبان به وجود بيايد و از قابليت سازگاري و انتقال آن کاسته شود. به همين دليل در سال 1998 زبان C++ توسط موسسۀ استانداردهاي ملي آمريکا (ANSI) به شکل استاندارد و يکپارچه درآمد.
1-چرا C++؟ • زبان C يک زبان همه منظوره است • در اين زبان عملگرهايي تعبيه شده که برنامهنويسي سطح پايين و به زبان ماشين را نيز امکانپذير ميسازد • چون C عملگرهاي فراواني دارد، کد منبع برنامهها در اين زبان بسيار کوتاه است
- زبان C براي اجراي بسياري از دستوراتش از توابع کتابخانهاي استفاده ميکند و بيشتر خصوصيات وابسته به سختافزار را به اين توابع واگذار مينمايد. • برنامۀ مقصدي که توسط کامپايلرهاي C ساخته ميشود بسيار فشردهتر و کمحجمتر از برنامههاي مشابه در ساير زبانها است. • C++ که از نسل C است، تمام ويژگيهاي جذاب C را به ارث برده است. • و سرانجام آخرين دليل استفاده از C++ورود به دنياي C# است.
C++ ترکيبي از دو زبان C و Simula بود و قابليتهاي شيگرايي نيز داشتاز آن زمان به بعد شرکتهاي زيادي کامپايلرهايي براي C++ طراحي کردند. اين امر سبب شد تفاوتهايي بين نسخههاي مختلف اين زبان به وجود بيايد و از قابليت سازگاري و انتقال آن کاسته شود. به همين دليل در سال 1998 زبان C++ توسط موسسۀ استانداردهاي ملي آمريکا (ANSI) به شکل استاندارد و يکپارچه درآمد. کامپايلرهاي کنوني به اين استاندارد پايبندند. کتاب حاضر نيز بر مبناي همين استاندارد نگارش يافته است.
3- آمادهسازي مقدمات يک «برنامه» دستورالعملهاي متوالي است که ميتواند توسط يک رايانه اجرا شود. براي نوشتن و اجراي هر برنامه به يک «ويرايشگر متن» و يک «کامپايلر» احتياج داريم. بستۀ Visual C++ محصول شرکت ميکروسافت و بستۀ C++ Builder محصول شرکت بورلند نمونههاي جالبي از محيط مجتمع توليد براي زبان C++ به شمار ميروند.
4- شروع کار با C++ • C++ نسبت به حروف «حساس به حالت» استيعني A و a را يکي نميداند مثال : اولين برنامه اولين برنامهاي که مينويسيم به محض تولد، به شما سلام ميکند و عبارت "Hello, my programmer!" را نمايش ميدهد: #include <iostream> int main() { std::cout << "Hello, my programmer!\n" ; return 0; }
اولين خط از کد بالا يک «راهنماي پيشپردازنده» است. راهنماي پيشپردازنده شامل اجزاي زير است: • 1- کاراکتر # که نشان ميدهد اين خط، يک راهنماي پيشپردازنده است. اين کاراکتر بايد در ابتداي همۀ خطوط راهنماي پيشپردازنده باشد. • 2- عبارت include • 3- نام يک «فايل کتابخانهاي» که ميان دو علامت <> محصور شده است.
خط دوم برنامه نيز بايد در همه برنامههاي C++ وجود داشته باشد. اين خط به کامپايلر ميگويد که «بدنۀ اصلي برنامه» از کجا شروع ميشود. اين خط داراي اجزاي زير است: 1 – عبارت int که يک نوع عددي در C++ است. 2 – عبارت main که به آن «تابع اصلي» در C++ ميگويند. 3 – دو پرانتز () که نشان ميدهد عبارت main يک «تابع» است. هر برنامه فقط بايد يک تابع main() داشته باشد.
سه خط آخر برنامه، «بدنۀ اصلي برنامه» را تشکيل ميدهند. دستورات برنامه از خط سوم شروع شده است. دستور خط سوم با علامت سميکولن ; پايان يافته است.
توضيح • توضيح، متني است که به منظور راهنمايي و درک بهتر به برنامه اضافه ميشود و تاثيري در اجراي برنامه ندارد. . کامپايلر توضيحات برنامه را قبل از اجرا حذف ميکند. • استفاده از توضيح سبب ميشود که ساير افراد کد برنامۀ شما را راحتتر درک کنند.
به دو صورت ميتوانيم به برنامههاي C++ توضيحات اضافه کنيم: • 1 – با استفاده از دو علامت اسلش // : هر متني که بعد از دو علامت اسلش بيايد تا پايان همان سطر يک توضيح تلقي ميشود . • 2 – با استفاده از حالت C : هر متني که با علامت /* شروع شود و با علامت */ پايان يابد يک توضيح تلقي ميشود.
5- عملگر خروجي علامت << عملگر خروجي در C++ نام دارد (به آن عملگر درج نيز ميگويند). يک «عملگر» چيزي است که عملياتي را روي يک يا چند شي انجام ميدهد. عملگر خروجي، مقادير موجود در سمت راستش را به خروجي سمت چپش ميفرستد. به اين ترتيب دستور cout<< 66 ; مقدار 66 را به خروجي cout ميفرستد که cout معمولا به صفحهنمايش اشاره دارد. در نتيجه مقدار 66 روي صفحه نمايش درج ميشود.
6 -ليترالها و کاراکترها يک «ليترال» رشتهاي از حروف، ارقام يا علايم چاپي است که ميان دو علامت نقل قول " " محصور شده باشد. يک «کاراکتر» يک حرف، رقم يا علامت قابل چاپ است که ميان دونشانۀ ' 'محصور شده باشد. پس 'w' و '!' و '1' هر کدام يک کاراکتر است. به تفاوت سه موجوديت «عدد» و «کاراکتر» و «ليترال رشتهاي» دقت کنيد: 6 يک عدد است، '6' يک کاراکتر است و "6" يک ليترال رشتهاي است.
7 - متغيرها و تعريف آنها: «متغير» مکاني در حافظه است که چهار مشخصه دارد: نام، نوع، مقدار، آدرس.وقتي متغيري را تعريف ميکنيم، ابتدا با توجه به نوع متغير، آدرسي از حافظه در نظر گرفته ميشود، سپس به آن آدرس يک نام تعلق ميگيرد.
در C++ قبل از اين که بتوانيم از متغيري استفاده کنيم، بايد آن را اعلان نماييم. نحو اعلان يک متغير type name initializer عبارت type نوع متغير را مشخص ميکند. نوع متغير به کامپايلر اطلاع ميدهد که اين متغير چه مقاديري ميتواند داشته باشد و چه اعمالي ميتوان روي آن انجام داد.
name \ initializer عبارت name نام متغير را نشان ميدهد. اين نام حداکثر ميتواند 31 کاراکتر باشد، نبايد با عدد شروع شود، علايم رياضي نداشته باشد و همچنين «کلمۀ کليدي» نيز نباشد. مقداردهي اوليه عبارت initializer عبارت «مقداردهي اوليه» نام دارد. با استفاده از اين عبارت ميتوان مقدار اوليهاي در متغير مورد نظر قرار داد. دستور زير تعريف يک متغير صحيح را نشان ميدهد: int n = 50;
8 - مقداردهي اوليه به متغيرها در بسياري از موارد بهتر است متغيرها را در همان محلي که اعلان ميشوند مقداردهي کنيم. استفاده از متغيرهاي مقداردهي نشده ممکن است باعث ايجاد دردسرهايي شود. دردسر متغيرهاي مقداردهي نشده وقتي بزرگتر ميشود که سعي کنيم متغير مقداردهي نشده را در يک محاسبه به کار ببريم. مثلا اگر x را که مقداردهي نشده در عبارت y = x + 5; به کار ببريم، حاصل yغير قابل پيشبيني خواهد بود. براي اجتناب از چنين مشکلاتي عاقلانه است که متغيرها را هميشه هنگام تعريف، مقداردهي کنيم. مثال: int x=45; int y=0;
9- ثابتها در بعضي از برنامهها از متغيري استفاده ميکنيم که فقط يک بار لازم است آن را مقداردهي کنيم و سپس مقدار آن متغير در سراسر برنامه بدون تغيير باقي ميماند. مثلا در يک برنامۀ محاسبات رياضي، متغيري به نام PI تعريف ميکنيم و آن را با 3.14 مقداردهي ميکنيم و ميخواهيم که مقدار اين متغير در سراسر برنامه ثابت بماند. در چنين حالاتي از «ثابتها» استفاده ميکنيم. يک ثابت، يک نوع متغير است که فقط يک بار مقداردهي ميشود و سپس تغيير دادن مقدار آن در ادامۀ برنامه ممکن نيست. تعريف ثابتها مانند تعريف متغيرهاست با اين تفاوت که کلمه کليدي const به ابتداي تعريف اضافه ميشود.
مثال تعريف ثابتها: int main() { // defines constants; has no output: const char BEEP ='\b'; const int MAXINT=2147483647; const float DEGREE=23.53; const double PI=3.14159265358979323846 return 0; } برنامه فوق خروجي ندارد:
10 - عملگر ورودي براي اين که بتوانيم هنگام اجراي برنامه مقاديري را وارد کنيم از عملگر ورودي >> استفاده ميکنيم. استفاده از دستور ورودي به شکل زير است: cin >>variable; variable نام يک متغير است.
مثال 10 – 1 استفاده از عملگر ورودي برنامۀ زير يک عدد از کاربر گرفته و همان عدد را دوباره در خروجي نمايش ميدهد: int main() { // reads an integer from input: int m; cout << "Enter a number: "; cin >> m; cout << "your number is: " << m << endl; return 0; } Enter a number: 52 your number is: 52
عملگر ورودي نيز مانند عملگر خروجي به شکل جرياني رفتار ميکند. يعني همان طور که در عملگر خروجي ميتوانستيم چند عبارت را با استفاده از چند عملگر << به صورت پشت سر هم چاپ کنيم، در عملگر ورودي نيز ميتوانيم با استفاده از چند عملگر >> چند مقدار را به صورت پشت سر هم دريافت کنيم. مثلا با استفاده از دستور: cin >> x >> y >> z; سه مقدار xو y و z به ترتيب از ورودي دريافت ميشوند. براي اين کار بايد بين هر ورودي يک فضاي خالي (space) بگذاريد و پس از تايپ کردن همۀ وروديها، کليد enter را بفشاريد. آخرين مثال جلسه، اين موضوع را بهتر نشان ميدهد.
مثال 11 – 1 چند ورودي روي يک خط برنامۀ زير مانند مثال 10 –2 است با اين تفاوت که سه عدد را از ورودي گرفته و همان اعداد را دوباره در خروجي نمايش ميدهد: int main() { // reads 3 integers from input: int q, r, s; cout << "Enter three numbers: "; cin >> q >> r >> s; cout << "your numbers are: << q << ", " << r << ", " << s << endl; return 0; } Enter three numbers: 35 70 9 your numbers are: 35, 70, 9
«انواع اصلي» جلسهدوم
آنچه در اين جلسه مي خوانيد: 1- انواع دادۀ عددي 2- متغير عدد صحيح 3- محاسبات اعداد صحيح 4- عملگرهاي افزايشي و کاهشي 5- عملگرهاي مقدارگذاري مرکب 6- انواع مميز شناور ›››
7-تعريف متغير مميز شناور 8 - شکل علمي مقادير مميز شناور 9- نوع بولين bool 10- نوع کاراکتري char 11- نوع شمارشي enum 12- تبديل نوع، گسترش نوع ›››
13- برخي از خطاهاي برنامهنويسي 14- سرريزي عددي 15- خطاي گرد کردن 16- حوزۀ متغيرها
هدف کلي: معرفي انواع متغييرها و نحوۀ بهکارگيري آنها در برنامههاي C++ هدفهاي رفتاري: انتظار ميرود پس از پايان اين جلسه بتوانيد: - انواع عددي صحيح در C++ را نام ببريد و متغيرهايي از اين نوعها را در برنامهها به کار ببريد. - انواع عددي مميز شناور در C++ را نام ببريد و متغيرهايي از اين نوعها را در برنامهها به کار ببريد. - نوع بولين را تعريف کرده و متغيرهايي از اين نوع را در برنامهها به کار ببريد. >>>
- نوع شمارشي را شناخته و متغيرهايي از اين نوع را در برنامهها به کار ببريد. - مفاهيم «تبديل نوع» و «گسترش نوع» را شناخته و انواع مختلف را به يکديگر تبديل نماييد. - علت خطاهاي «سرريزي عددي» و «گردکردن» را دانسته و بتوانيد محل وقوع آنها را کشف کنيد. - عملگرهاي حسابي و افزايشي و کاهشي و مقدارگذاري مرکب را در برنامهها به کار ببريد.
مقدمه ما در زندگي روزمره از دادههاي مختلفي استفاده ميکنيم: اعداد ، تصاوير، نوشتهها يا حروف الفبا، صداها، بوها و ... . با پردازش اين دادهها ميتوانيم تصميماتي اتخاذ کنيم، عکسالعملهايي نشان دهيم و مسالهاي را حل کنيم. رايانهها نيز قرار است همين کار را انجام دهند. يعني دادههايي را بگيرند، آنها را به شکلي که ما تعيين ميکنيم پردازش کنند و در نتيجه اطلاعات مورد نيازمان را استخراج کنند.
1- انواع دادۀ عددي در C++ دو نوع اصلي داده وجود دارد: «نوع صحيح» و «نوع مميز شناور». همۀ انواع ديگر از روي اين دو ساخته ميشوند (به شکل زير دقت کنيد).
نوع صحيح نوع صحيح براي نگهداري اعداد صحيح (اعداد 0 و 1 و 2 و ...) استفاده ميشود. اين اعداد بيشتر براي شمارش به کار ميروند و دامنه محدودي دارند.
نوع مميز شناور براي نگهداري اعداد اعشاري استفاده ميشود. اعداد اعشاري بيشتر براي اندازهگيري دقيق به کار ميروند و دامنۀ بزرگتري دارند. يک عدد اعشاري مثل 352/187 را ميتوان به شکل 10×7352/18 يا 102×87352/1 يا1-10×52/1873يا2-10×2/18735 و يا ... نوشت. به اين ترتيب با کم و زياد کردن توان عدد 10 مميز عدد نيز جابهجا ميشود. به همين دليل است که به اعداد اعشاري «اعداد مميز شناور» ميگويند.
2- متغير عدد صحيح C++ شش نوع متغير عدد صحيح دارد تفاوت اين شش نوع مربوط به ميزان حافظۀ مورد استفاده و محدودۀ مقاديري است که هر کدام ميتوانند داشته باشند. اين ميزان حافظۀ مورد استفاده و محدودۀ مقادير، بستگي زيادي به سختافزار و همچنين سيستم عامل دارد. يعني ممکن است روي يک رايانه، نوع int دو بايت از حافظه را اشغال کند در حالي که روي رايانهاي از نوع ديگر نوع int به چهار بايت حافظه نياز داشته باشد.
وقتي برنامهاي مينويسيد، توجه داشته باشيد که از نوع صحيح مناسب استفاده کنيد تا هم برنامه دچار خطا نشود و هم حافظۀ سيستم را هدر ندهيد.
3 -محاسبات اعداد صحيح C++ مانند اغلب زبانهاي برنامهنويسي براي محاسبات از عملگرهاي جمع (+) ، تفريق (-) ، ضرب (*) ، تقسيم (/) و باقيمانده(%) استفاده ميکند.
4 - عملگرهاي افزايشي و کاهشي C++ براي دستکاري مقدار متغيرهاي صحيح، دو عملگر جالب ديگر دارد: عملگر ++: مقدار يک متغير را يک واحد افزايش ميدهد. عملگر -- : مقدار يک متغير را يک واحد کاهش ميدهد. اما هر کدام از اين عملگرها دو شکل متفاوت دارند: شکل «پيشوندي» و شکل «پسوندي».