برنامه سازی پیشرفته
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
امتیاز
برنامه سازی پیشرفته
اسلاید 1: برنامه سازی پیشرفتهمدرس: قاسم محمدينام درس : برنامه سازی پیشرفته ( رشته مهندسی فناوری اطلاعات) تعداد واحد درسی : 3 واحد
اسلاید 2: فهرست مطالبفصل اول : مقدمات زبان C++فصل دوم : ساختار های تصمیم گیری و تکرارفصل سوم : سایر ساختار های تکرارفصل چهارم : اعداد تصادفیفصل پنجم : آرایه هافصل ششم : توابعفصل هفتم : ساختارها و اشاره گرهافصل هشتم : برنامه نویسی شی گرا
اسلاید 3: فصل اول مقدمات C++
اسلاید 4: فهرست مطالب فصل اولعملگر انتسابعملگر های محاسباتیعملگرهای افزایش و کاهشعملگر sizeofعملگرهای جایگزینی محاسباتیاولویت عملگرهاتوضیحات (Comments)توابع کتابخانهبرنامه در C++تاریخچه مختصرقانون نامگذاری شناسه هامتغیر هااعلان متغیرتخصیص مقادیر به متغیرداده های از نوع کرکترکرکتر های مخصوصرشته هانمایش مقادیر داده هادریافت مقادیر
اسلاید 5: تاریخچه مختصر C++ این زبان در اوائل دهه 1980 توسط Bjarne stroustrup در آزمايشگاه بل طراحي شده. اين زبان عملاً توسعه يافته زبان برنامه نويسي C می باشد كه امكان نوشتن برنامههاي ساخت يافته شئ گرا را ميدهد.
اسلاید 6: قانون نامگذاري شناسهها حروف كوچك و بزرگ در نامگذاري شناسهها متفاوت ميباشند. بنابراين Xy ، XY ، xY ، xy چهار شناسه متفاوت از نظر C++ ميباشد.
اسلاید 7: قانون نامگذاري شناسهها2) در نامگذاري شناسهها از حروف الفباء، ارقام وزير خط (underscore) استفاده ميشود و حداكثر طول شناسه 31 ميباشد و شناسه بايستي با يك رقم شروع نگردد.
اسلاید 8: قانون نامگذاري شناسهها3) براي نامگذاري شناسهها از كلمات كليدي نبايستي استفاده نمود. در زير بعضي از كلمات كليدي داده شده است. لیست کامل کلمات کلیدی
اسلاید 9: متغيرها در اسلاید بعد به انواع داده ها اشاره می شود. متغير، مكاني در حافظه اصلي كامپيوتر ميباشد كه در آنجا يك مقدار را ميتوان ذخيره و در برنامه از آن استفاده نمود. قانون نامگذاري متغيرها همان قانون نامگذاري شناسهها ميباشد.
اسلاید 10: انواع داده ها
اسلاید 11: اعلان متغیرها در اسلاید بعد مثال هایی از اعلان متغیر ذکر شده است. قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده شود و از آنها استفاده گردد بايستي آنها را در برنامه اعلان نمود.
اسلاید 12: براي اعلان متغيرx از نوع int : int x;برای اعلان متغيرهاي p و q را از نوع float كه هر كدام چهار بايت از حافظه را اشغال ميكنند :float p , q; برای اعلان متغير next از نوع كركتر كه ميتوان يكي از 256 كركتر را به آن تخصيص داد و يك بايت را اشغال ميكند. char next; چند مثال از اعلان متغیر ها :
اسلاید 13: تخصيص مقادير به متغيرها در اسلاید بعد مثال هایی از اعلان متغیر ذکر شده است.با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود.
اسلاید 14: مثال : در دستورالعمل int x=26; X را از نوع int با مقدار اوليه 26 اعلان نموده .در دستورالعمل long a=67000 , b=260; متغيرهاي b و a را از نوعlong int تعريف نموده با مقادير بترتيب 260 و 67000.
اسلاید 15: دادههاي از نوع كركتر براي نمايش دادههاي از نوع char در حافظه كامپيوتر از جدول ASCII استفاده ميشود. جدول اسكي به هر يك از 256 كركتر يك عدد منحصر بفرد بين 0 تا 255 تخصيص ميدهد.
اسلاید 16: كركترهاي مخصوص كامپيلر C++ بعضي از كركترهاي مخصوص كه در برنامه ميتوان از آنها براي فرمت بندي استفاده كرد را تشخيص ميدهد. تعدادي از اين كركترهاي مخصوص به همراه کاربرد آنها در اسلاید بعد آورده شده است .
اسلاید 17: كركترهاي مخصوصبعنوان مثال از كركتر a ميتوان براي ايجاد صداي beep استفاده نمود. char x = a ;
اسلاید 18: رشتهها رشته يا string عبارتست از دنبالهاي از كركترها كه بين قرار داده ميشود. در حافظه كامپيوتر انتهاي رشتهها بوسيله 0 ختم ميگردد. در اسلاید بعد به دو مثال دقت نمایید.
اسلاید 19: مثال 1 :BOOK STORE يك رشته ده كركتري ميباشد كه با توجه به كركتر 0 كه به انتهاي آن در حافظه اضافه مي شود جمعــاً يازده بايت را اشغال ميكند.
اسلاید 20: مثال 2 : دقت نمایید که w يك رشته ميباشد كه دو بايت از حافظه را اشغال ميكند در حاليكه w يك كركتر ميباشد كه يك بايت از حافظه را اشغال مينمايد.
اسلاید 21: نمايش مقادير دادهها براي نمايش دادهها بر روي صفحه مانتور از cout كه بدنبال آن عملگر درج يعني << قيد شده باشد استفاده ميگردد. بايستي توجه داشت كه دوكركتر < پشت سر هم توسط C++ بصورت يك كركتر تلقي ميگردد.
اسلاید 22: برای نمایش پيغام good morning بر روی صفحه نمایش :cout << good morning;برای نمایش مقدار متغیر X بر روی صفحه نمایش :cout << x ;مثال :
اسلاید 23: دریافت مقادیر متغیرها به منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامه از صفحه كليد، از cin كه بدنبال آن عملگر استخراج يعني >> قيد شده باشد ميتوان استفاده نمود.
اسلاید 24: مثال :int x;cout << Enter a number: ;cin >> x;
اسلاید 25: عملگر انتساب عملگر انتساب = ميباشد كه باعث ميگردد مقدار عبارت در طرف راست این عملگر ارزيابي شده و در متغير طرف چپ آن قرار گيرد.
اسلاید 26: مثال : x=a+b; x=35 ; x=y=z=26 ;از عملگرهاي انتساب چندگانه نيز ميتوان استفاده نمود. که مقدار سه متغير z و y و x برابر با 26 ميشود.
اسلاید 27: عملگرهاي محاسباتي در C++ پنج عملگر محاسباتي وجود دارد كه عبارتند از : اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند. از طرف ديگر عملگرهاي + و – راميتوان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.
اسلاید 28: مثال 1 : در حالتي كه هر دو عملوند عملگرهاي % ، / ، * ، + ، – از نوع صحيح باشد نتيجه عمل از نوع صحيح ميباشد.
اسلاید 29: مثال 2 : در صورتيكه حداقل يكي از عملوندهاي عملگرهاي / ، * ، – ، + از نوع اعشاري باشد نتيجه عمل از نوع اعشاري ميباشد.
اسلاید 30: عملگرهاي افزايش و كاهش در C++ ، افزايش يك واحد به مقدار يك متغير از نوع صحيح را افزايش و بطور مشابه كاهش يك واحد از مقدار يك متغير از نوع صحيح را كاهش مينامند..
اسلاید 31: عملگرهاي افزايش و كاهش عملگر كاهش را با - - و عملگر افزايش را با ++ نمايش ميدهند. چون عملگرهاي ++ و - - فقط روي يك عملوند اثر دارند اين دو عملگر نيز جزء عملگرهاي يكتائي ميباشند.
اسلاید 32: مثال :سه دستور العمل :++x;x++;x=x+1;معادل ميباشند و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند. - - y ; y=y-1;y- - ;
اسلاید 33: از عملگرهاي ++ و -- ميتوان بدو صورت پيشوندي و پسوندي استفاده نمود. در دستورالعملهاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي ميشود و عملگر پسوندي بعد از انتساب ارزيابي ميشود.
اسلاید 34: مثال :int x=5;y=++x * 2;پس از اجراي دستورالعملهاي فوق : y=12int x=5;y=x++ * 2;پس از اجراي دستورالعملهاي فوق :y=12
اسلاید 35: عملگر sizeofSizeof ازعملگرهاي يكتائي مي باشد و مشخص كننده تعداد بايت هائي است كه يك نوع داده اشغال ميكند. مثال :int x;cout << sizeof x ; مقدار 2 نمايش داده ميشود .cout << sizeof(float) ; مقدار 4 نمايش داده مي شود.
اسلاید 36: عملگرهاي جايگزيني محاسباتي براي سادهتر نوشتن عبارتها در C++ ، ميتوان از عملگرهاي جايگزيني محاسبـــاتي استفاده نمود. %= /= *= -= +=
اسلاید 37: اولويت عملگرها ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام ميگردد. در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است.
اسلاید 38: مثال 1 :(5+2) *(6+2*2)/2با توجه به جدول اولويت عملگرها داريم كه 7 *(6+2*2)/27*(6+4)/27* 10 /270 /235
اسلاید 39: مثال 2 :int a=6 , b=2, c=8, d=12;d=a++ * b/c ++;cout << d << c << b << a;خروجی :1 9 2 7
اسلاید 40: توضيحات (Comments) توضيحات در برنامه باعث خوانائي بيشتر و درك بهتر برنامه ميشود. بنابراين توصيه بر آن است كه حتي الامكان در برنامهها از توضيحات استفاده نمائيم. در C++، توضيحات بدو صورت انجام ميگيرد که در اسلایدهای بعد به آن اشاره شده است.
اسلاید 41: توضيحات (Comments)الف: اين نوع توضيح بوسيله // انجام ميشود. كه كامپيوتر هر چيزي را كه بعد از // قرار داده شود تا انتهاي آن خط اغماض مينمايد. مثال :c=a+b;//c is equal to sum of a and b ب:توضيح نوع دوم با /* شروع شده و به */ ختم ميشود و هر چيزي كه بين* / و */ قرار گيرد اغماض مينمايد .مثال : / * this is a program to calcufate sum of n integer numbers */
اسلاید 42: توابع كتابخانه زبان C++ مجهز به تعدادي توابع كتابخانه ميباشد. بعنوان مثال تعدادي توابع كتابخانه براي عمليات ورودي و خروجي وجود دارند. معمولاً توابع كتابخانه مشابه ، بصورت برنامههاي هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايلهاي كتابخانه دسته بندي و مورد استفاده قرا رميگيرند. اين فايلها را فايلهاي header مينامند و داراي پسوند .h ميباشند.
اسلاید 43: نحوه استفاده از توابع کتابخانه ای براي استفاده از توابع كتابخانه خاصي بايستـــي نام فايل header آنرا در ابتداي برنامه در دستور #include قرار دهيم. > اسم فايل header < include#
اسلاید 45: برنامه در C++ اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و كوچك به زبان C++ بنويسيم. براي نوشتن برنامه بايستي دستورالعملها را در تابع main( ) قرار دهيم و براي اينكار ميتوان به يكي از دو طريقی که در اسلایدهای بعد آمده است ، عمل نمود.
اسلاید 46: روش اول :#include < >int main( )}دستورالعمل 1 ;دستورالعمل 2 ;...n دستورالعمل ;return 0 ;}
اسلاید 47: روش دوم :#include < >void main( ){دستورالعمل 1 ;دستورالعمل 2 ;...n دستورالعمل ;}
اسلاید 48: نکات-2error: به خطاهاي برنامه نويسي error مي گويند.انواع خطاها در برنامه نويسي:خطاهاي زمان compile(compile errors): مانع کامپايل صحيح برنامه مي شوند.خطاهاي زمان link (Link errors): براي کامپايل مزاحمتي ايجاد نمي کنند اما مانع Link برنامه مي شوند. خطاهاي زمان اجرا: (Run time errors): کامپايل و Link با موفقيت انجام مي شود ولي اجراي برنامه دچار اشکال مي شود .
اسلاید 49: errorحسن سيب را خورد.هسن سيب را خورد.متناظر با خطاي کامپايلرا حسن خورد سيب.متناظر با خطاي Linkسيب حسن را خورد.متناظر با خطاي زمان اجرا
اسلاید 50: #include <iostream.h>int main( ){cout <<C++ is an object oriented language n ; return 0 ;} برنامه ای که پيغام C++ is an object oriented language را روي صفحه مانیتور نمايش مي دهد.
اسلاید 51: برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مينمايد. #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; }
اسلاید 52: دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمايش ميدهد. #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 ;}
اسلاید 53: فصل دوم ساختارهای تصمیم گیری و تکرار
اسلاید 54: فهرست مطالب فصل دومعملگر های رابطه ایعملگر شرطیدستورالعمل شرطیعملگر کاماعملگر های منطقیدستورالعمل For
اسلاید 55: عملگرهای رابطه ای از این عملگرها براي تعيين اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر ميباشد استفاده ميگردد. عملگرهاي رابطهاي عبارتند از:
اسلاید 56: عملگر شرطیشكل كلي عملگر شرطي بصورت زير ميباشد:عملگر شرطي تنها عملگري در C++ ميباشد كه داراي سه عملوند ميباشد. expression _ test ? expression _ true : expression _ false
اسلاید 57: مثال 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 نمايش داده ميشود.
اسلاید 58: دستورالعمل شرطي توسط این دستور شرطي را تست نموده و بسته به آنكه شرط درست يا غلط باشد عكسالعمل خاصي را نشان دهيم. IF if( عبارت ) { 1دستورالعمل ;. n دستورالعمل ; } else { 1 دستورالعمل ;. n دستورالعمل ; }
اسلاید 59: مثال 1 :if(x != y){cout << x ;++ x ;}else {cout << y ;- - y ; }
اسلاید 60: مثال 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;}برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مينمايد.
اسلاید 61: عملگر كاما تعدادي عبارت را ميتوان با كاما بهم متصل نمود و تشكيل يك عبارت پيچيدهتري را داد. اين عبارتها به ترتيب از چپ به راست ارزيابي شده و مقدار عبارت معادل عبارتn ميباشد. (عبارت n , …. , عبارت 3 , عبارت 2 , عبارت 1)
اسلاید 62: مثال :اگر داشته باشيم int a=2 , b=4 , c=5 ; عبارت زير را در نظر بگيريد:(++ a , a+b, ++ c, c+b)مقدار عبارت برابر است با b+c كه معادل 10 ميباشد.
اسلاید 63: عملگرهای منطقیبا استفاده از عملگرهاي منطقي ميتوان شرطهاي تركيبي در برنامه ايجاد نمود. عملگرهاي منطقي عبارتست از :ANDORNOTكه در C++ به ترتيب بصورت زير نشان داده ميشود.&&||!
اسلاید 64: جدول درستی سه عملگر شرطیAndOrNot
اسلاید 65: چند مثال :if ((x= = 5) ||(y != 0)) cout << x << endl ;اگر x برابر با 5 يا y مخالف صفر باشد مقدار x نمايش داده شود . if(x) x = 0 ;اگر مقدار x مخالف صفر باشد، آنگاه x برابر با صفر شود .
اسلاید 66: برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد كه آيا تشكيل يك مثلث ميدهد يا خير؟ #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 ;}
اسلاید 67: دستورالعمل Forاز دستور العمل for براي تكرار دستورالعملها استفاده ميشود. شكل كلي دستور for بصورت زير ميباشد:(عبارت 3 ; عبارت ; 2 عبارت 1) for { 1 دستورالعمل ; 2 دستورالعمل ; . . . n دستورالعمل ; }
اسلاید 68: #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 را از ورودي گرفته فاكتوريل آنرا محاسبه ونمايش ميدهد.
اسلاید 69: #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 را محاسبه نموده و نمايش ميدهد.
اسلاید 70: #include <iostream.h>int main( ){int j=0 ;for( ; j <= 9 ; ) cout << j++ << endl; return 0 ; }برنامه زير ارقام 0 تا 9 را نمايش ميدهد.
اسلاید 71: #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 ايجاد ميشوند را نمايش ميدهد.
اسلاید 72: فصل سومسایر ساختارهای تکرار
اسلاید 73: فهرست مطالب فصل سومدستورالعمل whileدستورالعمل do whileدستورالعمل breakدستورالعمل continueدستورالعمل switchتابع cin.get()عملگر static_cast<>()جدول اولویت عملگرها
اسلاید 74: دستورالعمل whileاز اين دستور العمل مانند دستورالعمل for براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميگردد. شكل كلي اين دستور العمل بصورت زير ميباشد.while( شرط)} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; }
اسلاید 75: تفاوت دستورهای while و forدستورالعمل for زماني استفاده ميشود كه تعداد دفعات تكرار از قبل مشخص و معين باشد. در صورتيكه تعداد دفعات تكرار مشخص نباشد بايستي از دستورالعمل while استفاده نمود.
اسلاید 76: مثال :int x=0while(x<5)cout << x ++<< endl;با اجراي قطعه برنامه فوق مقادير زير نمايش داده ميشود :01234
اسلاید 77: #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 قرار ميدهد.
اسلاید 78: دستورالعمل do while اين دستور العمل نيز براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميشود. شكل كلي اين دستورالعمل بصورت زير ميباشد. do} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; } while( شرط);
اسلاید 79: تفاوت دستورهای do while و whileدر دستورالعمل while ابتدا مقدار شرط ارزيابي شده اما در دستورالعمل do while ابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزيابي ميگردد. بنابراین دستورالعمل do while حداقل يك بار انجام ميشود .
اسلاید 80: مثال :#include <iostream.h>int main( ){int count = 0;docout << count ++<<endl ;while(count <= 9);return 0 ; }ارقام 0 تا 9 را روي ده خط نمايش ميدهد
اسلاید 81: دستورالعمل breakاين دستورالعمل باعث توقف دستورالعملهاي تكرار( for , while ,do while) شده و كنترل به خارج از اين دستورالعملها منتقل مينمايد. Break
اسلاید 82: مثال 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 ; }
اسلاید 83: مثال 2:#include <iostream.h>int main( ){int count = 0 ;while( 1 ){count ++ ;if(count > 10 )break ;}cout << counter : << count << n;return 0 ;}
اسلاید 84: مثال 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 ; }
اسلاید 85: مثال 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 ; }
اسلاید 86: دستورالعمل continue از دستورالعمل continue ميتوان در دستورالعملهاي تكرار do while ، while ، for استفاده نمود. اين دستورالعمل باعث ميشود كه كنترل بابتداي دستورالعملهاي تكرار منتقل گردد. Continue
اسلاید 87: مثال 1:#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 ; }
اسلاید 88: مثال 2:#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 ; }
اسلاید 89: دستورالعمل switch همانطور که می دانید از دستورالعمل شرطی(if else) می توان بصورت تودرتو استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد گردد، درك آنها مشكل ميشود . براي حل اين مشكل C++ ، دستورالعمل switch كه عملاً يك دستورالعمل چند انتخابي ميباشد را ارائه نموده است. switchcase
اسلاید 90: شکل کلی دستور العمل Switchswitch(عبارت){case valueone : statement; break;case valuetwo: statement; break;case valuen : statement; break;default: statement ; }
اسلاید 91: مثال 1 :#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 * /}
اسلاید 92: مثال 2 :#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;}}
اسلاید 93: تابع cin.get() :اين تابع يك كركتر را از صفحه كليد ميگيرد. براي استفاده از اين تابع در ابتداي برنامه بايستي داشته باشيم :#include <iostream.h>
اسلاید 94: char x;x = cin.get( );cout << x ;قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش ميدهد.
اسلاید 95: #include <iostream.h>int main( ){ char x;while((x = cin.get( ) !=EOF)cout << x ;return 0 ; }برنامة ذيل يك سطر متن انگليسي كه به CTRL Z ختم ميشود را گرفته دقيقاً نمايش ميدهد.EOF به معني End of File ميباشد كه در iostream.h تعريف شده و مقدار آن برابر با 1- ميباشد. مقدار آن در سيستم عامل DOS عبارتست از ctrl z .
اسلاید 96: 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 استفاده شده است.
اسلاید 97: #include <iostream.h>int main( ){char next;while((next = cin.get( ) ) !=EOF)if(next != ) cout << next ;return 0 ; }برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي (blank) آنرا حذف نموده و نمايش ميدهد.
اسلاید 98: عملگر static_castاز اين عملگر براي تبديل موقت يك نوع data به نوع ديگر استفاده ميشود. اين عملگر يك عملگر يكتائي ميباشد.
اسلاید 99: مثال 1:int x = 25 ;float y ;y = static_cast < float >(x) ; مقدار x موقتاً بصورت اعشاري در می آيد و در نتيجه مقدار y برابر با 25.0 می شود. بايستي توجه داشت كه نوع متغير x عوض نمي شود بلكه موقتاً مقدار آن بصورت اعشاري در آمده است.
اسلاید 100: مثال 2:float x = 14.75 ;cout << static_cast < int >(x) << endl;cout << x ; ابتدا مقدار 14 نمايش داده ميشود و سپس مقدار 14.75 نمايش داده ميشود.
اسلاید 101: جدول اولویت عملگرها
اسلاید 102: فصل چهارماعداد تصادفی
اسلاید 103: فهرست مطالب فصل چهارمتولید اعداد تصادفیتعریف نوع داده ( typedef )داده های از نوع شمارشیفرمت های مختلفه مقادیر خروجی
اسلاید 104: اعداد تصادفی مقادير تصادفي يا شانسي در اكثر برنامههاي كاربردي در زمينه شبيه سازي و بازيهاي كامپيوتري نقش مهمي را ايفا مينمايند. براي ايجاد يك عدد تصادفي صحيح بين 0 و 32767 بايستي از تابع rand( ) استفاده نمائيم. rand( )
اسلاید 105: #include <stdlib.h>#include < iostream.h>int main( ){for(int j=1; j<=10; ++j)cout << rand( ) << n ;return 0 ; }برنامه زير 10 عدد تصادفي بين 0 و 32767 را ايجاد مينمايد.
اسلاید 106: نکته :اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتريمی گيريم. براي تصادفي كردن اعداد ميبايستي از تابع srand( ) استفاده نمائيم. اين تابع به يك آرگومان صحيح از نوع unsigned نياز دارد. به اين آرگومان seed گفته ميشود. در اسلاید بعد برنامه قبلی را با تابع srand( ) نوشته ایم.
اسلاید 107: #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( ) )
اسلاید 108: #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 ; }برنامه زير نتيجه پرتاب دو تاس را نمايش ميدهد.
اسلاید 109: #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 را نمايش ميدهد.
اسلاید 110: تعريف نوع داده (typedef)از typedef ميتوان براي تعريف نوع دادههاي جديد كه معادل نوع دادههاي موجود باشد استفاده نمود. شكل كلي عبارتست از :typedef type newtype;نشاندهنده نوع داده موجود اسم جديد
اسلاید 111: مثال :typedef int integer; حال ميتوان y و x را بصورت زير تعريف نمود :integer x,y;
اسلاید 112: دادههاي از نوع شمارشي بمنظور معرفي دادههاي از نوع شمارشي از كلمه enum استفاده ميگردد.مثال : enum color {red, blue, green, yellow, brown} ;color يك نوع داده شمارشي ميباشد. 02341
اسلاید 113: چند مثال :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
اسلاید 114: توجه : بايستي در نظر داشت كه دادههاي از نوع شمارشي در عمليات ورودي و خروجي شركت نمينمايند. بعبارت ديگر مقادير دادههاي از نوع شمارشي بايستي در برنامه تعيين نمود. دستورالعلهاي ورودي و خروجي مانند cin و cout در مورد دادههاي شمارشي نميتوان استفاده نمود.
اسلاید 115: فرمتهای مختلفه مقادیر خروجی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>
اسلاید 116: فصل پنجمآرایه ها
اسلاید 117: فهرست مطالب فصل پنجمآرایه یک بعدیآرایه دو بعدی ( ماتریس ها )
اسلاید 118: آرایه یک بعدیآرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر ميباشد كه ميتواند چندين مقدا را در خود جاي دهد. كليه عناصر يك آرايه از يك نوع ميباشند. عناصر آرايه بوسيله انديس آنها مشخص ميشوند. در C++ ، انديس آرايه از صفر شروع ميشود.
اسلاید 119: کاربرد آرایه هاآرايهها در برنامهنويسي در مواردي كاربرد دارند كه بخواهيم اطلاعات و دادهها را در طول اجراي برنامه حفظ نمائيم.
اسلاید 120: int x[5] ; اولين عنصر x[0] پنجمين عنصر x[4] آرایه یک بعدی از نوع int
اسلاید 121: تخصیص مقادیر اولیه به عناصر آرایه : int x[5]= {4, 2, 5, 17, 30};
اسلاید 122: دریافت مقادیر عناصر آرایه :int x[5];for(int i=0; i<=4; ++i)cin >> x[ i ] ;نمایش مقادیر عناصر آرایه :for(int i=0; i<5; ++i) cout << x[ i ] ;
اسلاید 123: اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر ميگيرند. int x[5] = {12, 5, 7};
اسلاید 124: بايستي توجه داشت كه آرايهها به صورت ضمني مقدار اوليه صفر نميگيرند. برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر بگيرند. int x[5] = {0} ;
اسلاید 125: دستور زير يك آرايه يك بعدي شش عنصري از نوع float ايجاد مينمايد. float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5} ;
اسلاید 126: برنامه ذيل 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 ; }
اسلاید 127: برنامه ذيل 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;}
اسلاید 128: برنامه زير 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 ;}
اسلاید 129: آرايههاي دوبعدي (ماتريسها)ماتريسها بوسيله آرايههاي دوبعدي در كامپيوترنمايش داده ميشوند. int a[3][4];
اسلاید 130: تخصیص مقادیر اولیه به عناصر آرایه : int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;
اسلاید 131: int a[3][4]= { {1}, {2,3} , {4,5,6} } ;نکته 1 :
اسلاید 132: int a[3][4]= {1, 2, 3, 4,5 } ;نکته 2 :
اسلاید 133: در يك آراية دوانديسي، هر سطر، در حقيقت آرايهاي يك انديسي است. در اعلان آرايههاي دوانديسي ذكر تعداد ستونها الزامي است. نکته 3 :int a[ ][4]={1,2,3,4,5};
اسلاید 134: برنامه زير يك ماتريس 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<4; j++)cin >> x[ i ][ j ];// calculate the sum of elements.for(i=0; i<3; ++i)for(j=0; j<4; j++)total + = x [ i ][ j ];cout << total = << total << endl; return 0 ;}
اسلاید 135: فصل ششمتوابع
اسلاید 136: فهرست مطالب فصل ششمتعریف تابعتابع بازگشتیتوابع درون خطیانتقال پارامترها از طریق ارجاعکلاس های حافظه ( storage classes )سربارگذاری توابع
اسلاید 137: تعریف توابع استفاده از توابع در برنامهها به برنامهنويس اين امكان را ميدهد كه بتواند برنامههاي خود را به صورت قطعه قطعه برنامه بنويسد. تا كنون كليه برنامههائي كه نوشتهايم فقط از تابع main( ) استفاده نمودهايم.
اسلاید 138: شكل كلي توابع بصورت زير ميباشند : return-value-type function-name (parameter-list){declaration and statements}نام تابع نوع مقدار برگشتي لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار كننده به تابع فراخوانده شده تعريف اعلانهاي تابع و دستورالعملهاي اجرائي
اسلاید 139: تابع زير يك حرف كوچك را به بزرگ تبديل مينمايد. char low_to_up (char c1){char c2;c2 = (c1>= a && c1<= z )?( A + c1- a ): c1;return (c2) ;}نام تابعنوع مقدار برگشتیپارامتری از نوع char
اسلاید 140: برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مينمايد. #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’آرگومان
اسلاید 141: تابع maximum دو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند. int maximum(int x, int y){int z ;z=(x >= y)? x : y;return z;}
اسلاید 142: برنامه کامل که از تابع 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
اسلاید 143: نکته 1 :اسامي پارامترها و آرگومانهاي يك تابع ميتوانند همنام باشند.
اسلاید 144: برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده نمايش ميدهد. #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
اسلاید 145: نکته 2 :وقتي در تابعي، تابع ديگر احضار ميگردد بايستي تعريف تابع احضار شونده قبل از تعريف تابع احضار كننده در برنامه ظاهر گردد.
اسلاید 146: نکته 3 :اگر بخواهیم در برنامهها ابتدا تابع main ظاهر گردد بايستي prototype تابع يعني پيش نمونة تابع كه شامل نام تابع، نوع مقدار برگشتي تابع، تعداد پارامترهائي را كه تابع انتظار دريافت آنرا دارد و انواع پارامترها و ترتيب قرارگرفتن اين پارامترها را به اطلاع كامپيلر برساند. در اسلاید بعد مثالی در این زمینه آورده شده است.
اسلاید 147: #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);}
اسلاید 148: نکته 4 :در صورتي كه تابع مقداري بر نگرداند نوع مقدار برگشتي تابع را void اعلان ميكنيم. و در صورتيكه تابع مقداري را دريافت نكند بجاي parameter- list از void يا ( ) استفاده ميگردد. در اسلاید بعد مثالی در این زمینه آورده شده است.
اسلاید 149: #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 ; } تابع مقداري بر نمی گرداند.
اسلاید 150: احضار بوسیله مقدار ( 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
اسلاید 151: احضار بوسیله مقدار ( 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در این نوع احضار تابع حافظههاي مورد استفاده آرگومانها و پارامترها از هم متمايزند و هرگونه تغيير در پارامترها باعـــث تغيـــر در آرگومانهاي متناظر نميگردد.
اسلاید 152: نکته 5 :هر زمان که نوع مقدار برگشتي تابع int ميباشد نيازي به ذكر آن نیست و همچنين نيازي به تعريف پيش نمونه تابع نميباشد.
اسلاید 153: تابع بازگشتي (recursive functions)توابع بازگشتي يا recursive توابعي هستند كه وقتي احضار شوند باعث ميشوند كه خود را احضار نمايند.
اسلاید 154: نحوه محاسبه فاکتوریل از طریق تابع بازگشتی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در اسلاید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
اسلاید 155: تابع بازگشتی محاسبه فاکتوریل#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) ) ;}
اسلاید 156: نحوه محاسبه 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)
اسلاید 157: برنامهزير 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) ) ;}
اسلاید 158: برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش ميدهد. #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 ;}
اسلاید 159: نکته :استفاده از آرايهها بعنوان پارامتر تابع مجاز است. در اسلاید بعد به یک مثال توجه نمایید.
اسلاید 160: در برنامه زير تابع 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
اسلاید 161: نکته :در صورتيكه آرايه بيش از يك بعد داشته باشد بعدهاي دوم به بعد بايستي در تعريف تابع و پيش نمونه تابع ذكر گردد. در اسلاید بعد به یک مثال توجه نمایید.
اسلاید 162: #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 ;} } خروجی :
اسلاید 163: توابع درون خطي (inline) كلمه inline بدين معني است كه به كامپيلر دستور ميدهد كه يك كپي از دستورالعلمهاي تابع در همان جا (در زمان مقتضي) توليد نمايد تا از احضار تابع ممانعت بعمل آورد.
اسلاید 164: اشکال توابع inline بجاي داشتن تنها يك كپي از تابع ، چند كپي از دستورالعملهاي تابع در برنامه اضافه ميشود كه باعث بزرگ شدن اندازه يا طول برنامه ميشود. بنابراين از inline براي توابع كوچك استفاده ميگردد.
اسلاید 165: مثالی از توابع درون خطی#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 ;}
اسلاید 166: انتقال پارامترها از طريق ارجاعتاكنون وقتي تابعي را احضار ميكرديم يك كپي از مقادير آرگومانها درپارامترهاي متناظر قرار ميگرفت . این روش احضار بوسيله مقدار يا call by value ناميده شد. در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومانها و پارامترهاي متناظر بصورت اشتراكي مورد استفاده قرار ميگيرد. اين روش call by reference ناميده ميشود .
اسلاید 167: انتقال پارامترها از طريق ارجاعدر اين روش پارامترهائي كه از طريق call by reference عمل مينمايند در پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده ميشود.واضح است كه در تعريف تابع نيز بهمين طريق عمل ميشود.
اسلاید 168: مثال :#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
اسلاید 169: نکته :وقتي پارامتري بصورت call by reference اعلان ميگردد اين بدان معني است كه با تغيير مقدار اين پارامتر در تابع احضار شده مقدار آرگومان متناظر نيز تغيير مينمايد.
اسلاید 170: برنامهزير با استفاده از 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 ;}
اسلاید 171: كلاسهاي حافظه (storage classes) متغيرها بدو طريق متمايز مشخص ميشوند يكي بوسيله نوع (type) آنها و ديگري بوسيله كلاس حافظه آنها. نوع متغير قبلاً اشاره شده بعنوان مثال int ، float ، double ، . . . ولي كلاس حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مينمايد. در اسلاید بعد به انواع کلاس حافظه می پردازیم.
اسلاید 172: بطور كلي كلاس حافظه متغيرها به چهار دستة تقسيم ميگردد : automaticstaticexternalregister
اسلاید 173: متغيرهاي automatic در درون يك تابع تعريف ميشوند و در تابعي كه اعلان ميشود بصورت متغيرهاي محلي براي آن تابع ميباشند. حافظه تخصيص داده شده به متغيرهاي automatic پس از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و دامنة متغيرهاي از نوع automatic تابعي ميباشد كه متغير در آن اعلان گرديده است. automatic
اسلاید 174: متغيرهاي static نيز در درون توابع تعريف ميشوند و از نظر وسعت و دامنه شبيه متغيرهاي automatic هستند ولي در خاتمة اجراي تابع، حافظه وابسته به اين نوع متغيرهـــا از بين نميرود بلكه براي فراخواني بعدي تابع باقي ميماند. staticدر اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
اسلاید 175: مثال :#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 مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 176: متغيرهاي از نوع external متغيرهائي هستند كه در بيرون از توابع اعلان ميشوند و وسعت و دامنه فعاليت آنها كليه توابعي ميباشد كه در زير دستور اعلان متغير قرار دارد. externalدر اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
اسلاید 177: مثال :#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 مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 178: وقتي متغيري از نوع register اعلان ميشود از كامپيوتر عملاً درخواست ميشود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد. register
اسلاید 179: کاربرد کلاس registerمعمولاً از نوع رجيستر براي شاخصهاي دستور تكرار و يا انديسهاي آرايهها استفاده ميشود. بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده دردستور cin نميباشند
اسلاید 180: سربارگذاري توابع (function overloading) در C++ اين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند. (از نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها)
اسلاید 181: مثال :#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 ;}
اسلاید 182: فصل هفتمساختار ها و اشاره گرها
اسلاید 183: فهرست مطالب فصل هفتمساختارهاUnion هااشاره گرها ( Pointer)تعریف آرایهآرایه های دو بعدی و اشاره گرهاتخصیص حافظه بصورت پویا ( عملگر new )رشته ها و توابع مربوطه
اسلاید 184: ساختارها ساختارها شبيه آرايهها بوده بدين صورت كه يك نوع داده گروهي است كه فضاي پيوسته از حافظه اصلي را اشغال مينمايد. اما عناصر ساختار الزاماً از يك نوع نميباشند بلكه اعضاي يك ساختار ميتوانند از نوعهاي مختلفه از قبيل char ، int ، float ، … باشند.
اسلاید 185: تعريف ساختار struct time {int hour ; // 0 – 23int minute ; // 0 – 59int second; //} ;نام ساختاراعضا ساختار
اسلاید 186: مثال :struct account {int acc_no ;char acc_type;char name[80] ;float balance ;};ساختار account داراي چهار عضو ميباشد.acc_no شماره حساب از نوع intacc_type نوع حساب از نوع char name مشخصات صاحب حساب از نوع رشتة 80 كركتري balance مانده حساب از نوع float
اسلاید 187: به دو صورت می توان اعلان یک متغیر از نوع ساختار را نمایش داد :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;روش اول :روش دوم :
اسلاید 188: به ساختارها ميتوان مقدار اوليه نيز تخصيص داد account cust = {4236, r, Nader Naderi , 7252.5};
اسلاید 189: دسترسي به عناصر يك ساختار بمنظور دسترسي به عناصر يك ساختار از عملگر . استفاده ميگردد . عملگر. جزء عملگرهاي يكتائي ميباشد.
اسلاید 190: مثال :cust .acc_no = 4236cust .acc_type = rcust . name = Nader Nadericust . balance = 7252.5
اسلاید 191: نکته :عضو يك ساختار خود ميتواند يك ساختار ديگر باشد. 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 مشخص ميگردد.
اسلاید 192: نکته : ميتوان آرايهاي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.struct struc1 {char name[40];int pay1;int pay2; } ; strucl cust[ ]= {nader, 3000 , 40000, sara, 4200, 6000, susan, 3700, 25000, saman, 4800 , 2000, };
اسلاید 193: برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو عدد مختلط را ميگيرد و مجموع آنها را مشخص و نمايش ميدهد. #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)
اسلاید 194: unionunion از نظر ساختاري شبيه struct ميباشد . با اين تفاوت كه عضوهائي كه تشكيل union ميدهد همگي از حافظه مشتركي در كامپيوتر استفاده مينمايند. بنابراين استفاده از union باعث صرفهجوئي در حافظه ميگردد.
اسلاید 195: مثال :union id {char color [10];int size; } x , y; هر كدام از متغيرهاي x و y يك رشته 10 كركتري يا يك مقدار از نوع int ميباشد وكامپيوتر يك بلوك حافظه كه بتواند رشته 10 كركتري رادر خود جاي دهد ، برايcolor و size در نظر ميگيرد.
اسلاید 196: مثال :union xpq {int x ;char y[2] ; } p ;
اسلاید 197: اشارهگرها (Pointers) دادههائي كه در كامپيوتر در حافظه اصلي ذخيره ميشوند بايتهاي متوالي از حافظه بسته به نوع data اشغال ميكنند.
اسلاید 198: اشارهگرها (Pointers)با داشتن آدرس داده در حافظة اصلي ميتوان براحتي به آن داده دسترسي پيدا نمود و از طرف ديگر آدرس هر داده در حافظه آدرس بايت شروع آن داده ميباشد. int x = 613;
اسلاید 199: نکته :در كامپيوتر آدرسها معمولاً دو بايت اشغال مينمايند. اگر آدرس x را در px قرار دهيم آنگاه ميگوئيم كه px به x اشاره مينمايد.pxxآدرس متغير x را بوسيله &x نشان ميدهيم و عملگر & را عملگر آدرس مينامند. int x , *pxX=54;px = &x ;
اسلاید 200: مثال :int y , x , *px ;x = 26 ;px = &x ;26pxxحال اگر دستور العمل x += 10 ; را بدهيم: 36pxxحال اگر دستورالعمل *px = *px + 7 ; بدهيم.43pxx
اسلاید 201: آرایه یک بعدی و اشاره گرهااولين عنصر آرايه بوسيله 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 ;
اسلاید 202: ساختارها و اشاره گرهاميتوان اشارهگري را تعريف نمود كه به اولين بايت يك ساختار (struct) اشاره نمايد. struct struc1 { int a ; float b ; char c; int d ;} x, *px ; px = &x ; عبارت x.a معادل pxa معادل (*px).a ميباشد.
اسلاید 203: آرايههاي دوبعدي و اشارهگرها يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي ميتوان تعريف نمود.اگر x يك ماتريس 5 سطري و 4 ستوني از نوع اعشاري باشد قبلاً اين ماتريس را با float x[5][4]; معرفي كرديم. حال با استفاده از اشارهگرها بصورت زير معرفي نمائيم:float (*x)[4];
اسلاید 204: آرايههاي دوبعدي و اشارهگرها float (*x)[4];
اسلاید 205: در برنامه زير يك آرايه 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; }
اسلاید 206: تخصيص حافظه به صورت پويا يا (عملگر new) از عملگر new براي تخيصيص حافظه به صورت پويا می توان استفاده نمود ، در ضمن ميتوان براي بلوكي از حافظه كه تخصيص يافته مقدار اوليه تعیین نمود. newdeletedynamic memory allocation
اسلاید 207: براي تخصيص حافظه باندازه 20 مقدار از نوع int كه اشارهگر ptx به آن اشاره نمايد بصورت زير عمل ميشود. int *ptx;ptx = new int [20]; ptx به اولين داده از نوع int اشاره مينمايد. ptx+i به i+1 امين عنصر از فضاي پيوسته اشاره مينمايد.
اسلاید 208: برنامه زير يك فضاي 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; }
اسلاید 209: برنامه زير آرايههاي 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 ; }
اسلاید 210: برنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع swap جابهجا مينمايد.#include <iostream.h>#include <conio.h> void swap(float *, float *);int main( ){float a,b,*ptb,*pta; cin >> a >> b; pta=&a;ptb=&b;swap(pta,ptb); ///////swap(a,b);cout << a << endl << b << endl ;return 0; }void swap(float *px , float *py){ float t; t = *px; *px = *py; *py = t ; return; }
اسلاید 211: رشتهها و توابع مربوطه رشتهها در C++ ، آرايهاي از كركترها ميباشند كه با كركتر 0 ختم ميشوند. char name[ ]= sara;
اسلاید 212: رشته و اشاره گر هر رشته از طريق اشارهگري به اولين كركتر آن در دسترس قرار ميگيرد. آدرس يك رشته، آدرس كركتر اول آن ميباشد. به رشتهها ميتوان مقدار اوليه تخصيص داد. char *name = sara;
اسلاید 213: برنامه ذيل پنج اسم را بصورت 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 ; }
اسلاید 214: تابع strcmpi(s1, s2) رشتههاي s1 و s2 را با هم مقايسه نموده (بدون توجه به حروف كوچك و بزرگ) اگر رشته s1 برابر با رشته s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت بر ميگرداند.
اسلاید 215: تابع ) strcmp(s1, s2رشتههاي s1 و s2 را با هم مقايسه نموده اگر s1 برابر با s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت برميگرداند.
اسلاید 216: تابع ) strncmp(s1, s2,nحداكثر n كركتر از رشتة s1 را با n كركتر از رشتة s2 مقايسه نموده در صورتيكه s1 كوچكتر از s2 باشد يك مقدار منفي، اگر s1 مساوي با s2 باشد مقدار صفر در غير اينصورت يك مقدار مثبت برميگرداند.
اسلاید 217: تابع (strcat(s1, s2دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را به انتهاي رشتة s1 اضافه مينمايد. كركتر اول رشتة s2 روي كركتر پاياني 0 رشتة s1 نوشته ميشود ونهايتاً رشتة s1 را برميگرداند.
اسلاید 218: تابع (strncat(s1, s2,nدو رشته s1 و s2 ومقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر از رشتة s2 را در انتهاي رشتة s1 كپي مينمايد. اولين كركتر رشته s2 روي كركتر پاياني 0 رشتة s1 مينويسد ونهايتاً مقدار رشتة s1 را برميگرداند.
اسلاید 219: تابع (strlen(sرشتة s را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
اسلاید 220: تابع (strlen(sرشتة s را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
اسلاید 221: تابع strcpy(s1,s2) دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را در رشتة s1 كپي مينمايد و نهايتاً مقدار رشتة s1 را بر ميگرداند.
اسلاید 222: تابع (strncpy(s1, s2,nدو رشتة s1 , s2 و مقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر را از رشتة s2 در رشتة s1 كپي نموده، نهايتاً مقدار رشتة s1 را برميگرداند.
اسلاید 223: نكته مهم براي استفاده از توابع مربوط به رشتهها بايستي حتماً در ابتدا برنامه #include <string.h> را قرار دهيم.
اسلاید 224: مثال :#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; }
اسلاید 225: مثال :#include <iostream.h>#include <string.h>#include <conio.h> int main( ){char *s = sara; clrscr( );cout << strlen(s);return 0; }
اسلاید 226: تابع زیر معادل تابع کتابخانه 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]);}
اسلاید 227: فصل هشتمبرنامه نویس شی گرا
اسلاید 228: فهرست مطالب فصل هشتمتعریف شی گراییچند ریختی (polymorphism)خاصیت ارث بریپشته (stack)ایجاد شیارث بریسازنده ها و نابود کننده هاتوابع دوستکلاس های دوستتوابع سازنده پارامتر دارتوابع سازنده یک پارامتریعضوهای staticکلاسهای تودرتوکلاس های محلیاستفاده از object ها بعنوان پارامترهای تابعبرگشت اشیاءانتساب اشیاءآرایه اشیاءاشاره گر به اشیاءاشاره گر thisتوابع مجازی و پلی مرفیسم
اسلاید 229: تعریف شی گراییبرنامه نويسي شئ گرا يا oop يك روش جديد برنامه نويسي ميباشد كه در آن از ويژگي ساختيافته همراه با چند ويژگيهاي قوي جديد استفاده ميشود. زبان برنامه نويسي C++ امكان استفاده از oop را به راحتي فراهم مينمايد.
اسلاید 230: تعریف شی گراییدر oop ، بطور كلي مساله به تعدادي زيرگروه قطعات مربوط بهم شكسته ميشود كه براي هر زير گروه code و data تهيه شده و نهايتاً اين زيرگروهها تبديل به unit ها يا واحدهائي ميشود كه objects (يا اشياء) ناميده ميشوند.
اسلاید 231: نکته مهم :تمام زبانهاي برنامه نويسي شيگرا داراي سه خصوصيت مشترك زير ميباشند : الف: encapsulation (محصورسازي) ب: polymorphism (چندريختي) ج:inheritance (ارث بري)
اسلاید 232: محصورسازی (Encapsulation ) محصورسازي مكانيزمي است كه code و data را بهم وصل نموده و هر دوي آنها را از استفادههاي غيرمجاز مصون نگه ميدارد. شي يك مؤلفه منطقي است كه data و code را محصور نموده و code باعث دستكاري و پردازش data ميشود.
اسلاید 233: polymorphism (چند ريختي)چند ريختي مشخصهاي است كه بيك وسيله امكان ميدهد كه باتعدادي از سيستمها يا عميات يا دستگاهها، مورد استفاده قرار گيرد.
اسلاید 234: inheritance (ارث بري)ارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود.
اسلاید 235: پشته (stack) پشته ساختاري است كه داراي خاصيت last in first out ميباشد. پشته فضاي پيوسته در حافظه اشغال مينمايد. عملياتي كــه روي پشته انجام ميشوند عبارتند از :الف: push، كه باعث ميشود يك عنصر وارد پشته شده.ب: pop ، كه باعث ميشود يك عنصر از پشته خارج گردد.
اسلاید 236: ايجاد شي (object)بمنظور ايجاد يك شي بايستي از كلمة رزروشده class استفاده نمود. class از نظر ظاهر شبيه ساختار يا struct ميباشد. پشته را بعنوان يك object ميتوان در نظر گرفت كه data آن شامل يك آرايه و يك tos ، و عملياتي كه روي اين object انجام ميشود عبارتست از push، initialize ، pop كردن پشته.در اسلاید بعد مثالی از نحوه ایجاد شی آورده شده است.
اسلاید 237: مثال :#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 نباشند غير قابل دسترسي هستند. و اين يكي از روشهاي محصور سازي اقلام دادههاست. بدين معني است كه بوسيله ساير قطعات برنامه قابل دسترسي ميباشد.
اسلاید 238: نکته : فقط توابع عضو ميتوانند به متغيرهاي عضو از نوع private دسترسي داشته باشند. بايستي توجه داشت كه اگر نوع عضوي مشخص نگردد آن عضو به صورت اتوماتيك private می باشد.Private
اسلاید 239: نحوه تعریف تابع عضو یک کلاس void stack : : push(int i){ if(tos = = SIZE ) { cout << stack is full.; return; } stck[tos]= i ; tos ++ ;}عملگر: : مشخص مينمايد كه تابع متعلق به كدام object ميباشد. عملگر : : عملگر scope resolution ناميده ميشود.
اسلاید 240: برنامه کامل 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; }
اسلاید 241: ارث بریارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود. در اسلاید بعد مثالی از ارث بری آورده شده است.
اسلاید 242: مثال : در روبرو 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( ); };
اسلاید 243: نکته : در مثال قبل building را base class و house را derived class می نامند . شي house تمام اعضاي building را دارا است بعلاوه اينكه داراي متغيرهاي عضوي اضافي bedrooms ، baths و همچنين توابع عضوي set_baths()، set_bebrooms()، get_baths()، get_bedrooms()نيز ميباشد. . Inheritance
اسلاید 244: سازندهها و نابودكنندهها (constructors and destructors)Initialization يا مقدار اوليه دادن بصورت اتوماتيك از طريق تابعي انجام ميشود بنام تابع constructor يا تابع سازنده. تابع سازنده تابع مخصوصي است كه عضوي از كلاس بوده و همنام با كلاس ميباشد.
اسلاید 245: سازندهها و نابودكنندهها (constructors and destructors) تابع نابود كننده يا destructor ، عكس عمل تابع سازنده را انجام ميدهد. وقتي كه شياي از بين ميرود بصورت اتوماتيك تابع نابود كننده آن فراخواني ميگردد.
اسلاید 246: توابع دوست (friend functions) با استفاده از كلمة friend اين امكان وجود دارد كه به تابعي كه عضو كلاس نميباشد اجازه دسترسي به متغيرهاي private كلاس را داد. براي آنكه تابعي را دوست اعلان نمائيم از كلمه friend قبل از تعريف تابع استفاده مينمائيم. در اسلاید بعد مثالی آورده شده است.
اسلاید 247: مثال :#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 ; }
اسلاید 248: نکته : 1-كلاسي كه از كلاس ديگر ارث ميبرد ، توابع دوست آن كلاس را به ارث نميبرند. بعبارت ديگر يك derived class ، توابع دوست را به ارث نميبرد.2-توابع دوست داراي مشخصه نوع ذخيره نميباشند يعني توابع دوست را نميتوان بصورت static يا external تعريف نمود.
اسلاید 249: كلاسهاي دوست (friend classes) اين امكان وجود دارد كه يك كلاس دوست كلاس ديگري باشد . در چنين وضعيتي تابع دوست به كليه اسامي private تعريف شده در كلاس ديگر دسترسي دارد. در اسلاید بعد مثالی آورده شده است.Friend Class
اسلاید 250: #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 ; }مثال :
اسلاید 251: توابع سازنده پارامتردار امكان انتقال آرگومانها به توابع سازنده وجود دارد. معمولاً از اين آرگومانها براي initialize نمودن شي در زمان ايجاد آن استفاده ميگردد. در اسلاید بعد مثالی آورده شده است.
اسلاید 252: مثال :#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; }
اسلاید 253: توابع سازنده يك پارامتري#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 ; }
اسلاید 254: عضوهاي static اگر عضو دادهاي بصورت static اعلان گردد اين بدين معني است كه كامپيلر فقط يك كپي از متغير مذكور را نگهداري نموده و تمام object ها بايستي بصورت اشتراكي از آن كپي استفاده نمايند. براي اينكار ميبايستي از كلمه static قبل از اعلان عضو استفاده نمود. در اسلاید بعد مثالی آورده شده است.
اسلاید 255: مثال :#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; }
اسلاید 256: nested classes (كلاسهاي تودرتو)ميتوان يك كلاس را در يك كلاس ديگر تعريف نمود. اما بعلت اينكه در C++ براي كلاسها خاصيت ارث بري وجود دارد نيازي معمولاً به تعريف نمودن يك كلاس در كلاس ديگر نيست Nested Classes
اسلاید 257: local classes (كلاسهاي محلي)وقتي كه كلاسي در درون يك تابع تعريف ميشود اين كلاس فقط براي آن تابع شناخته شده است و براي توابع ديگر ناشناخته ميباشد. چنين كلاسي را كلاس محلي مينامند. Local Classes
اسلاید 258: در مورد كلاسهاي محلي رعايت نكات زير ضروري است : تمام توابع عضو بايستي در درون كلاس تعريف گردند.از متغيرهاي محلي، تابعي كه كلاس در آن تعريف شده نميتواند استفاده نمايد.از متغيرهاي عضوي static نميتوان استفاده نمود.
اسلاید 259: استفاده از object ها بعنوان پارامترهاي توابع از object ها ميتوان بعنوان پارامترهاي توابع استفاده نمود و مكانيزم انتقال آرگومانها و پارامترها بصورت call by value ميباشد.
اسلاید 260: برگشت اشياء (returning objects)مقدار برگشتي يك تابع ميتواند يك object باشد. در اسلاید بعد مثالی آورده شده است.
اسلاید 261: مثال :#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; }
اسلاید 262: انتساب اشياء (object assignment)در صورتيكه دو تا object از يك نوع باشند ميتوان يك object را بديگري انتساب نمود. در اسلاید بعد مثالی آورده شده است.
اسلاید 263: مثال :#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 ; }
اسلاید 264: آرايه اشياء (array of objects)امكان استفاده از آرايه در مورد اشياء ميباشد. بعبارت ديگر ميتوان در برنامه ها آرايهاي از object ها داشته باشيم.در اسلاید بعد مثالی آورده شده است.
اسلاید 265: مثال :#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; }
اسلاید 266: اشارهگر به اشياء (pointers to objects )در مورد اشياء نيز از اشارهگرها نيز ميتوان استفاده نمود. از عملگر در اين مورد استفاده ميشود. در اسلاید بعد مثالی آورده شده است.
اسلاید 267: مثال :#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; }
اسلاید 268: اشارهگر this (this pointer)هر تابع عضو يك كلاس داراي يك پارامتر مخفي بنام this pointer ميباشد. this اشاره به object خاصي مينمايد. در اسلاید بعد مثالی آورده شده است.
اسلاید 269: مثال :#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; }
اسلاید 270: توابع مجازي و پلي مرفيسم (virtual functions)تابع مجازي، تابعي است كه در base class تعريف شد و بوسيله derived class تغير داده ميشود. براي اعلان يك تابع مجازي بايستي از كلمه virtual استفاده نمائيم.تغير تابع در كلاس مشتق روي تابعي كه در كلاس پايه (base class ) تعريف شده انجام ميشود. در اسلاید بعد مثالی آورده شده است.
اسلاید 271: مثال :#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 ; }
اسلاید 272: پایان
اسلاید 273: keywords and alternative tokens.
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت نیاز با شماره 09353405883 در واتساپ، ایتا و روبیکا تماس بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.