برنامه ریزی پیشرفته
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
برچسبهای مرتبط
- اعداد تصادفی
- انواع داده ها
- انواع شبکه
- برنامه ریزی
- برنامه سازی پیشرفته
- پاورپوينت برنامه ریزی پیشرفته
- پاورپوینت برنامه ریزی پیشرفته
- دانلود پاورپوینت
- دانلود پاورپوینت رایگان
- دانلود رايگان پاورپوينت
- دریافت مقادیر متغیرها
- شبكه هاي كامپيوتري
- شکل کلی دستور العمل Switch
- قانون نامگذاري شناسهها
- كاراكتر
- مدیریت برنامه
- ويژگيهاي مهم زبان c
امتیاز
برنامه ریزی پیشرفته
اسلاید 1: برنامه سازی پیشرفته ارائه دهنده دکتر سيد امين حسينيhosseini@um.ac.ir E.mail:Home page: http://hosseini.staffcms.um.ac.ir
اسلاید 2: ارزشیابیکار کلاسی شامل تمرین، پروژه های برنامه نویسی و فعالیت کلاسی 10 نمرهامتحان میان ترم 4 نمرهامتحان پایان ترم 8 نمره
اسلاید 3: مهر 853هفته اول اصول و مباني شبکهها
اسلاید 4: فهرست مطالبشكلهاي بكارگيري كامپيوترشبكه هاي كامپيوتري، مزایا – معایبانواع شبکه
اسلاید 5: 5مقدمهدر اوايل دهه 1970 ميلادی ، زبان C ، توسط دنيس ريچي و به عنوان زبان برنامهنويسي سيستم ها طراحي شد. اين زبان از دو زبان قديمي تر بنامهاي BCPL و B حاصل شده است. زبان C تا سال 1978 منحصر به استفاده در لابراتوار كمپاني BELL بود تا اينکه توسط دو تن بنامهای ريچی و کرنيه نسخه نهايي اين زبان منتشر شد
اسلاید 6: 6 مقدمه – فازهای تولید و اجرای برنامه های C++فاز 1 – برنامه ها در ویرایشگر نوشته شده و در دیسک دخیره می شوندفاز2- پیش چردازنده دستورات را پردازش می کند فاز 3 – کامپایلر کد مقصد را ایجاد می کند و آن را در دیسک ذخیره می کندفاز 4 – پیوند دهنده کد مقصد را به کتابخانه پیوند می دهد و یک فایل قابل اجرا ایجاد کرده و آن را در دیسک ذخیره می کندفاز 5 – بارکننده فایل را در حافظه قرار می د هدفاز 6 – پردازشگر هر یک از دستورات را دریافت و اجرا می کند
اسلاید 7: 7 مقدمه - ويژگيهاي مهم زبان C زبان C به طور گستردهاي در دسترس است .C زباني است همه منظوره، ساختيافته سطح بالا و انعطافپذير كه برخي از خصوصيات زبانهاي سطح پايين را نیز داراست.برنامههاي نوشته شــده به زبان C به طور كلي مستقــل از ماشين يا نـوع كامپيوتر است و تقريباً تحت كنترل هر سيستم عاملي اجرا ميشود.C روش برنامهسازي ماژولار را پشتيباني ميكند.
اسلاید 8: 8مقدمه - ويژگيهاي مهم زبان C کامپايلرهاي C فشرده و كم حجماند و برنامههاي هدف ايجاد شده با آنها خيلي كوچك و كارآمدند. برنامههاي C در مقايسه با ساير زبانهاي برنامهسازي سطح بالا، به راحتي قابل انتقالاند. به طور کلي جامعيت، عموميت، خوانايي، سادگي، کارآيي و پيمانهاي بودن که همگي از مشخصات برنامهای ايدهآلاند در زبان C پيادهسازي ميشوند.
اسلاید 9: 9زبان برنامهنويسي C مجموعهاي خاص از كاراكترها را شناسايي ميكند. اين مجموعه عبارتاند از:حروف بزرگ و حروف كوچك: زبان C بين حروف بزرگ و كوچك تفاوت قائل مي شود(Case Sensitive) . ارقام دهدهي : شامل 0 تا 9 جاي خالي يا Blank كاراكتركاراكترهاي مخصوص : شامل : ^ % $ # @ ! + - = / * ? ( ) < > { } [ ] ; . , &كاراكترهاي فرمتدادن: که براي بيان کردن حالات ويژه اي بکار مي روند و عبارتند از : t ,v ,n ,b ,f ,r ,0 ,…
اسلاید 10: 10يك شناسه C دنبالهاي است از حروف ، ارقام يا علامت زير خط که با هر ترتيبي ميتوانند قرار گيرند، اما اولين کاراکتر بايد يک حرف باشد .چند نمونه از شناسه هاي معتبر:m1 , max , payam_noor , minimum چند نمونه از شناسه هاي نامعتبر: book-2 , 4s5 , $tax , p , computer science شناسه
اسلاید 11: قانون نامگذاري شناسهها -1حروف كوچك و بزرگ در نامگذاري شناسهها متفاوت ميباشند. 2) در نامگذاري شناسهها از حروف الفباء، ارقام و زير خط (underline) استفاده ميشود و حداكثر طول شناسه 31 ميباشد و شناسه بايستي با يك رقم شروع نگردد. بنابراين Xy ، XY ، xY ، xy چهار شناسه متفاوت از نظر C++ ميباشد.
اسلاید 12: قانون نامگذاري شناسهها3) براي نامگذاري شناسهها از كلمات كليدي نبايستي استفاده نمود. بعضي از كلمات كليدي در زیر داده شده است.
اسلاید 13: 13متغير، مكاني در حافظه اصلي كامپيوتر ميباشد كه در آنجا يك مقدار را ميتوان ذخيره و در برنامه از آن استفاده نمود. قانون نامگذاري متغيرها همان قانون نامگذاري شناسهها ميباشد. متغيرها در زبان C شناسههايي هستند كه محلهايي از حافظه را به خود اختصاص ميدهند .متغيرمقدار متغير در طول اجراي برنامه مي تواند تغيير کند .
اسلاید 14: انواع داده ها
اسلاید 15: اعلان متغیرها قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده شود و از آنها استفاده گردد بايستي آنها را در برنامه اعلان نمود. براي اعلان متغيرx از نوع int : int x;برای اعلان متغيرهاي p و q را از نوع float كه هر كدام چهار بايت از حافظه را اشغال ميكنند :float p , q; برای اعلان متغير next از نوع كاراكتر كه ميتوان يكي از 256 كاراكتر را به آن تخصيص داد و يك بايت را اشغال ميكند. char next; چند مثال از اعلان متغیر ها :
اسلاید 16: با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود. در دستورالعمل int x=26; X را از نوع int با مقدار اوليه 26 اعلان نموده .در دستورالعمل long a=67000 , b=260; متغيرهاي b و a را از نوعlong int تعريف نموده با مقادير بترتيب 260 و 67000.مقدار اولیه دادن متغیر ها
اسلاید 17: كراكترهاي مخصوص كامپايلر C++ بعضي از كراكترهاي مخصوص كه در برنامه ميتوان از آنها براي فرمت بندي استفاده كرد را تشخيص ميدهد. تعدادي از اين كراكترهاي مخصوص به همراه کاربرد آنها آورده شده است .nNewline tTab bBackspaceaBeep sound”Double quote ’Single quote0Null character ?Question markBack slashبعنوان مثال از كراكتر a ميتوان براي ايجاد صداي beep استفاده نمود. char x = a ;
اسلاید 18: رشتهها رشته يا string عبارتست از دنبالهاي از كاراكترها كه بين قرار داده ميشود. در حافظه كامپيوتر انتهاي رشتهها بوسيله 0 ختم ميگردد. BOOK STORE يك رشته ده كاراكتري ميباشد كه با توجه به كركتر 0 كه به انتهاي آن در حافظه اضافه مي شود جمعــاً يازده بايت را اشغال ميكند. دقت نمایید که w يك رشته ميباشد كه دو بايت از حافظه را اشغال ميكند در حاليكه w يك كاراكتر ميباشد كه يك بايت از حافظه را اشغال مينمايد.
اسلاید 19: نمايش مقادير دادهها براي نمايش دادهها بر روي صفحه مانیتور از cout كه بدنبال آن عملگر درج يعني << قيد شده باشد استفاده ميگردد. بايستي توجه داشت كه دوكركتر < پشت سر هم توسط C++ بصورت يك كركتر تلقي ميگردد. مثال :برای نمایش پيغام good morning بر روی صفحه نمایش :cout << good morning;برای نمایش مقدار متغیر X بر روی صفحه نمایش :cout << x ;
اسلاید 20: دریافت مقادیر متغیرها به منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامه از صفحه كليد، از cin كه بدنبال آن عملگر استخراج يعني >> قيد شده باشد ميتوان استفاده نمود. مثال :int x;cout << Enter a number: ;cin >> x;
اسلاید 21: عملگر انتساب عملگر انتساب = ميباشد كه باعث ميگردد مقدار عبارت در طرف راست این عملگر ارزيابي شده و در متغير طرف چپ آن قرار گيرد. از عملگرهاي انتساب چندگانه نيز ميتوان استفاده نمود. که مقدار سه متغير z و y و x برابر با 26 ميشود. x=a+b; x=35 ; x=y=z=26 ;
اسلاید 22: عملگرهاي محاسباتي در C++ پنج عملگر محاسباتي وجود دارد كه عبارتند از : اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند. از طرف ديگر عملگرهاي + و – راميتوان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.
اسلاید 23: مثال 1 : در حالتي كه هر دو عملوند عملگرهاي % ، / ، * ، + ، – از نوع صحيح باشد نتيجه عمل از نوع صحيح ميباشد.
اسلاید 24: مثال 2 : در صورتيكه حداقل يكي از عملوندهاي عملگرهاي / ، * ، – ، + از نوع اعشاري باشد نتيجه عمل از نوع اعشاري ميباشد.
اسلاید 25: عملگرهاي افزايش و كاهش در C++ ، افزايش يك واحد به مقدار يك متغير از نوع صحيح را افزايش و بطور مشابه كاهش يك واحد از مقدار يك متغير از نوع صحيح را كاهش مينامند. عملگر كاهش را با - - و عملگر افزايش را با ++ نمايش ميدهند. چون عملگرهاي ++ و - - فقط روي يك عملوند اثر دارند اين دو عملگر نيز جزء عملگرهاي يكتائي ميباشند.
اسلاید 26: مثال :سه دستور العمل زیر معادل ميباشند :++x;x++;x=x+1;و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند. - - y ; y=y-1;y- - ;
اسلاید 27: مثال :int x=5;y=++x * 2;پس از اجراي دستورالعملهاي فوق : y=12int x=5;y=x++ * 2;پس از اجراي دستورالعملهاي فوق :y=12
اسلاید 28: عملگر sizeofSizeof ازعملگرهاي يكتائي مي باشد و مشخص كننده تعداد بايت هائي است كه يك نوع داده اشغال ميكند. مثال :int x;cout << sizeof x ; مقدار 2 نمايش داده ميشود .cout << sizeof(float) ; مقدار 4 نمايش داده مي شود.
اسلاید 29: عملگرهاي جايگزيني محاسباتي براي سادهتر نوشتن عبارتها در C++ ، ميتوان از عملگرهاي جايگزيني محاسبـــاتي استفاده نمود. %= /= *= -= +=
اسلاید 30: اولويت عملگرها ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام ميگردد. در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است.
اسلاید 31: مثال 1 :(5+2) *(6+2*2)/2با توجه به جدول اولويت عملگرها داريم كه 7 *(6+2*2)/27*(6+4)/27* 10 /270 /235
اسلاید 32: مثال 2 :int a=6 , b=2, c=8, d=12;d=a++ * b/c ++;cout << d << c << b << a;خروجی :1 9 2 7
اسلاید 33: 33توضيحات در برنامه باعث خوانائي بيشتر و درك بهتر برنامه ميشود. بنابراين توصيه بر آن است كه حتي الامكان در برنامهها از توضيحات استفاده نمائيم. در C++، توضيحات بدو صورت انجام ميگيرد (1) هر عبارتي كه بين دو علامت */ و /*قرار گيرد و یا (2) ربا // شروع شود صرفاً بعنوان توضيحات محسوب ميگردد علامت توضيح Comment #include<stdio.h>main ( ) { int m , n ; /* declare variables */m = 1 ; /* initialize */while (m <= 10 ) /* outer loop */ {printf(%5d , m ) ; for ( n=1; n<=10 ; n+ +) // inner loop printf(%5d, m * n ) ; printf(n) ; m + + ; } }مثال:
اسلاید 34: توابع كتابخانه زبان C++ مجهز به تعدادي توابع كتابخانه ميباشد. بعنوان مثال تعدادي توابع كتابخانه براي عمليات ورودي و خروجي وجود دارند. معمولاً توابع كتابخانه مشابه ، بصورت برنامههاي هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايلهاي كتابخانه دسته بندي و مورد استفاده قرا رميگيرند. اين فايلها را فايلهاي header مينامند و داراي پسوند .h ميباشند.
اسلاید 35: نحوه استفاده از توابع کتابخانه ای براي استفاده از توابع كتابخانه خاصي بايستـــي نام فايل header آنرا در ابتداي برنامه در دستور #include قرار دهيم. >اسم فايل header < include#
اسلاید 36: چند تابع نمونه
اسلاید 37: برنامه در C++ اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و كوچك به زبان C++ بنويسيم. براي نوشتن برنامه بايستي دستورالعملها را در تابع main( ) قرار دهيم و براي اينكار ميتوان به يكي از دو طريقی که در اسلایدهای بعد آمده است ، عمل نمود.
اسلاید 38: برنامه در C++#include < >int main( )}دستورالعمل 1 ;دستورالعمل 2 ;...nدستورالعمل ;return 0 ;}#include < >void main( ){دستورالعمل 1 ;دستورالعمل 2 ;...n دستورالعمل ;}
اسلاید 39: #include <iostream.h>int main( ){cout <<C++ is an object oriented language n ; return 0 ;} برنامه ای که پيغام C++ is an object oriented language را روي صفحه مانیتور نمايش مي دهد. مثال 1
اسلاید 40: مثال 2#include <iostream.h>#include <stdlib. h> int main( ){ char c1 , c2;cout << Enter a lowercase letter: cin >> c1;c2 = toupper(c1);cout << c2 << endl;return 0; } برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مينمايد.
اسلاید 41: دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمايش ميدهد. #include <iostream.h>int main( ){float x,y,s,p ;cin >> x >> y ;s= x+y ;p=x*y;cout << s <<endl << p;return 0 ;}مثال 3
اسلاید 42: فصل دوم ساختارهای تصمیم گیری و تکرار
اسلاید 43: فهرست مطالب فصل دومعملگر های رابطه ایعملگر شرطیدستورالعمل شرطیعملگر کاماعملگر های منطقیدستورالعمل For
اسلاید 44: عملگرهای رابطه ای از این عملگرها براي تعيين اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر ميباشد استفاده ميگردد. عملگرهاي رابطهاي عبارتند از:
اسلاید 45: عملگر شرطیشكل كلي عملگر شرطي بصورت زير ميباشد:عملگر شرطي تنها عملگري در C++ ميباشد كه داراي سه عملوند ميباشد. expression _ test ? expression _ true : expression _ false
اسلاید 46: مثال 1 :int x=10,y=20,b;b=(x>y) ? x : y ;اين دو دستور العمل باعث ميشوند كه ماكزيمم مقادير y و x در b قرار بگيرد. مثال 2 :x>=10 ? cout << passed : cout << failed ; اگر مقدار x بزرگتر يا مساوي ده باشد رشتة passed در غير اينصورت رشته failed نمايش داده ميشود.
اسلاید 47: دستورالعمل شرطي توسط این دستور شرطي را تست نموده و بسته به آنكه شرط درست يا غلط باشد عكسالعمل خاصي را نشان دهيم. IF if( عبارت ) { 1دستورالعمل ;. n دستورالعمل ; } else { 1 دستورالعمل ;. n دستورالعمل ; }
اسلاید 48: مثال 1 :if(x != y){cout << x ;++ x ;}else {cout << y ;- - y ; }
اسلاید 49: مثال 2:#include <iostream.h>#include <math . h>int main( ){float x,s;cin >> x ;if( x < 0 )cout << x is negative << endl ; else {s = sqrt(x) ;cout << s << endl ; }return 0;}برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مينمايد.
اسلاید 50: عملگر كاما تعدادي عبارت را ميتوان با كاما بهم متصل نمود و تشكيل يك عبارت پيچيدهتري را داد. اين عبارتها به ترتيب از چپ به راست ارزيابي شده و مقدار عبارت معادل عبارتn ميباشد. (عبارت n , …. , عبارت 3 , عبارت 2 , عبارت 1)
اسلاید 51: مثال :اگر داشته باشيم int a=2 , b=4 , c=5 ; عبارت زير را در نظر بگيريد:(++ a , a+b, ++ c, c+b)مقدار عبارت برابر است با b+c كه معادل 10 ميباشد.
اسلاید 52: عملگرهای منطقیبا استفاده از عملگرهاي منطقي ميتوان شرطهاي تركيبي در برنامه ايجاد نمود. عملگرهاي منطقي عبارتست از :ANDORNOTكه در C++ به ترتيب بصورت زير نشان داده ميشود.&&||!
اسلاید 53: جدول درستی سه عملگر شرطیAndOrNot
اسلاید 54: مثال :if ((x= = 5) ||(y != 0)) cout << x << endl ;اگر x برابر با 5 يا y مخالف صفر باشد مقدار x نمايش داده شود . if(x) x = 0 ;اگر مقدار x مخالف صفر باشد، آنگاه x برابر با صفر شود .
اسلاید 55: برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد كه آيا تشكيل يك مثلث ميدهد يا خير؟ #include < iostream.h >int main( ){float a, b, c; cout << Enter three real numbers << endl ; cin >> a >> b >> c; // if(( a < b + c) &&(b < a+c) &&(c < a+b))cout << It is a triangle ;else cout << Not a triangle ;return 0 ;}مثال :
اسلاید 56: دستورالعمل Forاز دستور العمل for براي تكرار دستورالعملها استفاده ميشود. شكل كلي دستور for بصورت زير ميباشد:(عبارت 3 ; عبارت ; 2 عبارت 1) for { 1 دستورالعمل ; 2 دستورالعمل ; . . . n دستورالعمل ; }
اسلاید 57: #include <iostream.h>int main( ){int n, i ; long fact = 1 ;cout << Enter a positive integer number;cin >> n;for( i=1; i<=n; ++i) fact *= i; cout << fact << endl;return 0 ;}برنامه زير عدد صحيح و مثبت n را از ورودي گرفته فاكتوريل آنرا محاسبه ونمايش ميدهد.مثال :
اسلاید 58: #include <iostream.h>int main( ){int n, i=1 ; long s = 0 ;cin >> n ;for(; i<=n; i++) s += i;cout << s ;return 0 ; }برنامه زير مجموع اعداد صحيح و متوالي بين 1 تا n را محاسبه نموده و نمايش ميدهد.مثال :
اسلاید 59: #include <iostream.h>int main( ){int j=0 ;for( ; j <= 9 ; ) cout << j++ << endl; return 0 ; }برنامه زير ارقام 0 تا 9 را نمايش ميدهد.مثال :
اسلاید 60: #include <iostream.h>int main( ){int i,j,k,n;for(i=1; i<=3; ++i)for(j=1; j<=3; ++j)for(k=1; k<=3; ++k){n=i*100 + j*10+k;cout << n << ‘n’ ;}return 0 ;}برنامه زير كليه اعداد سه رقمي كه با ارقام 1 ، 2 ، 3 ايجاد ميشوند را نمايش ميدهد.مثال :
اسلاید 61: فصل سومسایر ساختارهای تکرار
اسلاید 62: فهرست مطالب فصل سومدستورالعمل whileدستورالعمل do whileدستورالعمل breakدستورالعمل continueدستورالعمل switchتابع cin.get()عملگر static_cast<>()جدول اولویت عملگرها
اسلاید 63: دستورالعمل whileاز اين دستور العمل مانند دستورالعمل for براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميگردد. شكل كلي اين دستور العمل بصورت زير ميباشد.while( شرط)} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; }
اسلاید 64: تفاوت دستورهای while و forدستورالعمل for زماني استفاده ميشود كه تعداد دفعات تكرار از قبل مشخص و معين باشد. در صورتيكه تعداد دفعات تكرار مشخص نباشد بايستي از دستورالعمل while استفاده نمود.
اسلاید 65: مثال :int x=0while(x<5)cout << x ++<< endl;با اجراي قطعه برنامه فوق مقادير زير نمايش داده ميشود :01234مثال :
اسلاید 66: #inclode <iostream.h>int main( ){int count = 0 , n;float x, sum = 0 , avg ;cin >> n ; /* تعداد مقادير ورودي n*/while(count < n){cin >> x ;sum += x ;++ count ; }avg = sum / n ;cout << avg << endl;return 0 ; }برنامة فوق n مقدار از نوع اعشاري را گرفته ميانگين آنها را محاسبه و در متغير avg قرار ميدهد.مثال :
اسلاید 67: دستورالعمل do while اين دستور العمل نيز براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميشود. شكل كلي اين دستورالعمل بصورت زير ميباشد.do} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; } while( شرط);
اسلاید 68: تفاوت دستورهای do while و while#include <iostream.h>int main( ){int count = 0;docout << count ++<<endl ;while(count <= 9);return 0 ; }در دستورالعمل while ابتدا مقدار شرط ارزيابي شده اما در دستورالعمل do while ابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزيابي ميگردد. بنابراین دستورالعمل do while حداقل يك بار انجام ميشود . ارقام 0 تا 9 را روي ده خط نمايش ميدهد
اسلاید 69: دستورالعمل breakاين دستورالعمل باعث توقف دستورالعملهاي تكرار( for , while ,do while) شده و كنترل به خارج از اين دستورالعملها منتقل مينمايد. Break
اسلاید 70: مثال 1 :#include <iostream.h>int main( ){float x, s=0.0 ;cin >> x ;while(x <= 1000.0) {if(x < 0.0){cout << Error-Negative Value ;break; }s += x ;cin >> x ;}cout << s << endl ; return 0 ; }مثال :
اسلاید 71: مثال 2:#include <iostream.h>int main( ){int count = 0 ;while( 1 ){count ++ ;if(count > 10 )break ;}cout << counter : << count << n;return 0 ;}مثال :
اسلاید 72: مثال 3:#include <iostream.h>void main( ){int count; float x, sum = 0;cin >> x ;for(count = 1; x < 1000 . 0; ++ count ){cin >> x ;if(x < 0.0) {cout << Error – Negative value <<endl;break ; }sum += x ; }cout << sum << n ; }مثال :
اسلاید 73: مثال 4:#include <iostream.h>int main( ){ float x , sum = 0.0 ;do {cin >> x ;if(x < 0.0) {cout << Error – Negative Value << endl ;break ;}sum += x ; } while(x <= 1000.0);cout << sum << endl ;return 0 ; }مثال :
اسلاید 74: دستورالعمل continue از دستورالعمل continue ميتوان در دستورالعملهاي تكرار do while ، while ، for استفاده نمود. اين دستورالعمل باعث ميشود كه كنترل بابتداي دستورالعملهاي تكرار منتقل گردد. Continue
اسلاید 75: #include <iostream.h>int main( ){float x, sum = 0.0 ;Do {cin >> x ;if(x < 0 . 0) {cout << Error << endl ;continue ; }sum += x ;} while(x <= 1000.0 );cout << sum ;return 0 ; }مثال :
اسلاید 76: #include <iostream.h>int main( ){int n , navg = 0 ;float x, avg, sum = 0 ;cin >> n ; / * عبارت از تعداد اعداد ورودي n * /for(int count = 1 ; count <=n; ++ count ){cin >> x ;if(x < 0 ) continue ; sum += x ;++ navg ; }avg = sum / navg; cout << avg << endl ;return 0 ; } مثال :
اسلاید 77: دستورالعمل switch همانطور که می دانید از دستورالعمل شرطی(if else) می توان بصورت تودرتو استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد گردد، درك آنها مشكل ميشود . براي حل اين مشكل C++ ، دستورالعمل switch كه عملاً يك دستورالعمل چند انتخابي ميباشد را ارائه نموده است. switchcase
اسلاید 78: شکل کلی دستور العمل Switchswitch(عبارت){case valueone : statement; break;case valuetwo: statement; break;case valuen : statement; break;default: statement ; }
اسلاید 79: #include <iostream.h>void main( ){unsigned int n ;cin >> n;switch(n){case 0: cout << ZERO << endl ;break;case 1:cout << one << endl ;break ;case 2:cout << two << endl ;break;default :cout << default << endl;} / * end of switch statement * /}مثال :
اسلاید 80: #include <iostream.h>void main( ){unsigned int n;cin >> n ;switch(n) {case 0 :case 1:case 2: cout << Less Than Three << endl; break;case 3: cout << Equal To Three << endl ; break;default: cout << Greater Than Three << endl;}}مثال :
اسلاید 81: تابع cin.get() :اين تابع يك كركتر را از صفحه كليد ميگيرد. براي استفاده از اين تابع در ابتداي برنامه بايستي داشته باشيم :#include <iostream.h>char x;x = cin.get( );cout << x ;قطعه برنامه ذيل يك كراكتر را از صفحه كليد گرفته و نمايش ميدهد.
اسلاید 82: #include <iostream.h>int main( ){ char x;while((x = cin.get( ) !=EOF)cout << x ;return 0 ; }EOF به معني End of File ميباشد كه در iostream.h تعريف شده و مقدار آن برابر با 1- ميباشد. مقدار آن در سيستم عامل DOS عبارتست از ctrl z .برنامة ذيل يك سطر متن انگليسي كه به CTRL Z ختم ميشود را گرفته دقيقاً نمايش ميدهد.مثال :
اسلاید 83: char x;x = cin.get( );switch(x) {case r :case R : cout << RED << n ; break ;case b :case B : cout << BLUE << endl ; break ;case y :case Y : cout << YELLOW << endl; }در قطعه برنامه ذيل ازتابع cin.get() و دستور switch استفاده شده است. مثال :
اسلاید 84: #include <iostream.h>int main( ){char next;while((next = cin.get( ) ) !=EOF)if(next != ) cout << next ;return 0 ; }برنامة ذيل يك سطر متن انگليسي را گرفته كاراكترهاي خالي (blank) آنرا حذف نموده و نمايش ميدهد.مثال :
اسلاید 85: عملگر static_castاز اين عملگر براي تبديل موقت يك نوع data به نوع ديگر استفاده ميشود. اين عملگر يك عملگر يكتائي ميباشد.
اسلاید 86: int x = 25 ;float y ;y = static_cast < float >(x) ; مقدار x موقتاً بصورت اعشاري در می آيد و در نتيجه مقدار y برابر با 25.0 می شود. بايستي توجه داشت كه نوع متغير x عوض نمي شود بلكه موقتاً مقدار آن بصورت اعشاري در آمده است. مثال :
اسلاید 87: float x = 14.75 ;cout << static_cast < int >(x) << endl;cout << x ; ابتدا مقدار 14 نمايش داده ميشود و سپس مقدار 14.75 نمايش داده ميشود. مثال :
اسلاید 88: جدول اولویت عملگرها
اسلاید 89: فصل چهارماعداد تصادفی
اسلاید 90: فهرست مطالب فصل چهارمتولید اعداد تصادفیتعریف نوع داده ( typedef )داده های از نوع شمارشیفرمت های مختلفه مقادیر خروجی
اسلاید 91: اعداد تصادفی مقادير تصادفي يا شانسي در اكثر برنامههاي كاربردي در زمينه شبيه سازي و بازيهاي كامپيوتري نقش مهمي را ايفا مينمايند. براي ايجاد يك عدد تصادفي صحيح بين 0 و 32767 بايستي از تابع rand( ) استفاده نمائيم. rand( )
اسلاید 92: #include <stdlib.h>#include < iostream.h>int main( ){for(int j=1; j<=10; ++j)cout << rand( ) << n ;return 0 ; }برنامه زير 10 عدد تصادفي بين 0 و 32767 را ايجاد مينمايد.مثال :
اسلاید 93: نکته :اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتريمی گيريم. براي تصادفي كردن اعداد ميبايستي از تابع srand( ) استفاده نمائيم. اين تابع به يك آرگومان صحيح از نوع unsigned نياز دارد. به اين آرگومان seed گفته ميشود. در اسلاید بعد برنامه قبلی را با تابع srand( ) نوشته ایم.
اسلاید 94: #include <stdlib.h>#include < iostream.h>int main( ){unsigned seed;cout << Enter seed value : ;cin >> seed ;srand(seed);for(int j=1; j<=10; ++j)cout << rand( ) << n ;return 0 ; }برنامه زير 10 عدد تصادفي بين 0 و 32767 را ايجاد مينمايد. ( srand( ) )مثال :
اسلاید 95: #include < iostream.h>#include <stdlib.h>int main( ){unsigned seed, d1, d2;cout << Enter seed: ;cin >> seed ;srand(seed) ;d1= 1+rand( )% 6 ;d2= 1+rand( )% 6 ;cout << d1 << << d2 ;return 0 ; }برنامه زير نتيجه پرتاب دو تاس را نمايش ميدهد.مثال :
اسلاید 96: #include <stdlib.h>#include < iostream.h>int main( ){unsigned seed ;cout << Enter seed: ;cin >> seed ;srand(seed) ;for(int i=1; i<=10; ++i)cout << rand( ) / 32768.0 << endl ;return 0 ;}برنامه زير 10 اعداد شانسي بين 0 و 1 را نمايش ميدهد.مثال :
اسلاید 97: تعريف نوع داده (typedef)از typedef ميتوان براي تعريف نوع دادههاي جديد كه معادل نوع دادههاي موجود باشد استفاده نمود. شكل كلي عبارتست از :typedef type newtype;نشاندهنده نوع داده موجود اسم جديد
اسلاید 98: مثال :typedef int integer; حال ميتوان y و x را بصورت زير تعريف نمود :integer x,y;مثال :
اسلاید 99: دادههاي از نوع شمارشي بمنظور معرفي دادههاي از نوع شمارشي از كلمه enum استفاده ميگردد.مثال : enum color {red, blue, green, yellow, brown} ;color يك نوع داده شمارشي ميباشد. 02341
اسلاید 100: چند مثال :emum status {married, devorced, vidow, single};status a ;a= single ;enum days {sat, sun, mon, tue, wed, thr, fri};enum bread {lavash, fantezi, taftoon, barbari};enum color { yellow, red=2, brown, white }; color x=brown;034مثال :
اسلاید 101: توجه :بايستي در نظر داشت كه دادههاي از نوع شمارشي در عمليات ورودي و خروجي شركت نمينمايند. بعبارت ديگر مقادير دادههاي از نوع شمارشي بايستي در برنامه تعيين نمود. دستورالعلهاي ورودي و خروجي مانند cin و cout در مورد دادههاي شمارشي نميتوان استفاده نمود.
اسلاید 102: فرمتهای مختلفه مقادیر خروجیdouble x=1050 ;cout << setiosflags(ios : : fixed | ios: : showpoint ) << setw(23) << setprecision(2) << x << endl ;مقدار x با طول میدان 23 نمایش داده می شود.مقدار x با دو رقم اعشار نمایش داده می شود.بنابراین مقدار x بصورت زیر نمایش داده می شود :شانزده ستون خالی 1050.00مقدار x بطور غیر علمی با نقطه اعشار ثابت نمایش داده می شود.include <iomanip.h>
اسلاید 103: فصل پنجمآرایه ها
اسلاید 104: فهرست مطالب فصل پنجمآرایه یک بعدیآرایه دو بعدی ( ماتریس ها )
اسلاید 105: آرایه یک بعدیآرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر ميباشد كه ميتواند چندين مقدا را در خود جاي دهد. كليه عناصر يك آرايه از يك نوع ميباشند. عناصر آرايه بوسيله انديس آنها مشخص ميشوند. در C++ ، انديس آرايه از صفر شروع ميشود.
اسلاید 106: کاربرد آرایه هاآرايهها در برنامهنويسي در مواردي كاربرد دارند كه بخواهيم اطلاعات و دادهها را در طول اجراي برنامه حفظ نمائيم.
اسلاید 107: int x[5] ; اولين عنصر x[0] پنجمين عنصر x[4] آرایه یک بعدی از نوع int
اسلاید 108: تخصیص مقادیر اولیه به عناصر آرایه : int x[5]= {4, 2, 5, 17, 30};
اسلاید 109: دریافت مقادیر عناصر آرایه :int x[5];for(int i=0; i<=4; ++i)cin >> x[ i ] ;نمایش مقادیر عناصر آرایه :for(int i=0; i<=5; ++i) cout << x[ i ] ;
اسلاید 110: اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر ميگيرند. int x[5] = {12, 5, 7};
اسلاید 111: بايستي توجه داشت كه آرايهها به صورت ضمني مقدار اوليه صفر نميگيرند. برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر بگيرند. int x[5] = {0} ;
اسلاید 112: دستور زير يك آرايه يك بعدي شش عنصري از نوع float ايجاد مينمايد. float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5} ;
اسلاید 113: برنامه ذيل 100 عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس مجموع عناصر آرايه را مشخص نموده نمايش ميدهد. #include <iostream.h>#include <iomanip.h>int main( ){const int arrsize = 100 ;float x[ arrsize], tot = 0.0 ;for(int j=0; j<arrsize; j++)cin >> x[ j ];for(j=0; j<arrsize; j++)cout << setiosflags(ios::fixed ios :: showpoint ) << setw(12) << setprecision(2) << x[ j ] << endl;for(j=0; j<arrsize; j++)tot += x[ j ] ;cout << tot ;return 0 ; }
اسلاید 114: برنامه ذيل 20 عدد اعشاري را گرفته تشكيل يك آرايه داده سپس كوچكترين عنصر آرايه را مشخص و نمايش ميدهد. #include <iostream.h>#include <conio.h>int main( ){float x[20], s;int j ;clrscr( ) ; for(j=0; j<20 ; ++j) cin >> x[ j ];s = x[0 ] ;for(j=1; j<20; ++j)if(x[ j] <s) s = x[ j ];cout << s << endl; return 0;}
اسلاید 115: برنامه زير 100 عدد اعشاري را گرفته بروش حبابي (Bubble sort) بصورت صعودي مرتب مينمايد. #include <iostream.h>#include <conio.h>int main ( ){float x[100] , temp;int i,j ; clrscr( );for(i=0; i<100; ++i) cin >> x[i ];for(i=0; i<99; i++)for(j=i+1 ; j<100; j++)if(x[ j ] < x[i ]{ temp = x[ j ] ;x[ j ] = x[ i ]; x[ i ] = temp ;}for(i=0; i<=99; i++)cout << x[ i ] << endl;return 0 ;}
اسلاید 116: آرايههاي دوبعدي (ماتريسها)ماتريسها بوسيله آرايههاي دوبعدي در كامپيوترنمايش داده ميشوند. int a[3][4];
اسلاید 117: تخصیص مقادیر اولیه به عناصر آرایه : int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;
اسلاید 118: int a[3][4]= { {1}, {2,3} , {4,5,6} } ;نکته 1 :
اسلاید 119: int a[3][4]= {1, 2, 3, 4,5 } ;نکته 2 :
اسلاید 120: در يك آراية دوانديسي، هر سطر، در حقيقت آرايهاي يك انديسي است. در اعلان آرايههاي دوانديسي ذكر تعداد ستونها الزامي است. نکته 3 :int a[ ][4]={1,2,3,4,5};
اسلاید 121: برنامه زير يك ماتريس 3*4 را گرفته مجموع عناصر آن را مشخص نموده و نمايش ميدهد.#include <iostream.h>#include <conio.h>int main( ){float x[3][4], total= 0.0;int i, j ;// generate matrix x.for(i=0; i<3; ++i)for (j=0; j<3; j++)cin >> x[ i ][ j ];// calculate the sum of elements.for(i=0; i<3; ++i)for(j=0; j<4; j++)tot + = x [ i ][ j ];cout << total = << total << endl; return 0 ;}
اسلاید 122: فصل ششمتوابع
اسلاید 123: فهرست مطالب فصل ششمتعریف تابعتابع بازگشتیتوابع درون خطیانتقال پارامترها از طریق ارجاعکلاس های حافظه ( storage classes )سربارگذاری توابع
اسلاید 124: تعریف توابع استفاده از توابع در برنامهها به برنامهنويس اين امكان را ميدهد كه بتواند برنامههاي خود را به صورت قطعه قطعه برنامه بنويسد. تا كنون كليه برنامههائي كه نوشتهايم فقط از تابع main( ) استفاده نمودهايم.
اسلاید 125: شكل كلي توابع بصورت زير ميباشند : return-value-type function-name (parameter-list){declaration and statements}نام تابع نوع مقدار برگشتي لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار كننده به تابع فراخوانده شده تعريف اعلانهاي تابع و دستورالعملهاي اجرائي
اسلاید 126: تابع زير يك حرف كوچك را به بزرگ تبديل مينمايد. char low_to_up (char c1){char c2;c2 = (c1>= a && c1<= z )?( A + c1- a ): c1;return (c2) ;}نام تابعنوع مقدار برگشتیپارامتری از نوع char
اسلاید 127: برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مينمايد. #include <iostream.h>char low_to_up(char c1){char c2;c2=(c1 >= a && c1 <= z )?( A +c1 - a ) : c1; return c2;}int main( ){char x;x=cin.get( );cout << low_to_up(x) ;return 0; }c2‘D’آرگومان
اسلاید 128: تابع maximum دو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند. int maximum(int x, int y){int z ;z=(x >= y)? x : y;return z;}
اسلاید 129: برنامه کامل که از تابع maximum جهت یافتن ماکزیمم دو مقدار صحيح استفاده می نماید.#include <iostream.h>int maximum(int x , int y){int z ;z=(x > y)? x : y ;return z;}int main( ){int a, b ;cin >> a >> b ;cout << maximum(a,b);return 0;}a, b آرگومانهای تابع maximumz15
اسلاید 130: نکته 1 :اسامي پارامترها و آرگومانهاي يك تابع ميتوانند همنام باشند.
اسلاید 131: برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده نمايش ميدهد. #include <iostream.h>long int factorial(int n){long int prod=1;if(n>1)for(int i=2; i<=n; ++i)prod *=i;return(prod);}int main( ){int n;cin >> n ;cout << factorial(n) ;return 0 ;}x!=1*2*3*4*…*(x-1)*xi در factorial2,3,4prod در factorial6
اسلاید 132: نکته 2 :وقتي در تابعي، تابع ديگر احضار ميگردد بايستي تعريف تابع احضار شونده قبل از تعريف تابع احضار كننده در برنامه ظاهر گردد.
اسلاید 133: نکته 3 :در اسلاید بعد مثالی در این زمینه آورده شده است.اگر بخواهیم در برنامهها ابتدا تابع main ظاهر گردد بايستي prototype تابع يعني پيش نمونة تابع كه شامل نام تابع، نوع مقدار برگشتي تابع، تعداد پارامترهائي را كه تابع انتظار دريافت آنرا دارد و انواع پارامترها و ترتيب قرارگرفتن اين پارامترها را به اطلاع كامپيلر برساند.
اسلاید 134: #include <iostream.h>#include <conio.h>long int factorial(int); // function prototype int main( ){int n;cout << Enter a positive integer << endl; cin >> n;cout << factorial(n) << endl; return 0 ;}long int factorial(int n){long int prod = 1;if(n>1)for(int i=2; i<=n; ++i)prod *= i;return(prod);}
اسلاید 135: نکته 4 :در اسلاید بعد مثالی در این زمینه آورده شده است.در صورتي كه تابع مقداري بر نگرداند نوع مقدار برگشتي تابع را void اعلان ميكنيم. و در صورتيكه تابع مقداري را دريافت نكند بجاي parameter- list از void يا ( ) استفاده ميگردد.
اسلاید 136: #include <iostream.h>#include <conio.h>void maximum(int , int) ;int main( ){ int x, y;clrscr( )cin >> x >> y;maximum(x,y);return 0;}void maximum(int x, int y){int z ;z=(x>=y) ? x : y ;cout << max value n << z<< endl; return ; } تابع مقداري بر نمی گرداند.
اسلاید 137: احضار بوسیله مقدار ( Call By Value )#include <iostream.h>int modify(int)int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return ; }a در modify40خروجی برنامه :204020
اسلاید 138: احضار بوسیله مقدار ( Call By Value )#include <iostream.h>int modify(int)int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return ; }a در modify40در این نوع احضار تابع حافظههاي مورد استفاده آرگومانها و پارامترها از هم متمايزند و هرگونه تغيير در پارامترها باعـــث تغيـــر در آرگومانهاي متناظر نميگردد.
اسلاید 139: نکته 5 :هر زمان که نوع مقدار برگشتي تابع int ميباشد نيازي به ذكر آن نیست و همچنين نيازي به تعريف پيش نمونه تابع نميباشد.
اسلاید 140: تابع بازگشتي (recursive functions)توابع بازگشتي يا recursive توابعي هستند كه وقتي احضار شوند باعث ميشوند كه خود را احضار نمايند.
اسلاید 141: نحوه محاسبه فاکتوریل از طریق تابع بازگشتیn != 1*2*3*…*(n-1) *nf(n) = n !f(n) =1 n=0 اگرf(n) =n *f(n-1) در غير اينصورتn!= 1* 2* 3* … *(n-2) *(n-1) *nn!=(n-1)! *nدر اسلاید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
اسلاید 142: تابع بازگشتی محاسبه فاکتوریل#include <iostream.h>long int factorial(int) ;int main( ){int n ;cout << n= ;cin >> n ;cout << endl << factorial = << factorial(n) << endl;return 0 ;}long int factorial(int n){if(n<=1)return(1);else return(n *factorical(n-1) ) ;}
اسلاید 143: نحوه محاسبه n امین مقدار دنباله فیبناکی از طریق تابع بازگشتی0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34, … دنباله فیبناکی : در اسلاید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.=fib(n)= جمله n اماگر n=1 0=fib(n)= جمله n اماگر n=2 1 در غير اينصورت fib(n-1)+fib(n-2)
اسلاید 144: برنامهزير n امين مقدار دنبالة فيبناكي (fibonacci) را مشخص و نمايش ميدهد. #include <iostream.h>long int fib(long int); // forward declaration int main( ){long int r ;int n ;cout << Enter an integer value << endl ;cin >> n ;r = fib(n) ;cout << r << endl ;return 0 ;}long int fib(long int n){if(n = = 1 || n= = 2)return 1 ;else return(fib(n-1) + fib(n-2) ) ;}
اسلاید 145: برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش ميدهد. #include <iostream.h>void reverse(void) ; // forward declaration int main( ){reverse( ) ;return 0 ;}void reverse(void)// read a line of characters and reverse it {char c ;if(( c=cin.get( )) != n ) reverse( ); cout << c ;return ;}
اسلاید 146: نکته :استفاده از آرايهها بعنوان پارامتر تابع مجاز است.
اسلاید 147: در برنامه زير تابع modify آرايه a را بعنوان پارامتر ميگيرد. #include <iostream.h>void modify(int [ ] ); // forward declaration int main( ){int a[5] ;for(int j=0; j<=4; ++j)a[ j ] = j+1 ;modify(a) ;for(j=0; j<5; ++j)cout << a[ j ] << endl ;return 0 ;}void modify(int a[ ]) // function definition {for(int j=0; j<5; ++j)a[ j ] += 2 ;for(j=0; j<5; ++j)cout << a[ j ] << endl ;return ;}خروجی : 1234534567
اسلاید 148: نکته :در صورتيكه آرايه بيش از يك بعد داشته باشد بعدهاي دوم به بعد بايستي در تعريف تابع و پيش نمونه تابع ذكر گردد.
اسلاید 149: #include <iostream.h>void printarr(int [ ][ 3 ]);int main( ){int arrl [2][3] = { {1,2,3}, {4,5,6} };arr2 [2][3]= {1,2,3,4,5};arr3 [2][3]={ {1,2}, {4} };printarr(arr1);cout << endl ;printarr(arr2);cout << endl ;printarr(arr3);return 0 ; }void printarr(int a[ ][3] ){for(int i=0; i<2; i++) {for(int j=0; j<3; j++)cout << a[ i ][ j ] << ;cout << endl ;} } خروجی :
اسلاید 150: توابع درون خطي (inline)كلمه inline بدين معني است كه به كامپيلر دستور ميدهد كه يك كپي از دستورالعلمهاي تابع در همان جا (در زمان مقتضي) توليد نمايد تا از احضار تابع ممانعت بعمل آورد.
اسلاید 151: اشکال توابع inlineبجاي داشتن تنها يك كپي از تابع ، چند كپي از دستورالعملهاي تابع در برنامه اضافه ميشود كه باعث بزرگ شدن اندازه يا طول برنامه ميشود. بنابراين از inline براي توابع كوچك استفاده ميگردد.
اسلاید 152: مثالی از توابع درون خطی#include <iostream.h>inline float cube(const float s) {return s*s*s; }int main( ){float side ;cin >> side ;cout << side << cube(side) << endl ; return 0 ;}
اسلاید 153: انتقال پارامترها از طريق ارجاعتاكنون وقتي تابعي را احضار ميكرديم يك كپي از مقادير آرگومانها درپارامترهاي متناظر قرار ميگرفت . این روش احضار بوسيله مقدار يا call by value ناميده شد. در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومانها و پارامترهاي متناظر بصورت اشتراكي مورد استفاده قرار ميگيرد. اين روش call by reference ناميده ميشود .
اسلاید 154: انتقال پارامترها از طريق ارجاعدر اين روش پارامترهائي كه از طريق call by reference عمل مينمايند در پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده ميشود.واضح است كه در تعريف تابع نيز بهمين طريق عمل ميشود.
اسلاید 155: مثال :#include <iostream.h>int vfunct(int); // for void rfunct (int &) ;int main( ){int x=5, y=10;cout << x << endl << vfunct(x) << endl << x << endl ;cout << y << endl ;rfunct(y) ;cout << y << endl ;return 0 ;}int vfunct(int a){return a *= a ; }void rfunct(int &b){b *= b ;}xy510خروجی :5 25510مقدار آرگومان x تغییر نمی کند.ادامه خروجی :100
اسلاید 156: نکته :وقتي پارامتري بصورت call by reference اعلان ميگردد اين بدان معني است كه با تغيير مقدار اين پارامتر در تابع احضار شده مقدار آرگومان متناظر نيز تغيير مينمايد.
اسلاید 157: برنامهزير با استفاده از fswap دو مقدار اعشاري را مبادله مينمايد.#include <iostream.h>void fswap(float & , float & );int main( ){float a=5.2, b=4.3;cout << a << endl << b ;fswap( a , b) ;cout << a << endl << b ;return 0 ;}void fswap(float &x , float & y){float t;t = x ;x = y ;y = t ;}
اسلاید 158: كلاسهاي حافظه (storage classes) متغيرها بدو طريق متمايز مشخص ميشوند يكي بوسيله نوع (type) آنها و ديگري بوسيله كلاس حافظه آنها. نوع متغير قبلاً اشاره شده بعنوان مثال int ، float ، double ، . . . ولي كلاس حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مينمايد.
اسلاید 159: بطور كلي كلاس حافظه متغيرها به چهار دستة تقسيم ميگردد : automaticstaticexternalregister
اسلاید 160: متغيرهاي automatic در درون يك تابع تعريف ميشوند و در تابعي كه اعلان ميشود بصورت متغيرهاي محلي براي آن تابع ميباشند. حافظه تخصيص داده شده به متغيرهاي automatic پس از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و دامنة متغيرهاي از نوع automatic تابعي ميباشد كه متغير در آن اعلان گرديده است. automatic
اسلاید 161: متغيرهاي static نيز در درون توابع تعريف ميشوند و از نظر وسعت و دامنه شبيه متغيرهاي automatic هستند ولي در خاتمة اجراي تابع، حافظه وابسته به اين نوع متغيرهـــا از بين نميرود بلكه براي فراخواني بعدي تابع باقي ميماند. static
اسلاید 162: مثال :#include <iostream.h>// program to calculate successive fibonacci numbers long int fib(int) ;int main( ){int n ;cout << how many fibonacci numbers? ;cin >> n ;cout << endl ;for(int j=1; j<=n; ++j )cout << j << << fib(j) << endl ;return 0 ;}long int fib(int count){static long int t1 = 1, t2=1;long int t ;t =(count <3) ?1 : t1 + t2 ;t2 = t1 ;t1 = t ;return(t) ;}بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع static مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 163: متغيرهاي از نوع external متغيرهائي هستند كه در بيرون از توابع اعلان ميشوند و وسعت و دامنه فعاليت آنها كليه توابعي ميباشد كه در زير دستور اعلان متغير قرار دارد. external
اسلاید 164: #include <iostream.h>int w; // external variablefuncta(int x, int y){cout << w ;w = x + y ;cout << endl << w << enld;return x%y ;}int main( ){int a, b, c, d;cin >> a >> b ;c=functa(a, b) ;d=functa(w, b+1);cout << endl << c << endl << d << endl << w ;return 0 ;}مثال :بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع external مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 165: وقتي متغيري از نوع register اعلان ميشود از كامپيوتر عملاً درخواست ميشود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد. register
اسلاید 166: کاربرد کلاس registerمعمولاً از نوع رجيستر براي شاخصهاي دستور تكرار و يا انديسهاي آرايهها استفاده ميشود. بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده دردستور cin نميباشند
اسلاید 167: سربارگذاري توابع (function overloading) در C++ اين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند. (از نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها)
اسلاید 168: #include <iostream.h>float addf(float , int);int addf(int , int);int main( ){int a=5, b=10 ;float d=14.75 ;cout << addf(a , b) << endl;cout << addf(d , b) << endl;return 0 ;}int addf(int x, int y){return x+y ;}float addf(float x, int y){return x+y ;}مثال :
اسلاید 169: فصل هفتمساختار ها و اشاره گرها
اسلاید 170: فهرست مطالب فصل هفتمساختارهاUnion هااشاره گرها ( Pointer)تعریف آرایهآرایه های دو بعدی و اشاره گرهاتخصیص حافظه بصورت پویا ( عملگر new )رشته ها و توابع مربوطه
اسلاید 171: ساختارها ساختارها شبيه آرايهها بوده بدين صورت كه يك نوع داده گروهي است كه فضاي پيوسته از حافظه اصلي را اشغال مينمايد. اما عناصر ساختار الزاماً از يك نوع نميباشند بلكه اعضاي يك ساختار ميتوانند از نوعهاي مختلفه از قبيل char ، int ، float ، … باشند.
اسلاید 172: تعريف ساختار struct time {int hour ; // 0 – 23int minute ; // 0 – 59int second; //} ;نام ساختاراعضا ساختار
اسلاید 173: struct account {int acc_no ;char acc_type;char name[80] ;float balance ;};ساختار account داراي چهار عضو ميباشد.acc_no شماره حساب از نوع intacc_type نوع حساب از نوع char name مشخصات صاحب حساب از نوع رشتة 80 كركتري balance مانده حساب از نوع float
اسلاید 174: به دو صورت می توان اعلان یک متغیر از نوع ساختار را نمایش داد :struct account {int acc_no;char acc_type;char name[80];float balance;} cust1, cust2, cust3;struct account {int acc_no ;char acc_type;char name[80];float balance;};account cust1, cust2, cust3;روش اول :روش دوم :
اسلاید 175: به ساختارها ميتوان مقدار اوليه نيز تخصيص داد account cust = {4236, r, Nader Naderi , 7252.5};
اسلاید 176: دسترسي به عناصر يك ساختار بمنظور دسترسي به عناصر يك ساختار از عملگر . استفاده ميگردد . عملگر. جزء عملگرهاي يكتائي ميباشد.
اسلاید 177: cust .acc_no = 4236cust .acc_type = rcust . name = Nader Nadericust . balance = 7252.5مثال :
اسلاید 178: نکته :عضو يك ساختار خود ميتواند يك ساختار ديگر باشد. struct date {int month;int day;int year;};struct account {int acc_no ;char acc_typer;char name[80];float balance ;date lastpay ; };اگرداشته باشيمaccount x, y ; بوسيله lastpay آنگاه عضوx.lastpay.day x.lastpay.monthx.lastpay.year مشخص ميگردد.
اسلاید 179: نکته : ميتوان آرايهاي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.struct struc1 {char name[40];int pay1;int pay2; } ; strucl cust[ ]= {nader, 3000 , 40000, sara, 4200, 6000, susan, 3700, 25000, saman, 4800 , 2000, };
اسلاید 180: برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو عدد مختلط را ميگيرد و مجموع آنها را مشخص و نمايش ميدهد. #include <iostream.h>int main( ){struct complex{float a;float b; } x, y, z;cout << enter 2 complex numbers << endl ;cin >> x.a>>x.b ;cout << endl;cin >> y.a >> y.b;z.a = x.a + y.a ;z.b = x.b + y.b ;cout << endl << z.a << << z.b;return 0 ;}x = a + ib i2= -1 بطوريكه y = c + idx+y =(a+c) + i(b+d)
اسلاید 181: unionunion از نظر ساختاري شبيه struct ميباشد . با اين تفاوت كه عضوهائي كه تشكيل union ميدهد همگي از حافظه مشتركي در كامپيوتر استفاده مينمايند. بنابراين استفاده از union باعث صرفهجوئي در حافظه ميگردد.
اسلاید 182: union id {char color [10];int size; } x , y; هر كدام از متغيرهاي x و y يك رشته 10 كركتري يا يك مقدار از نوع int ميباشد وكامپيوتر يك بلوك حافظه كه بتواند رشته 10 كركتري رادر خود جاي دهد ، برايcolor و size در نظر ميگيرد.مثال :
اسلاید 183: union xpq {int x ;char y[2] ; } p ;مثال :
اسلاید 184: اشارهگرها (Pointers) دادههائي كه در كامپيوتر در حافظه اصلي ذخيره ميشوند بايتهاي متوالي از حافظه بسته به نوع data اشغال ميكنند.
اسلاید 185: اشارهگرها (Pointers)با داشتن آدرس داده در حافظة اصلي ميتوان براحتي به آن داده دسترسي پيدا نمود و از طرف ديگر آدرس هر داده در حافظه آدرس بايت شروع آن داده ميباشد. int x = 613;
اسلاید 186: نکته :در كامپيوتر آدرسها معمولاً دو بايت اشغال مينمايند. اگر آدرس x را در px قرار دهيم آنگاه ميگوئيم كه px به x اشاره مينمايد.pxxآدرس متغير x را بوسيله &x نشان ميدهيم و عملگر & را عملگر آدرس مينامند. int x , *pxpx = &x ;
اسلاید 187: int y , x , *px ;x = 26 ;px = &x ;26pxxحال اگر دستور العمل x += 10 ; را بدهيم: 36pxxحال اگر دستورالعمل *px = *px + 7 ; بدهيم.43pxxمثال :
اسلاید 188: آرایه یک بعدی و اشاره گرهااولين عنصر آرايه بوسيله x[0] مشخص ميشود. آدرس اولين عنصر آرايه بوسيله &x[0] يا بوسيله x مشخص ميشود. آدرس i امين عنصر آرايه بوسيله &x[i-1] يا بوسيله x(i-1) مشخص ميشود. دو دستورالعمل زير با هم معادلند .x[ i ] = 82.5 ;*(x + i) = 82.5 ; از طرف ديگر اگر داشته باشيم float x[10];float *p;دو دستورالعمل زير معادلند.p = &x[2] ;p= x + 2 ;
اسلاید 189: ساختارها و اشاره گرهاميتوان اشارهگري را تعريف نمود كه به اولين بايت يك ساختار (struct) اشاره نمايد. struct struc1 { int a ; float b ; char c; int d ;} x, *px ; px = &x ; عبارت x.a معادل pxa معادل (*px).a ميباشد.
اسلاید 190: آرايههاي دوبعدي و اشارهگرها يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي ميتوان تعريف نمود.اگر x يك ماتريس 5 سطري و 4 ستوني از نوع اعشاري باشد قبلاً اين ماتريس را با float x[5][4]; معرفي كرديم. حال با استفاده از اشارهگرها بصورت زير معرفي نمائيم:float (*x)[4];
اسلاید 191: آرايههاي دوبعدي و اشارهگرها float (*x)[4];
اسلاید 192: در برنامه زير يك آرايه 5 عنصري از نوع int ايجاد شده و مقادير عناصر آرايه را به چهار طريق نمايش ميدهد. #include <iostream.h>#include <conio.h> int main( ){int x[ ]={12, 25, 6, 19, 100};clrscr( );int *px=x;//نام آرايه بدون انديس، اشاره به عنصر اول آرايه مينمايد for(int i=0; i<=4; i++)cout << *(x+i) << endl;//the second method for(i=0; i<5; i++)cout << x[ i ] << n;//the third method for(i=0; i<=4; i++)cout << px[ i ]<<endl;//the forth method for(i=0; i<=4; i++)cout << *(px+i)<<endl;return 0; }
اسلاید 193: تخصيص حافظه به صورت پويا يا (عملگر new) از عملگر new براي تخيصيص حافظه به صورت پويا می توان استفاده نمود ، در ضمن ميتوان براي بلوكي از حافظه كه تخصيص يافته مقدار اوليه تعیین نمود. newdeletedynamic memory allocation
اسلاید 194: براي تخصيص حافظه باندازه 20 مقدار از نوع int كه اشارهگر ptx به آن اشاره نمايد بصورت زير عمل ميشود. int *ptx;ptx = new int [20]; ptx به اولين داده از نوع int اشاره مينمايد. ptx+i به i+1 امين عنصر از فضاي پيوسته اشاره مينمايد.
اسلاید 195: برنامه زير يك فضاي n عنصري از نوع اعشاري در حافظه ايجاد نموده، سپس آنرا مقدار داده و مجموع مقادير رامشخص و نمايش ميدهد. #include <iostream.h>int main( ){int n;float *ptr, tot = 0.0;cout << enter a value for n << endl; cin >> n;ptr=new float [n];for(int j=0; j<n; ++j) { cin >> *(ptr + j); cout << n ; }for(j=0; j<=n-1; ++j) tot += *(ptr + j);cout << tot ;// in order to free the space use delete[ ] ptr ;return 0; }
اسلاید 196: برنامه زير آرايههاي n عنصري از ساختار را ايجاد مينمايد.#include <iostream.h>#include <conio.h> int main( ){struct rec {float a;int b; } ;int n; rec *ptr; clrscr( );cout << how many records? ncin >> n ;ptr = new rec[n];for(int i=0; i<n; ++i) {cout <<((ptr+i) b=i) << ;cout <<((*(ptr +i)).a = i+0.5) << endl ;delete [ ] ptr;return 0 ; }
اسلاید 197: برنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع swap جابهجا مينمايد.#include <iostream.h>#include <conio.h> void swap(float *, float *);int main( ){float a,b; cin >> a >> b; cout << a << endl << b << endl ;return 0; }void swap(float *px , float *py){ float t; t = *px; *px = *py; *py = t ; return; }
اسلاید 198: رشتهها و توابع مربوطه رشتهها در C++ ، آرايهاي از كركترها ميباشند كه با كركتر 0 ختم ميشوند. char name[ ]= sara;
اسلاید 199: رشته و اشاره گر هر رشته از طريق اشارهگري به اولين كركتر آن در دسترس قرار ميگيرد. آدرس يك رشته، آدرس كركتر اول آن ميباشد. به رشتهها ميتوان مقدار اوليه تخصيص داد. char *name = sara;
اسلاید 200: برنامه ذيل پنج اسم را بصورت 5 رشته در نظر گرفته آنها را بترتيب حروف الفباء مرتب نموده نمايش ميدهد.#include <iostream.h>#include <string.h>void sort(char *[ ]);int main( ){char *name[5] = {sara, afsaneh, babak, saman, naser };sort(name);// display sorted strings for(int i=0; i<5; ++i) cout << name[ i ] << endl;return 0; }sort(char *name[ ]){char *t;for(int i=0; i<4; ++i)for(int j=i+1; j<5; ++j)if(strcmpi(name[ i ], name[ j ]> 0) {// interchange the two strings t= name[ i ];name[ j ] = name[ i ];name[ i ] = t ;}return ; }
اسلاید 201: تابع strcmpi(s1, s2) رشتههاي s1 و s2 را با هم مقايسه نموده (بدون توجه به حروف كوچك و بزرگ) اگر رشته s1 برابر با رشته s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت بر ميگرداند.
اسلاید 202: تابع ) strcmp(s1, s2رشتههاي s1 و s2 را با هم مقايسه نموده اگر s1 برابر با s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت برميگرداند.
اسلاید 203: تابع ) strncmp(s1, s2,nحداكثر n كركتر از رشتة s1 را با n كركتر از رشتة s2 مقايسه نموده در صورتيكه s1 كوچكتر از s2 باشد يك مقدار منفي، اگر s1 مساوي با s2 باشد مقدار صفر در غير اينصورت يك مقدار مثبت برميگرداند.
اسلاید 204: تابع (strcat(s1, s2دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را به انتهاي رشتة s1 اضافه مينمايد. كركتر اول رشتة s2 روي كركتر پاياني 0 رشتة s1 نوشته ميشود ونهايتاً رشتة s1 را برميگرداند.
اسلاید 205: تابع (strncat(s1, s2,nدو رشته s1 و s2 ومقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر از رشتة s2 را در انتهاي رشتة s1 كپي مينمايد. اولين كركتر رشته s2 روي كركتر پاياني 0 رشتة s1 مينويسد ونهايتاً مقدار رشتة s1 را برميگرداند.
اسلاید 206: تابع (strlen(sرشتة s را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
اسلاید 207: تابع (strlen(sرشتة s را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
اسلاید 208: تابع strcpy(s1,s2) دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را در رشتة s1 كپي مينمايد و نهايتاً مقدار رشتة s1 را بر ميگرداند.
اسلاید 209: تابع (strncpy(s1, s2,nدو رشتة s1 , s2 و مقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر را از رشتة s2 در رشتة s1 كپي نموده، نهايتاً مقدار رشتة s1 را برميگرداند.
اسلاید 210: نكته مهمبراي استفاده از توابع مربوط به رشتهها بايستي حتماً در ابتدا برنامه #include <string.h> را قرار دهيم
اسلاید 211: #include <iostream.h>#include <string.h>#include <conio.h> int main( ){char *s1= happy birthday;char *s2= happy holidays ;clrscr( ); cout << strcmp(s1, s2) << endl;cout << strncmp(s1, s2, 7) << endl ;return 0; }مثال :
اسلاید 212: #include <iostream.h>#include <string.h>#include <conio.h> int main( ){char *s = sara; clrscr( );cout << strlen(s);return 0; }مثال :
اسلاید 213: تابع زیر معادل تابع کتابخانه strcmp می باشد.int nikstrcmp(char s[] , char t[] ){int i=0;while (s[i]==t[i] )if ( s[i++]=‘0’ )return 0;return (s[i]-t[i]);}
اسلاید 214: فصل هشتمبرنامه نویس شی گرا
اسلاید 215: فهرست مطالب فصل هشتمتعریف شی گراییچند ریختی (polymorphism)خاصیت ارث بریپشته (stack)ایجاد شیارث بریسازنده ها و نابود کننده هاتوابع دوستکلاس های دوستتوابع سازنده پارامتر دارتوابع سازنده یک پارامتریعضوهای staticکلاسهای تودرتوکلاس های محلیاستفاده از object ها بعنوان پارامترهای تابعبرگشت اشیاءانتساب اشیاءآرایه اشیاءاشاره گر به اشیاءاشاره گر thisتوابع مجازی و پلی مرفیسم
اسلاید 216: نرم فزارتعريف نرم فزار: به مجموعه برنامه، ساختار داده ای و مستندات نرم افزارگفته می شود.تعاريف مهندسی نرم افزار :-1 مهندسی نرم افزار عبارتست از کاربرد عملی علم کامپيوتر، علم مديريت و سايرعلوم برای تحليل، طراحی، ساخت، نگهداری نرم افزار و مستندسازی مورد نيازبرای استفاده در اجرا و نگهداری نرم افزار توليد شده-2 مهندسی نرم افزار عبارتست از کاربرد اصول مهندسی برای بهينه سازی روند توليد و نگهداری سيستم های نرم افزاری با هدف کاهش هزينه و افزايش قابليت اطمينانIEEE -3 :استفاده از روشهای سيستماتيک، با قاعده و قابل اندازه گيری برای توليد، بکارگيری و نگهداری نرم افزار-4 تعريف و استفاده از قواعد و اصول صحيح مهندسی است برای دستيابی به نرم افزاربصورت اقتصادی که دارای قابليت اطمينان بوده و بصورت کارا روی ماشين های واقعی کار کند.
اسلاید 217: منحنی نرخ خرابی سخت افزار نسبت به نرم افزار
اسلاید 218: منحنی نرخ خرابی ايده ال نرم افزار نسبت به زمان
اسلاید 219: منحنی نرخ خرابی واقعی نرم افزار نسبت به زمان
اسلاید 220: سيستمتعريف سيستم: يک مجموعه از مولفه هايی که برای انجام دادن يک کار و يا کنترل يک فرايند سازماندهی شده باشند.توليد يک نرم افزار بطور کلی دارای سه فاز است :-1 تعريف-2 توليد-3 نگهداریدر فاز تعريف بررسی های زير انجام می شود:-1 چه اطلاعات و داده هايی بايد پردازش شود .-2 چه عمليات و کارهايی لازم است.-3 چه واسط هايی) نرم افزاری يا سخت افزاری) لازم است.-4 چه محدوديت هايی وجود دارد .-5 ضوابط ارزيابی سيستم بايد مشخص شود .* در اين فاز بر روی اينکه چه چيزی مورد نياز است، تاکيد می شود.
اسلاید 221: فاز تعريف* به طور کلی در فاز تعريف سه قدم(گام) اصلی وجود دارد :-1 تجزيه و تحليل سيستم : در اين گام نقش هر مولفه در (سيستم سيستمی که قرار است توليد شود) و نقش کل سيستم نيز تعيين می شود. به عبارت ديگر حوزه عمل سيستم و بستر لازم چه سخت افزاری و چه نرم افزاری تعيين می شود. به علاوه بررسی کلان در مورد کل سازمان و کارهای مربوطه در اين گام انجام می گيرد.-2 برنامه ريزی پروژه انجام می شود. در اين گام، برنامه ريزی انسانی و هزينه و زمان و زمانبندی انجام کارها مشخص می شود.-3 تجزيه و تحليل نيازهای سيستم مورد نظر. در اين مرحله عمليات مورد انتظار از سيستم تعيين و پرونده های )بانکهای (اطلاعاتی لازم تعريف و سپس فرمهای ورودی و خروجی مشخص می شود.گام سوم به يک تکه از کل نگاه می کند ولی گام يا قدم اول کل سيستم را میبيند که در خيلی از پروژه ها،متاسفانه به کل توجهی نمی شود. در نتيجهسيستم بصورت وصله وصله در می آيد نه يک تکه.
اسلاید 222: فاز توليدفاز توليد: در اين فاز بر روی چگونگی تاکيد می شود و چگونگی تبديل مرحله تحليل )گام 3 ) به نرم افزار(برنامه ها(مورد توجه قرار می گيرد .- ساختار داده ها و معماری نرم افزار تعيين می شود.جزئيات رويه ها تعيين می شودچگونگی تبديل طراحی به برنامه کامپيوتری مشخص می شود.- ايجاد داده های آزمايشی برای تست نرم افزارسه گام اصلی در اين فاز وجود دارد: -1 طراحی نرم افزار: در اين گام نيازمنديهای نرم افزار به صورت مجموعه ای از نمايشها (مانند گرافيکی، جدولی و غيره) که ساختمان داده ها و معماری والگوريتم ها را توضيح می دهد، تبديل می شود.-2 توليد کد: در اين گام، نتايج طراحی با کمک يک زبان برنامه سازی به برنامه ها تبديل می شود معمولا از4GL , 3GL استفاده می شود. البته اين به پارامترهای بسياری از جمله موقعيت مکانی و زمانی سازمان، تکنولوژی فعلی سازمان، روش طراحی ( مثلا شئی گرا) و ... بستگی دارد.-3 تست نرم افزار: در اين گام، نرم افزار توليد شده را جهت بر آورده شدننيازهای مشتری تست می کنيم.
اسلاید 223: فاز تعمير و نگهداریفاز تعمير و نگهداری :در اين فاز روی تغييراتی که پس از تحويل به مشتری پيش می آيد تاکيد می شود . اين تغييرات عبارتند از :-1 تعميرات اصلاحی (corrective maintenance) -2 تعميرات تطبيقی (adaptive maintenance) به عنوان مثال سيستم عامل تغيير کرد يا زبان برنامه سازی جديد آمد و يا تغييراتی سخت افزاری اعمال گرديد يا در قوانين سازمانی تغييراتی داده شد .-3 تعميرات تکميلی (perfective maintenance) به عنوان مثال دانشجويان شبانه هم اضافه شود و ...
اسلاید 224: فرایند تولید نرم افزارتمام کارهای توسعه و ارايه يک نرم افزار را می توان يک حلقه حل مشکل طبق شکل زير توصيف کرد
اسلاید 225: فرایند تولید نرم افزارچهار مرحله در شکل فوق :- وضع موجود : نمايانگر وضعيت موجود امور است .- تعريف مساله: ليست نيازها و خواسته ها و مشکلات و کاستی ها مشکل يا مشکلاتی که بايد حل شود- توسعه فنی: مشکل را از طريق بکارگيری فنآوری حل می کند .- يکپارچه سازی راه حل : راه حل هايی که در طی فرايند توسعه بدست می آيند، يکپارچه کرده و نتايج حاصل (مثل اسناد، برنامه ها، داده ها، عملکرد کسب و کار جديد، محصول جديد ) را بهکسانی که راه حل را در مرحله اول تقاضا کرده اند، ارايه میدهد
اسلاید 226: مدل آبشاری خطی -ترتيبی چرخه حيات نرم افزار بصورت کلاسيک .:
اسلاید 227: نمونه سازی وقتی نمونه نهايی ساخته شد و اهداف لازمه مثل تعيين ليست خواسته ها و نيازهای مشتری / کاربران حاصل گرديد، می توان از يک مدل فرايندديگر استفاده کرد و نرم افزار را بصورت مهندسی توليد کرد .
اسلاید 228: مدل نمونه سازی معايب اين روش:- مشتری يک نسخه کاری از نرم افزار را می بيند و نمی داند که اين نمونه بدون در نظر گرفتن کيفيت کلی نرم افزار و يا قابليت نگهداری دراز مدت ساخته شده. وقتی به او بگوئيم که اين محصول بايستی دوباره ساخته شود مشتری ناراحت می شود.- توليد کننده اغلب برای اينکه نمونه را سريع به پايان برساند به خيلی از مسايل توجه نمی کند. يک سيستم عامل نامناسب يا زبان برنامه نويسی نامناسب، چون در دسترس و شناخته شده هستند بکار می روند. يک الگوريتم ناکارامد فقط برای نمايش قابليت انجام يک کار بکار می رود. بعد از مدتی توليد کننده با اين انتخابها آشنا شده و دلايل نامناسب بودن آنها را فراموش می کند.- توقف اين سيکل مشکل است. مشتری دوست دارد دائم يکسری ويژگيها اضافه شود.- مشتری فکر می کند توليد نرم افزار به سادگی همين نمونه (ماکت) می باشد . بنابراين در زمان تحويل نرم افزار و هزينه انجام پروژه، ممکن است با مشتری با مشکل مواجه شويم.- ممکن است مشتری وقت لازم را برای تعامل و ارزيابی نگذارد يا مشتری بسادگی در دسترس نباشد.• بنابراين با اينکه مدل فرايند نمونه سازی يک الگوی موثر در مهندسی نرم افزاراست بايستی مسايلی را در نظر گرفت. از ابتدا قوانينی را تعريف کرد. مشتری و توليد کننده بايستی هر دو موافقت کنند که اين نمونه به عنوان مکانيزمی برای تعريف نيازها تعريف شده است. پس از آن بايستی تمام آن يا قسمتی از آن دور انداخته شود و نرم افزار مورد نظر با در نظر گرفتن کيفيت و قابليت نگهداری توليد شود.• از اين مدل زمانی مناسب است استفاده کنيم که نيازهای مشتری واضح و مشخص نيست و ابهام در خواسته های کاربر وجود دارد. همچنين اگر می خواهيم واسط کاربر مناسبی داشته باشيم يا کارايی يک الگوريتمی و ... را بررسی کبنم، نمونه سازی می تواند استفاده شود.
اسلاید 229: نمونه سازی وقتی نمونه نهايی ساخته شد و اهداف لازمه مثل تعيين ليست خواسته ها ونيازهای مشتری / کاربران حاصل گرديد، می توان از يک مدل فرايند ديگر استفاده کرد و نرم افزار را بصورت مهندسی توليد کرد .
اسلاید 230: تعریف شی گراییبرنامه نويسي شئ گرا يا oop يك روش جديد برنامه نويسي ميباشد كه در آن از ويژگي ساختيافته همراه با چند ويژگيهاي قوي جديد استفاده ميشود. زبان برنامه نويسي C++ امكان استفاده از oop را به راحتي فراهم مينمايد. در oop ، بطور كلي مساله به تعدادي زيرگروه قطعات مربوط بهم شكسته ميشود كه براي هر زير گروه code و data تهيه شده و نهايتاً اين زيرگروهها تبديل به unit ها يا واحدهائي ميشود كه objects (يا اشياء) ناميده ميشوند.
اسلاید 231: انواع داده انواع داده اي پايهدر همه زبانهاي برنامه نويسي وجود دارند در زبان C++ و C intfloatCharاشياي دنيا واقعي را بايد با مجموعه اي از اين متغير ها نمايش دادمثال: صندلي داراي ويژگي هايي مانند وزن، ابعاد، رنگ، مالك، قيمت و ... است
اسلاید 232: • در زبان هاي برنامه نويسي شي گرا، مي توان انواع جديد را تعريف كرد • انواع جديد، نوع داده انتزاعي (ADT) ناميده مي شوند • • ويژگي هاي (ADT) – داراي مجموعه اي از ويژگي ها است– مجموعه اي از عمليات دارد كه روي ويژگي ها كار مي كنند– ويژگي ها بسته بندي مي شوند• ويژگي ها تنها توسط عمليات تعريف شده براي ADT قابل دسترس هستند • از بيرون ADT نمي توان به طور مستقيم به ويژگي ها دسترسي داشت • دسترسي از بيرون، به صورت غير مستقيم و از طريق عمليات تعريف شده براي ADT ممكن است انواع داده
اسلاید 233: انواع داده
اسلاید 234: در زبان C++، انواع داده انتزاعي با استفاده از كلاس ها تعريف مي شوندويژگي هاي ADT، داده هاي عضو كلاس يا فيلد ها يا صفت ها گفته مي شوندعمليات ADT توابع يا متدهاي كلاس ناميده مي شوند ، • كلاس و شي– كلاس، تعريف كلي براي يك ADT است– شي، نمونه اي از كلاس است و در زبانهاي برنامه نويسي يك نهاد زماناجرا استانواع داده
اسلاید 235: تعریف کلاس• داده ها و توابع خصوصي تنها درون توابعكلاس در دسترس هستند • داده ها و توابع عمومي، هم درون كلاس و همبيرون كلاس در دسترس هستند ويژگي بخش ها حفاظت شده نيز در ار ثبريبررسي خواهد شدداده ها و توابع حفاظت شده • تعريف اشيايي از نوع كلاسclass ClassName{داده ها و توابع خصوصي public:داده ها و توابع عمومي private:داده ها و توابع خصوصي protected: داده ها و توابع حفاظت شده اشيايي از كلاس{; نام شي نام كلاس;
اسلاید 236: مثال : کلاس کارمندClass employee{char name[26]; // داده ها و توابع به صورت پيش فرض خصوصي هستند public:void PutName(char *s); // توابع عموميvoid GetName(char *s);void PutAge(double age);double GetAge();private:double Age; // داده خصوصي} em1 , em2; // تعريف شي هنگام تعريف كلاس Employee em3 , em4; // تعريف شي پس از تعريف كلاس
اسلاید 237: void employee::PutName(char *s){ …}هنگام تعريف توابع كلاس، بايد نام كلاس و عملگر تفكيك دامنه(::) را قبل از نام تابع بیاوریم void employee::GetName(char *s){ …}…مثال : کلاس کارمند
اسلاید 238: سازنده های کلاس• اعضاي داده اي كلاس را چگونه مي توان مقدار دهي اوليه كرد– مي توان يك تابع با نام دلخواه و بدون پارامتر ورودي تعريف كرد كه متغير ها را مقدار دهي اوليه كند (مثلا همه را صفر كند)• سازنده– كلاس مي تواند تابع عضو ويژه اي به نام سازنده داشته باشد– تابع سازنده همنام كلاسي است كه در آن تعريف شده است– هنگام ايجاد اشيايي از كلاس به طور خودكار اجرا مي شود
اسلاید 239: سازنده های کلاس
اسلاید 240: سازنده های کلاس
اسلاید 241: سازنده با پارامتر ورودي• سازنده با پارامتر ورودي– سازنده ها مي توانند پارامتر ورودي داشته باشند– معمولا، اين پارامترها براي مقدار اوليه دادن به اعضاي شي به كارمي روند• چند نكته– اگر هنگام تعريف يك شي، آن را با يك شي ديگر مقداردهي كنيم،سازنده آن فراخواني نمي شود
اسلاید 242: سازنده کلاس
اسلاید 243: سازنده کلاس
اسلاید 244: سازنده با یک پارامتر• اگر يك سازنده داراي يك پارامتر باشد، حالت ويژه اي ازسازنده استتفسير مي شود ob(i) به صورت ob = i ، – در اين حالت– تابع سازنده با يك پارامتر، تبديل نوعي از پارامتر به نوع كلاسانجام مي دهد
اسلاید 245: سازنده کپی• هنگامي كه شي يك كلاس به تابع فرستاده مي شود، يك كپي ازشي محل فراخواني در شي داخل تابع ايجاد مي شوداين كار هنگام بازگرداندن (return) نيز صورت مي گيرد – ايجاد يك كپي از شي داخل تابع كه بازگردانده مي شود در شيموقتي كه در محل فراخواني ايجاد مي شود• چه موقع نوشتن سازنده كپي ضروري است؟– كلاس داراي آرايه پويا باشد (مانند كلالاس رشته با طول متغير) و– توابعي وجود داشته باشند (عضو يا غير عضو) كه اشيايي از نوعكلاس را به عنوان ورودي بگيرند يا به عنوان خروجي باز گردانند
اسلاید 246: مخربها• مخرب– يك تابع عضو ويژه از كلاس است– همنام با كلاس است و با يك كاراكتر ~ شروع مي شود– هنگامي كه يك شي از بين مي رود به صورت خودكار فراخواني مي شود• هنگام پايان يافتن عمر متغيرهاي محلي در انتهاي تابع• هنگام بكار گرفتن عملگر delete براي از بين بردن يك متغير با فضاي پويا• نوشتن مخرب براي كلاس زماني كه برخي اعضاي داده اي آن حافظه پويا دارند، ضروري است
اسلاید 247: کلاس رشته با طول متغیر
اسلاید 248: کلاس رشته با طول متغیر
اسلاید 249: کلاس رشته با طول متغیر
اسلاید 250: کلاس رشته با طول متغیر
اسلاید 251: آرگومان های پیش فرض• مي توان هنگام تعريف توابع، مقدارهاي پيش فرضي به ورودي هانسبت داد– اگر هنگام فراخواني توابع، پارامتر مربوط قيد نشود، مقدار پيش فرض بهآرگومان اختصاص مي يابد• آرگومان هاي پيش فرض در سازنده ها– سازنده ها مي توانند آرگومان هاي پيش فرض داشته باشند– در اين حالت، اگر هنگام فراخواني سازنده آرگوماني به آن داده نشود، ارزشدهي اوليه به كلاس با استفاده از مقدارهاي پيش فرض انجام مي شود– سازنده اي كه برنامه نويس همه آرگومان هاي آن را به صورت پيش فرضمشخص مي كند، سازنده پيش فرض ناميده مي شود– در هر كلاس تنها يك سازنده پيش فرض مي تواند وجود داشته باشد
اسلاید 252: آرگومان های پیش فرض
اسلاید 253: آرگومان های پیش فرض
اسلاید 254: آرگومان های پیش فرض
اسلاید 255: توابع دوست • گاهي لازم است، يك تابع غير عضو به اعضاي خصوصيكلالاس دسترسي داشته باشد• دوستي: هنگامي كه يك كلاس دوست يك تابع غير عضو يايك كلالاس ديگر است، امكان دسترسي به اعضاي خصوصي آندر تابع يا كلاس دوست فراهم مي شود• friend <function signature>;• Example: friend void Print(Myclass ,int );
اسلاید 256: توابع دوست
اسلاید 257: توابع دوست
اسلاید 258: کلاس های دوست • كلاس ها را نيز مي توان دوست كلاس هاي ديگري تعريف كرد• كلاس دوست و همه توابع عضو آن به اعضاي خصوصيكلالاس ديگر دسترسي دارند• friend class Circle;
اسلاید 259: کلاس های دوست
اسلاید 260: کلاس های دوست
اسلاید 261: کلاس های دوست
اسلاید 262: نکته مهم :تمام زبانهاي برنامه نويسي شيگرا داراي سه خصوصيت مشترك زير ميباشند : الف: encapsulation (محصورسازي) ب: polymorphism (چندريختي) ج:inheritance (ارث بري)
اسلاید 263: محصورسازی (Encapsulation ) محصورسازي مكانيزمي است كه code و data را بهم وصل نموده و هر دوي آنها را از استفادههاي غيرمجاز مصون نگه ميدارد. شي يك مؤلفه منطقي است كه data و code را محصور نموده و code باعث دستكاري و پردازش data ميشود.
اسلاید 264: polymorphism (چند ريختي)چند ريختي مشخصهاي است كه بيك وسيله امكان ميدهد كه باتعدادي از سيستمها يا عميات يا دستگاهها، مورد استفاده قرار گيرد.
اسلاید 265: inheritance (ارث بري)ارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود.
اسلاید 266: پشته (stack) پشته ساختاري است كه داراي خاصيت last in first out ميباشد. پشته فضاي پيوسته در حافظه اشغال مينمايد. عملياتي كــه روي پشته انجام ميشوند عبارتند از :الف: push، كه باعث ميشود يك عنصر وارد پشته شده.ب: pop ، كه باعث ميشود يك عنصر از پشته خارج گردد.
اسلاید 267: ايجاد شي (object)بمنظور ايجاد يك شي بايستي از كلمة رزروشده class استفاده نمود. class از نظر ظاهر شبيه ساختار يا struct ميباشد. پشته را بعنوان يك object ميتوان در نظر گرفت كه data آن شامل يك آرايه و يك tos ، و عملياتي كه روي اين object انجام ميشود عبارتست از push، initialize ، pop كردن پشته.
اسلاید 268: مثال :#define SIZE 100// this creates the class stack.class stack { private : int stck[SIZE]; int tos;public: void init( );void push(int i);int pop( ); };بدين معني است كه stck و tos بوسيله توابعي كه عضو object نباشند غير قابل دسترسي هستند. و اين يكي از روشهاي محصور سازي اقلام دادههاست. بدين معني است كه بوسيله ساير قطعات برنامه قابل دسترسي ميباشد.
اسلاید 269: نکته : فقط توابع عضو ميتوانند به متغيرهاي عضو از نوع private دسترسي داشته باشند. بايستي توجه داشت كه اگر نوع عضوي مشخص نگردد آن عضو به صورت اتوماتيك private می باشد.Private
اسلاید 270: نحوه تعریف تابع عضو یک کلاس void stack : : push(int i){ if(tos = = SIZE ) { cout << stack is full.; return; } stck[tos]= i ; tos ++ ;}عملگر: : مشخص مينمايد كه تابع متعلق به كدام object ميباشد. عملگر : : عملگر scope resolution ناميده ميشود.
اسلاید 271: برنامه کامل stack :#include <iostream.h>#define SIZE 100// this creates the class stack. class stack { int stck[SIZE]; int tos;public:void init(int i); int pop( ); void push(int i); };void stack : : init( ){ tos = 0 ;}void stack : : push(int i){ if(tos = = size) { cout << stack is full. ; return ; }stck[tos] = i ;tos ++ ;}int stack : : pop( ){ if(tos = = 0) { cout << stack underflow. ; return 0 ; } tos - - ; return stck[tos]; }int main( ){stack st1, st2; // create two objectsst1. init( ); st2.init( );st1.push(1);st2.push(2);st1.push(3);st2.push(4);cout << st1.pop( ) << endl;cout << st1.pop( ) << endl;cout << st2. pop( ) << endl;cout << st2. pop( ) << endl;return 0; }
اسلاید 272: ارث بریارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود. در اسلاید بعد مثالی از ارث بری آورده شده است.
اسلاید 273: در روبرو object اي بنام ساختمان يا building تعريف گرديده است. هر ساختمان داراي تعدادي اطاق، تعدادي طبقه و سطح زير بنا نيز ميباشد. از طرف ديگرتوابعي كه براي شي تعريف شده :class building {int rooms;int floors;int area;public:void set_rooms(int num);int get_rooms( );void set_floors(int num);int get_floors( );void set_area(int num);int get_area( ); };حال object ديگري بنام house تعريف مينمائيم كه نه تنها داراي تمام اعضاي شي building ميباشد بلكه دارای دو اقلام داده اضافي و چهار تابع اضافي ميباشد. دراينجا عملاً شي house از شي building ارث ميبرد :// house is derived from building class house : public building {int bedrooms; int baths;public: void set_bedrooms(int num);int get_bedrooms( );void set_baths(int num);int get_baths( ); };مثال :
اسلاید 274: نکته : در مثال قبل building را base class و house را derived class می نامند . شي house تمام اعضاي building را دارا است بعلاوه اينكه داراي متغيرهاي عضوي اضافي bedrooms ، baths و همچنين توابع عضوي set_baths()، set_bebrooms()، get_baths()، get_bedrooms()نيز ميباشد. . Inheritance
اسلاید 275: سازندهها و نابودكنندهها (constructors and destructors)Initialization يا مقدار اوليه دادن بصورت اتوماتيك از طريق تابعي انجام ميشود بنام تابع constructor يا تابع سازنده. تابع سازنده تابع مخصوصي است كه عضوي از كلاس بوده و همنام با كلاس ميباشد.
اسلاید 276: سازندهها و نابودكنندهها (constructors and destructors) تابع نابود كننده يا destructor ، عكس عمل تابع سازنده را انجام ميدهد. وقتي كه شياي از بين ميرود بصورت اتوماتيك تابع نابود كننده آن فراخواني ميگردد.
اسلاید 277: توابع دوست (friend functions) با استفاده از كلمة friend اين امكان وجود دارد كه به تابعي كه عضو كلاس نميباشد اجازه دسترسي به متغيرهاي private كلاس را داد. براي آنكه تابعي را دوست اعلان نمائيم از كلمه friend قبل از تعريف تابع استفاده مينمائيم. در اسلاید بعد مثالی آورده شده است.
اسلاید 278: #include <iostream.h>#include <conio.h>class myclass {int a,b;public :friend int sum(myclass x);void set_ab(int i, int j);};void myclass :: set_ab(int i, int j){ a=i; b=j; }//sum is not a member function int sum(myclass x){return s.a + x.b;}مثال :int main( ){myclass n;clrscr( );n. set_ab(5,8);cout << sum(n);return 0 ; }
اسلاید 279: نکته : 1-كلاسي كه از كلاس ديگر ارث ميبرد ، توابع دوست آن كلاس را به ارث نميبرند. بعبارت ديگر يك derived class ، توابع دوست را به ارث نميبرد.2-توابع دوست داراي مشخصه نوع ذخيره نميباشند يعني توابع دوست را نميتوان بصورت static يا external تعريف نمود.
اسلاید 280: كلاسهاي دوست (friend classes) اين امكان وجود دارد كه يك كلاس دوست كلاس ديگري باشد . در چنين وضعيتي تابع دوست به كليه اسامي private تعريف شده در كلاس ديگر دسترسي دارد. در اسلاید بعد مثالی آورده شده است.Friend Class
اسلاید 281: #include <iostream.h>class coins {enum units {penny, nickel, dime, quarter, half_ dollar};friend class amount; };class amount {coins :: units money;public: void setm( );int getm( );} ob;void amount :: setm( ){money = coins :: dime;}int amount :: getm( ){return money;}مثال :int main( ){ob.setm( );cout << ob.getm( );return 0 ; }
اسلاید 282: توابع سازنده پارامتردار امكان انتقال آرگومانها به توابع سازنده وجود دارد. معمولاً از اين آرگومانها براي initialize نمودن شي در زمان ايجاد آن استفاده ميگردد. در اسلاید بعد مثالی آورده شده است.
اسلاید 283: #include <iostream.h>#include <conio.h>class myclass { int x, y; public : myclass(int i, int j) {x = i; y=j; } void show( ) {cout << x << endl << y; } };int main( ) { myclass obj( 3 , 5); clrscr( ); obj.show( ); return 0; }مثال :
اسلاید 284: توابع سازنده يك پارامتري#include <iostream.h>#include <conio.h>class myclass{ int x; public: myclass(int i) {x=i;} int getx( ) {return x;} };int main( ){clrscr( );myclass obj=126; // منتقل كن i را به 126cout << obj.getx( );return 0 ; }
اسلاید 285: عضوهاي static اگر عضو دادهاي بصورت static اعلان گردد اين بدين معني است كه كامپيلر فقط يك كپي از متغير مذكور را نگهداري نموده و تمام object ها بايستي بصورت اشتراكي از آن كپي استفاده نمايند. براي اينكار ميبايستي از كلمه static قبل از اعلان عضو استفاده نمود. در اسلاید بعد مثالی آورده شده است.
اسلاید 286: #include <iostream.h>class shared{ static int a; int b; public : void set(int i, int j) {a=i; b=j; } void show( ); };int shared :: a ; // define avoid shared :: show( ) { cout << static a: << a << endl; cout << nonstatic b: << b << endl; }مثال :int main( ){ shared x,y; x.set(1,1); // set a to 1x.show( );y.set(4,4); // change a to 4y.show( );x.show( );return 0; }
اسلاید 287: nested classes (كلاسهاي تودرتو)ميتوان يك كلاس را در يك كلاس ديگر تعريف نمود. اما بعلت اينكه در C++ براي كلاسها خاصيت ارث بري وجود دارد نيازي معمولاً به تعريف نمودن يك كلاس در كلاس ديگر نيست Nested Classes
اسلاید 288: local classes (كلاسهاي محلي)وقتي كه كلاسي در درون يك تابع تعريف ميشود اين كلاس فقط براي آن تابع شناخته شده است و براي توابع ديگر ناشناخته ميباشد. چنين كلاسي را كلاس محلي مينامند. Local Classes
اسلاید 289: در مورد كلاسهاي محلي رعايت نكات زير ضروري است : تمام توابع عضو بايستي در درون كلاس تعريف گردند.از متغيرهاي محلي، تابعي كه كلاس در آن تعريف شده نميتواند استفاده نمايد.از متغيرهاي عضوي static نميتوان استفاده نمود.
اسلاید 290: استفاده از object ها بعنوان پارامترهاي توابع از object ها ميتوان بعنوان پارامترهاي توابع استفاده نمود و مكانيزم انتقال آرگومانها و پارامترها بصورت call by value ميباشد.
اسلاید 291: برگشت اشياء (returning objects)مقدار برگشتي يك تابع ميتواند يك object باشد. در اسلاید بعد مثالی آورده شده است.
اسلاید 292: #include <iostream.h>class myclass {int i ;public :void set_ i(int n) { i=n;}int get_i( ) {return i;} };myclass funct( ); // return an object int main( ){ myclass ob; ob=funct( ); cout << ob.get_i( ) << endl; return 0; } myclass funct( ) { myclass x ; x.set_i(1); return x; }مثال :
اسلاید 293: انتساب اشياء (object assignment)در صورتيكه دو تا object از يك نوع باشند ميتوان يك object را بديگري انتساب نمود. در اسلاید بعد مثالی آورده شده است.
اسلاید 294: #include <iostream.h>#include <conio.h>class myclass{ int i; public: void set_i(int n) {i=n;} int get_i( ) {return i;} };int main( ){myclass ob1, ob2; obl.set_i(126);ob2= ob1; // assign data from ob1 to ob2 clrscr( );cout << ob2.get_i( );retrun 0 ; } مثال :
اسلاید 295: آرايه اشياء (array of objects)امكان استفاده از آرايه در مورد اشياء ميباشد. بعبارت ديگر ميتوان در برنامه ها آرايهاي از object ها داشته باشيم.در اسلاید بعد مثالی آورده شده است.
اسلاید 296: #include <iostream.h>#include <conio.h> class myclass{ int i; public: void set_i(int j) {i=j;} int get_i( ) {return i;}};int main( ){clrscr( );myclass ob[3];int i;for(i=0; i<3; i++) ob[ i ].set_i(i+1);for(i=0; i<3; i++) cout << ob[ i ].get_i( ) << endl; return 0; }مثال :
اسلاید 297: اشارهگر به اشياء (pointers to objects )در مورد اشياء نيز از اشارهگرها نيز ميتوان استفاده نمود. از عملگر در اين مورد استفاده ميشود. در اسلاید بعد مثالی آورده شده است.
اسلاید 298: #include <iostream.h>#include <conio.h>class myclass{ int i ; public: myclass( ) {i=0;} myclass(int j) {i=j;} int get_i( ) {return i;} }; int main( ) { myclass ob[3]= {1, 2, 3}; myclass *p; int i; p=ob; // get start of array for(i=0; i<3; i++) { cout << p get_i( ) << endl; p++; // point to next object } return 0; }مثال :
اسلاید 299: اشارهگر this (this pointer)هر تابع عضو يك كلاس داراي يك پارامتر مخفي بنام this pointer ميباشد. this اشاره به object خاصي مينمايد. در اسلاید بعد مثالی آورده شده است.
اسلاید 300: #include <iostream.h>class pwr {double b;int e;double val;public:pwr(double base, int exp);double get_pwr( ) {return val;}};pwr :: pwr(double base, int exp){this b=base;this e=exp;this val =1;if(exp = = 0) return;for(; exp > 0 ; exp )this val = this val *this b;}int main( ){pwr x(4.0, 2) , y(2.5, 1), z(5.7,0);cout << x.get_pwr( ) << ;cout << y.get_pwr( ) << ; cout << z.get_pwr( ) << n ;return 0; }مثال :
اسلاید 301: توابع مجازي و پلي مرفيسم (virtual functions)تابع مجازي، تابعي است كه در base class تعريف شد و بوسيله derived class تغير داده ميشود. براي اعلان يك تابع مجازي بايستي از كلمه virtual استفاده نمائيم.تغير تابع در كلاس مشتق روي تابعي كه در كلاس پايه (base class ) تعريف شده انجام ميشود. در اسلاید بعد مثالی آورده شده است.
اسلاید 302: #include <iostream.h>class base {public :virtual void vfunc( ){cout << this is base s vfunc( ) n ;} };class derived1 : public base {public:void vfunc( ) {cout << this is derived1 s vfunc( ) << endl ; } };class derived2: public derived1 {public:/*vfunc( ) not overridden by derived2.In this case, since derived2 is derived from derived1, derived1 s vfunc( ) is used */ } ;int main( ){base *p, b;derived1 d1;derived2 d2;//point to basep = &b;p vfunc( ); // access bases vfunc// point to derived1 p=&d1;p vfunc( ); //access derived1s vfunc( )//point to derived2p = &d2;p vfunc( ); // use derived1 s vfunc( )return 0 ; }مثال :
اسلاید 303: پایان
اسلاید 304: keywords and alternative tokens.
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت بروز هر گونه مشکل به شماره 09353405883 در ایتا پیام دهید یا با ای دی poshtibani_ppt_ir در تلگرام ارتباط بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.