صفحه 1:
دانشگاه آزاد اسلامی واحد گرگان
گروه مهندسی کامپیوتر و فناوری اطلاعات
برنامه نویسی (6++
محمد رضا ملک شاهکویی
مم wena aah
OOO.OrOdek.I-
سایت و انجمن علمی تخصصی مهندسی شیمی
GOTOWE.COD
صفحه 2:
برنامه نوبسی به زبان ++ (6. نوبسنده: جعفرنژاد قمی
* کتاب آموزش زبان برنامه نوبسی ++ () دایتل دایتل
ابزارها و نرم افزارهای مورد نیاز:
نرم افزارهای آفیس و ویژوال استودیو ۲۰۰۸ 2 @orkaad 4
آدرس پست الکترونیکی:
mamad.malek@gmail.com
صفحه 3:
Oourse Cuckritica Gchewe
امتحان پایان ترم: ۱۴ نمره
امتحان میان ترم: ۵ نمره
تمرین های کلاسی و شرکت در بحث کلاس: | نمره
صفحه 4:
جایگاه این درس در رشته مهندسی کامپیوتر و مهندسی ۲۳
این درس اولین درس دانشگاهی رشته می باشد و نقطه شروعی برای ورود به
دنیای جالب برنامه نویسی و علم و فن کامپیوتر هست. بنابراین یاد گیری اصول
اولیه برنامه نویسی در این درس از جایگاه ویژه ای برخوردار است.
این درس پایه و اساس برنامه نویسی است که جزء اصول این رشته می باشد و
اين اصول را به فرگیران یاد می دهد . بنابراین یادگیری دقیق این درس به
همراه ارائه پروژه های عملی که لازمه اين درس می باشد جزء اهم مسائل می
باشد .
صفحه 5:
اهداف درس
الگوریتمی برای حل مسئله ارائه دهد.
اصول و مبانى اوليه نرم افزار و سخت افزر را بشتاسد.
اهدلف و مفاهیم زبانهای برنامه نویسی را بداند.
مفاهيم اوليه برنامه نويسى ساخت یافته را بداند و اصول لازم را در مرحله اجراء بکار برد .
دستورا (کب+ را در برنامه ها بکار ببرد.
از توایع و روال های استاندارد زبان HO در صورت لزوم استفاده نماید.
از توابع » روال ها برای جدا کردن قطعات برنامه استفاده کند.
صفحه 6:
ان های برنامهنویسی
نرمافزارها توسط زبان های برنامهنویسی نوشته میشوند. زبان های برنامهنویسی»
یک سیستم ارتباطی هستند که توسط آن ها میتوان دستورات لازم را به ماشین
انتقال داد.
هر زبان برنامهنویسی به مجموعهأی از علایم. قواعد و دستورالعملها گفته میشود
که امکان ارتباط با کامپیوتر را جهت بیان کاری یا حل مسئلهای فراهم میکند.
صفحه 7:
در حالت کلی زبان های برنامهنویسی را به سه دسته زیر تقسیمبندی میکنند:
ان های سطح بالا
زبان های سطح پایین
زبان های سطح میانی
برنامه نوشته در یک طح بالا را به برنامه مقصد تبدیل میکند.
Source
Object Executable
File
صفحه 8:
صفحه 9:
هدفهاي كلي
شناخت حل مسئله و ارائه الگوریتم
شناخت اجزاء لازم برای حل مسئله
بررسی صحت الگوریتم
صفحه 10:
هدفهای رفتاری
دانشجو يس از مطالعه اين فصل بايد بتواند:
_ الگوریتمی را برای حل مسئله ارائه دهد.
* . الگوریتم های مختلف برای یک مسئله را مقایسه کند.
_ شرط ها و حلقه ها را در الگوریتم بکار پبرد .
صفحه 11:
مقدمه
در زندگی روزمره. انسان با مسائل مختلفی روبروست و برای هر کدام از این
مسائل (حل مشکلات) راه حلی و روشی را بر میگزیند. مسائلی از قبیل راه رفتن.
غذا خوردن. خوابیدن و غیره که بشر تقریباً هر روز آنها را پیش روی خود دارد.
همه اين مسائل نیاز به روشی برای حل کردن دارند مثلا راه رفتن باید با ترتیب
خاصی و مراحل معینی انجام شود. تا سئله راه رفتن برای بشر حل شود.
اصطلاحاً روش انجام کار یا حل مسئله را الگوریتم آن مسئله مینامند.
صفحه 12:
تعریف الگوریتم
هر دستورالعملی که مراحل انجام کاری را با زبانی دقیق و با جزئیات کافی
بیان نماید بطوریکه ترتیب مراحل و شرط خاتمه عملیات در آن کاملا"
مشخص شده باشد را الگوریتم گویند. به عبارتی دیگر: الگوریتم
مجموعهای از دستورالعمل هاء برای حل مسئله میباشد که شرایط زیر را
باید دارا باشد:
¥ دقيق باشد
۲ جزئبات کامل حل مسئله را داشته باشد.
۴ پایانپذیر باشد.
صفحه 13:
مراحل الگوریتم
برای حل یک مسئله باید الگوریتم آن مسئله را مشخص كنيم (يا بيابيم). كه
7 7 ۳ 2
اصطلاحاً طراحی الگوریتم برای آن مسئله نامیده میشود. در طراحی الگوریتم
معمولاً سه مرحله زیر را از هم جدا میکنند:
“”" خواندن دادهها
۲ انجام محاسبات
خروجیها
صفحه 14:
مثال : الگوريتمي بنویسید که دو عدد از ورودي دریافت کرده مجموع
دو عدد را محاسبه و چاپ نماید.
٠ شروع
۵-۱ر ۲ را بخوان.
۲-مجموع 2 , ظ را محاسبه و در 51110 قرار بده.
۳- 511110 را در خروجی چاپ کن
۴-پایان
صفحه 15:
مثال: الگوریتمی بنویسید که سه عدد از ورودی دریافت کرده مجموع و ميانگین
سه عدد را محاسبه و چاپ کند.
خروجىها م محاسبات
ese
جاب ميانكين
wre
١ سه عدد از ورودى بخوان
۲ مجموع سه عدد را محاسبه و در soy JB SUM
۳- 51110 را بر سه تقسیم کردهدر 216 قرار بده.
4 511۳0 ر 376 را در خروجی چاپ کن.
6 پایان.
صفحه 16:
معمولا درک یک الگوریت يتم با شكل راحت تر از نوشتن آن بصورت متن
میباشد. لذا الگوریتم را با فلوچارت(6122۳ 0100 نمایش میدهند.
فلوچارت از شکلهای زیر تشکیل میشود.
علامتهای شروع و پایان: که معمولا از یک بیضی استفاده می کنند:
علامتهای ورودی و خروجی: که معمولا از متوازیالاضلاع استفاده میشود:
صفحه 17:
علامتهای محاسباتی و جایگزینی: برای نمایش دستورات جایگزینی و
محاسباتی از مستطیل استفاده میکنند:
جایگزین یا
محاسبات
علامت شرط:
برای نمایش شرط از لوزی
استفاده میشود.
علامت اتصال:
برای اتصال شکلهای مختلف بهم از فلشهای جهتدار استفاده میکنند.
< >
صفحه 18:
فلوچارت مجموع سه عدد
Read(a,b,c)
صفحه 19:
مثال: فلوچارتی رسم نمائید که دو عدد از ورودی دریافت کرده سپس
محتویات دو عدد را با هم جابجا نماید
برای حل این مسئله 2 , 0 را دو متفیر که در آنها دو عدد خوانده شده. قرار
میگیرند در نظر میگیریم. سپس با استفاده از یک متفیر کمکی محتویات این دو
عدد را جابجا میکنيم :
صفحه 20:
صفحه 21:
Ki Boel
فلوچارت مسئله بالا بصورت زیر خواهد بود:
صفحه 22:
دمرين
۱- فلوچارتی رسم نمائید که طول و عرض مستطیل را از ورودى دريافت كرده
محیط و مساحت آنرا محاسبه و چاپ کند.
۲ فلوچارتی رسم نمائید که شعاع دایرهای را از ورودی دریافت کرده. محیط و
مساحت آنرا محاسبه و چاپ نماید.
۳- فلوچارتی رسم کنید که سه عدد ات ,له , ۳۳۷ را از ورودی
دریافت کرده. محتویات آن ها را جابجانموده, حاصل را در خروجی چاپ کند
۴ فلوچارتی رسم نمائید که دو عدد از ورودی دریافت کرده. سپس محتویات دو
عدد را بدون استفاده از متفیر کمکی جابجا کند.
۵ فلوچارتی رسم نمائید که عددی (درجه حرارت برحسب سانتیگراد) را از
ورودی دریافت کرده سپس آن را به درجه فارنهایت تبدیل کند.
2ج 2د
fase
صفحه 23:
دستورالعملهاي شرطي
در حل بسيارى از مسائل يا تقريباً تمام مسائل نیاز به استفاده از شروط
جزء نیازهای اساسی محسوب میشود. همانطور که ما خودمان در زندگی
روزمره با اين شرطها سرکار داریم. بطور مثال اگر هوا ابری باشد ممکن
است چنین سخن بگوییم:
اگر هوا بارانی باشد سپس چتری برمیدارم. در غیر اینصورت چتر برنمیدارم
صفحه 24:
:در حالت كلي شرط را بصورت زير نمایش مي دهد
NO
عمل يا اعمال بعدى
صفحه 25:
مثال : فلوچارتی رسم نمائید که عددی را از ورودی دریافت
,کرده» فرد یا زوج بودن آن را تشخیص دهد
Write(‘odd’)
صفحه 26:
مثال : فلوچارتی رسم کنید كه دو عدد از ورودی دریافت کرده بزرگترین عدد را بيدا کرده در
خروجی چاپ نماید.
صفحه 27:
مثال : فلوچارتی رسم نمائید که سه عدد از ورودی دریافت کرده.
کوچکترین عدد را یافته در خروجی چاپ نماید:
صفحه 28:
انمونه اجرای فلوچارت بالا بصورت زير میباشد
صفحه 29:
تمرین
۱- فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده. قدر مطلق عدد را در
خروجی چاپ کند.
۲- فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده مثبت. منفی یا صفر
بودن عدد را تشخیص داده. در خروجی با پیفام مناسب چاپ کند.
۳- فلوچارتی رسم نمائید که عددی را از ورودی دریافت کرده. بخش پذیری آن بر ۲
و ۵ را بررسی نماید.
۴ فلوچارتی رسم نمائید که ضرایب یک معادله درجه دوم را از ورودی. دریافت
کرده. ریشههای آن را محاسبه در خروجی چاپ کند.
صفحه 30:
حلقدها
در حل بسیاری از مسائل با عملیاتی روبرو میشویم . که نیاز به تکرار دارند
بیرد. فرض کنید. بخواهیم
میانگین ۱۰۰ عدد را محاسبه کنیم. در اینصورت منطقی بنظر نمیرسد که
۰ متغیر مختلف را از ورودی دریافت کنیم سپس آن ها را جمع کنیم.
و عمل تکرار آن ها به تعداد مشخصی انجام می
صفحه 31:
انواع حلقه ها
حلقه های با تکرار مشخص
حلقه های با تکرار امشخص
صفحه 32:
حلقه هاي با تکرار مشنخص
در اين نوع حلقهها تعداد تکرار مشخص میباشد این حلقه از اجزاء زیر
:تشکیل میشود
ال انديس حلقه
۲- مقدار اوليه براى انديس خلقه
۳- مقدار افزاینده برای اندیس حلقه (معمولا یک واحد در هر مرحله)
4 مقدار نهایی (تعداد تکرار حلقه)
۵- شرطی برای کنترل تعداد تکرار حلقه
صفحه 33:
اين حلقهها را غالبا با فلوچارت بصورت زیر نمایش ميدهند:
مقدار اولیه برای اندیس حلقه : ۱
مقدار افزاینده برای اندیس حلقه (معمولا
یک واحد در هر مرحله) : +۱
صفحه 34:
مثال : فلوچارتی رسم نمائید که عدد 1 را از ورودی دریافت کرده. مجموع
اعداد از یک تا 7 را محاسبه کند.
صفحه 35:
صفحه 36:
:نمونه اجرای فلوچارت بالا بصورت زیر است
صفحه 37:
مثال : فلوچارتی رسم کنید که « عدد از ورودی دریافت کرده بزرگترین مقدار از
بين « عدد را پیدا کرده در خروجی چاپ نماید.
انديس حلقه
صفحه 38:
صفحه 39:
مثال : فلوچارتی رسم نمائید که 6 , 1 . دو عدد صحیح مثبت را از
ورودی دریافت کرده سپس 5 به توان 8 را محاسبه کند.
انديس حلقه
مقدار نهایی
عدد به توان ۳۲
صفحه 40:
x
5
1
5
2
صفحه 41:
حلقههایی که تعداد تکرار آن ها مشخ
ان ها مشخص نیست.
صفحه 42:
در حالت کلی این نوع حلقهها بصورت زير نمایش داده میشوند:
صفحه 43:
مثال: فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده سپس
تعداد ارقام آن را شمرده در خروجی چاپ نماید.
عدد خوانده شده
تعداد ارقام
صفحه 44:
صفحه 45:
مثال : فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده. سری
فیبوناچی قبل از آن را تولید نماید.
ندر حالت کلی جملات سری بصورت
مگ یگ
عدد خوانده شده
جمله اول سری
جمله دوم سری
جمله سوم سری
صفحه 46:
3 سه» ۲2
1+2 ث©» 3
صفحه 47:
تمرین
۱- فلوچارتی رسم نمائید که عددى از ورودی دریافت کرده. کامل بودن آن را
بررسی نماید. (عدد کامل, عددی است که مجموع مقسومعلیههای آن با خودش
برابر باشد.)
۲- فلوچارتی رسم کنید که () را از ورودی دریافت کرده. () جمله سری
فیبوناچی را تولید نماید.
۳ فلوچارتی رسم نمائید که دو عدد 0 , 60 را از ورودی خوانده. بزرگترین
مقسومعلیه مشترک دو عدد را محاسبه و چاپ کند.
صفحه 48:
حلقههاي تودرتو
الگوریتمهایی که تا حال بکار بردیم. فقط شامل یک حلقه بودند. در صورتی که در
بسیاری از مسائل ممکن است نیاز به استفاده از چند حلقه در داخل هم باشیم. در این
نوع حلقهها باید دقت پیشتری به خرج دهیم. تا مشکلی پیش نیاید. اگر از حلقههای
نوع اول بصورت تودرتو استفاده کنیم در اینصورت برای هر حلقه شرط نهایی و
انديس اوليه جداكانه بايد تعريف كنيم .
صفحه 49:
در حلقههای تودرتو به ازای یکبار تکرار حلقه اولیه. حلقه داخلی به اندازه
مقدار نهایی خود تکرار میشود. در کل اگر حلقه اولیه 10 بار تکرار شود و
حلقه داخلی 190 بار: در اینصورت کل حلقه :
nxm
بار تکرار خواهد شد
وب
صفحه 50:
فلوچارت حلقههای تودرتو را میتوان بصورت زیر نشان داد:
اتمام کار حلقه های تو
در تو
مجموعه دستورات و جايكزينى ها
صفحه 51:
مثال : فلوچارتی رسم نمائید که را از ورودی دریافت کرده. مجموع سری زیر
را محاسبه نماید:
S=1+2+34+..44
N
انديس حلقه اول
ورودى ©
محاسبه فاکتوریل ۳
اندیس حلقه داخلی
مجبوع سس
صفحه 52:
ایا راه ساده تری وجود دارد؟
صفحه 53:
اس sum ا
1
صفحه 54:
تمرینات آخر فصل
- فلوچارتی رسم نمائید که (1) عدد از ورودى دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجى
جاب نمايد.
؟- فلوجارتى رسم نمائيد كه 6 , 00 را از ورودى خوانده مقدار سرى زير را محاسبه كنيز و
A
دب بو
2 tal
۳-فلوچارتی رسم نمائيد كه عددی را از ورودی دریافت کرده مقلوب عدد را محاسبه و در خروجی
۴- فلوچارتی رسم کنید كه تاريخ تولد شخصی را از ورودی خوانده. سن شخص را با تاريخ روزه محاسبه
نموده در خروجی چاپ کند.
۵- فلوچارتی رسم نمائید که (<6) ۷, لال را از ورودی دریافت کرده سری فیبوناچی بین (, (4 را
تولید کرده. در خروجی چاپ کند.
صفحه 55:
x
2
3
t
3
=
2.
9
5
صفحه 56:
8 فصل اول : مقدمات زبان 40+
9افصل دوم : ساختار های تصمیم گیری و تکرار
8 فصل سوم : سایر ساختار های تکرار
8 فصل چهارم : اعداد تصادفی
8 فصل پنجم : آرایه ها
۵ فصل ششم : توابع
© فصل هفتم : ساختارها و اشاره گرها
صفحه 57:
صفحه 58:
فهرست مطالب فصل اول
قانون نامگذاری شناسه ها
متغیر ها
اعلان متغیر
تخصیص مقادیر به متغیر
داده های از نوع کرکتر
کرکتر های مخصوص
رشته ها
نمایش مقادیر داده ها
دریافت مقادیر
عملگر انتساب
عملگر های محاسباتی
. عملگرهای افزایش و کاهش
. عملگر مد
. عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات (0)
. توابع کتابخانه
برنامه در 60++
صفحه 59:
این زبان در اوائل دهه ۱۹۸۰ توسط صفصحه )در آزمایشگاه بل
طراحی شده. این زبان عملاً توسعه یافته زبان برنامه نویسی () می باشد که
امکان نوشتن برنامههای ساخت يافته شی گرا را میدهد.
صفحه 60:
قانون نامگذاری شناسهها
OY حروف کوچک و بزرگ در نامگذاری شناسهها متفاوت میباشند.
4
صفحه 61:
انون نامگذاری اسهها
۲ در نامگذاری شناسهها از حروف الفبا ارقام وزیر خط (1۴06۳560۲6)
استفاده میشود و حداکثر طول شناسه ۳۱ میباشد و شناسه بایستیبا
یک رقم شروع نگردد.
صفحه 62:
مكذ اسه
۳ برای نامگذاری شناسهها از کلمات کلیدی نبایستی استفاده نمود. در زيز بعضى از كلمات
کلیدی داده شده است.
صفحه 63:
صفحه 64:
انواع داده ها
tt ۱۳۲۷۶۸- تا ۷۷
Beare + د سس
۷ تا -۳۸۳۶۲۸ ۱۲۱۴۷ -
۹۷۵ تا sted brag
یک کارکتر
۷ تا -۱۲۸ مسب
GS 16r-00 50.4268
ال
9مو تا 6.6606
صفحه 65:
قبل از آنکه در برنامه به متغیرها مقداری تخصیص داده
شود و از آنها استفاده گردد بایستی آنها را در برنامه اعلان
نمود.
صفحه 66:
چند مثال از اعلان متغیر ها :
“” _برای اعلان متغیراز نوع tint
tt x;
براى اعلان متغيرهاي م و 0 راز نوع 103 که هر کدام چهاربایت از
Poa 7,
حافظه را اشغال oe
براي اعلان متفیر 066 از نوع کرکتر که میتوان یکی از ۲۵۶ کرکتر را
به آن تخصیص داد و یک بایت را اشغال میکند:
chor vend;
صفحه 67:
با استفاده از عملگر < میتوان به متغیرها مقدار اولیه تخصیص ذ
صفحه 68:
* در دستورالعمل
نوع »با مقدار اولیه ۲۶ اعلان نموده .
در دستورالعمل 0 HOPOOO مسار
متغيرهاى ناو ف را از نوع,م بط تعريف نموده با مقادير بترتيب
و
صفحه 69:
دادههای از نوع کرکتر
برای نمایش دادههای از نوع اه در حافظه کامپیوتر از جدول
1 استفاده میشود. جدول اسکی به هر یک از ۲۵۶
کرکتر یک عدد منحصر بفرد بین ۰ تا ۲۵۵ تخصیص میدهد.
صفحه 70:
کامپیلر HO بعضی از کرکترهای مخصوص که در برنامه میتوان از
آنها برای فرمت بندی استفاده کرد را تشخیص میدهد. تعدادی از
این کرکترهای مخصوص به همراه کاربرد آنها در اسلاید بعد آورده
شده است .
صفحه 71:
کرکترهلی مخصوص
بعنوان مثال از کرکتر [ه میتوان برای ایجاد صدای بسا
استفاده نمود.
joka x= Me
صفحه 72:
رشته یا cram عبارتست از دنبلهای از کرکترها که بین قرار داده
میشود. در حافظه کامپیوتر انتهای رشتهها بوسیله ۰۱ ختم میگردد
در اسلاید بعد به دو مثال دقت تما سد.
صفحه 73:
STORE" 80016" یک رشته ده کرکتری میباشد
که با توجه په کرکتر ۰۱ که به انتهای آن در حافظه
لضافه مى شود جمعاً يازده بايت را اشغال م ىكند.
صفحه 74:
دقت نمایید که ۲۷۲" یک رشته میباشد که دو بلیت از
حافظه را اشغال میکند در حالیکه ۲۷ یک کرکتسر
میباشد که یک بایت از حافظه را اشغال مینماید.
صفحه 75:
نمایش مقادیر دادهها
برای نمایش دادهها بر روی صفحه مانتور از لت که
بدنبال آن عملگر درج یعنی < <قید شده باشد استفاده
میگردد. بایستی توجه داشت که دوکرکتر يشت سر هم
توسط HO بصورت یک کرکتر تلقی میگردد.
صفحه 76:
۱ لخد +
برای نمایش پیفام بیس اسب بر روی صفحه نمایش
:"مب لعي" >> جد
۲ برای نمایش مقدار متفیر ۲ بر روى صفحه نمايش :
صفحه 77:
دریافت مقادیر متغیرها
به منظور دریافت مقادیر برای متفیرها در ضمن اجرای برنامه از
صفحه کلید. از 240 که بدنبال آن عملگر استخراج یعنی >>
قید شده باشد میتوان استفاده نمود.
صفحه 78:
int x;
cout << "Enter a number:" ;
cin >>: x
صفحه 79:
عملگر انتساب میباشد که باعث میگردد
مقدار عبارت در طرف راست اين عملكر ارزيابى
صفحه 80:
از عملگرهای انتساب
چندگانه نيز مىتوان
استفاده نمود. كه مقدار
سه متفیر 2 و ۷و برابر
با ۶ می شود
صفحه 81:
عملگرهای محاسباتی
در 0++ پنج عملگر محاسباتی وجود دارد که عبار تند از :
/
%
این عملگرها دو تائی میباشند زیرا روی دو عملوند عمل مینمایند. از طرف
دیگر عملگرهای + و -رامیتوانبعنوان عملگرهای یکتائی نیز در نظر گرفت.
صفحه 82:
در حالتی که هر دو عملوند عملگرهای .۰1 ۰*۰۱ +, - از نوع
صحیح باشد نتیجه عمل از نوع صحیح میباشد.
صفحه 83:
در صورتیکه حداقل یکی از عملوندهای عملگرهای ۰1 *. -. + از
نوع اعشاری باشد نتیجه عمل از نوع اعشاری میباشد.
9.۸
ه 9.0
6.0/8.0
صفحه 84:
متغیر از نوع صحیح را کاهش مینامند..
صفحه 85:
عملگر کاهش را با - - و عملگر افزایش
رابا ++ نمایش میدهند: چون ععلگزهای
++ و - - فقط روى يك عملوند اثر دارند
اين دو عملكر نيز جزء عملگرهای یکتائی
مى باشند.
صفحه 86:
معادل میباشند و بطریق مشابه سه دستورالعمل زیر نیز معادل می باشند.
صفحه 87:
از عملگرهای ++ و -- میتوان بدو صورت پیشوندی و پسوندی استفاده نمود.
در دستورالعملهای پیچیده عملگر پیشوندی قبل از انتساب ارزیابی می شود و عملگر
پسوندی بعد از انتساب ارزیابی میشود.
صفحه 88:
int x=5;
yHt+x * 2;
پس از اجرای دستورالعملهای فوق :
پس از اجرای دستورالعملهای فوق :
صفحه 89:
عملگر رسد
ازعملگرهایب_کتلتیمیباشد و مشخصک نندم
تعناد بلیتهالیلسنکه یکنسوع دادم لشغل مک ند
مثال :
مقدار ۲ نمایش داده میشود .
مقدار ۴ نمایش داده می شود.
صفحه 90:
عملگرهای جایگزینی محاسباتی
برای سادهتر نوشتن عبارتها در (6++۰ میتوان از عملگرهای
جایگزینی محاسباتی استفاده نمود.
صفحه 91:
اولویت عملگر
ارزیایی مقدار یک عبارت ریاضی براساس جدول اولویت عملگرها انجام میگردد. در ذیل جدول اولویت
عملگرها براساس بترتیب از بیشترین اولویت به کمترین اولویت داده شده است.
پرانتزها
عملگرهای یکتابی
عملگرهای ضرب و تقسیم و باقیمانده
عملگرهای جمع و تفریق
عملگرهای درج و استخراج
عملگرهای جایگزینی و انتساب
O
جد sizeof
صفحه 92:
ورم*هبم۰ ربو)
با توجه به جدول اولویت عملگرها داریم که
چب به راست پرقترها
رلست به چپ ععلگرهای یکتایی
چپ به راست | عملگرهای ضرب و تقسیم و باقیمانده
عملگرهای جمع و تفریق
عملكرهاى درج و استخراج
عملكرهاى جايكزينى و انتساب
صفحه 93:
i u=O , b=O, v=O, =O;
dEat+ * ble +4;
ل >> نوو >> <<b <<a;
عملگرهای ضرب و تقسیم و بقیمانده
عملگرهای جمع و تفریق
عملگرهای درج و استخراج
عملگرهای جایگزیتی وانتساب
صفحه 94:
,ضیحات در برنامه باعث خوانلئی بیشتر و درک بهتر برنامه می شود.
بنابراین توصیه بر آن است که حتی الامکان در برنامهها از توضیحات
استفاده نمائیم. در (++. توضیحات بدو صورت انجام میگیرد که در
اسلایدهای بعد به آن اشاره شده است.
صفحه 95:
الف: این نوع توضیح بوسیله || انجام میشود. که کامپیوتر هر چیزی را که بعد از // قرار داده
شود تا انتهای آن خط اغماض مینماید.
مثا
[lew exprd ip ano of a ond جمدم
ب: توضیح نوع دوم با ا# شروع شده و به 4/ ختم میشود و هر چیزی که بین* | و */ قرار گیرد
اغماض مینماید .
مثال :
صفحه 96:
توابع کتابخانه
زبان (6++ مجهز به تعدادی توابع کتابخانه میباشد. بعنوان
مثال تعدادی توابع کتابخانه برای عملیات ورودی و خروجی
وجود دارند. معمولا توابع کتابخانه مشابه . بصورت برنامههای
هدف (برنامه ترجمه شده بزبان ماشین) در قالب فایلهای
کتابخانه دسته بندی و مورد استفاده قرا رمیگیرند. این فایلها
را فایلهای دس مینامند و دارای پسوند .۲ میباشند.
صفحه 97:
نحوه استفاده از توابع کتابخانه ای
برای استفاده از توابع کتابخانه خاصی بایستی
نام فایل سفعس آنرا در ابتدای برنامه در دستور
#طعخم قرار دهیم.
صفحه 98:
عا ۱
تعداد کر کترهای رشته 5
desist
کداسکی کرکتر»
تبدیل به حروف کوچک
تبدیل به حرف بزرگ
(e
tot
dovble
double
double
double
dpuble
dpuble
tot
double
لت
tou(d)
leaded)
vin Gd)
vari(d)
virlea(e)
tau(d)
لاطا
toupeerle )
صفحه 99:
برنامه در ۵)++
اکنون باتوجه به مطالب گفته شده قادر خواهیم بود که تعدادی برنامه ساده و
کوچک به زبان 62++ بنویسیم. برای نوشتن برنامه بایستی دستورالعملها را در
تابع ع( ) قرار دهیم و برای اینکار میتوان به یکی از دو طریقی که در
اسلایدهای بعد آمده است ۰ عمل نمود.
J
صفحه 100:
صفحه 101:
صفحه 102:
terror I
به خطاهای برنامه نویسی ۳۲۳۳ می گویند. ما در برنامه نویسی دو نوع خطا داریم:
خطاهای دستوری (۲۲ رو)
خطاهای منطقی (سوه ایا.
صفحه 103:
برنامه ای که پیغام عچعجمم| لس oben دج ها ++) را روی صفحه مانیتور تمایش
ss
می دهد.
حلمم طعادة
stot)
1
: "ما عوسيهما احفصت امصزجات مو وا 0+4" >> اوم
: 0 مسج
1
صفحه 104:
نماید
مین
یل
تبدا
تب
بزر
wy
>
به
فته ب
کوچک را گر
انگلیسی
رف انكلي
حرا
7
.2
امه ز
نا
بر
۸
صفحه 105:
,دهد
نمایش می:
اسیه و
محاسپا
اصلضیب آنها را
lo
مجموع و
a ad.
گر
4
نوع اعشاری
۵ از ن
عد
>
ss
صفحه 106:
فصل دوم
ساختارهای تصمیم گیری و تکرار
صفحه 107:
عملگر های رابطه ای
عملگر شرطی
دستورالعمل شرطی
عملگر کاما
عملگر های منطقی
دستورالعمل ۳۲
صفحه 108:
های رابطه 1
از اين عملكرها براى تعيين اينكه آیا دو عدد با
هم معادلند يا يكى از ديكرى بزركتر يا كوجكتر
میباشد استفاده میگردد. عملگرهای رابطهای
عبارتند از
مساو
مخالف
صفحه 109:
عملكر شرطى
شکل کلی عملگر شرطی بصورت زیر میباشد:
عملگر شرطی تنها عملگری در 60:+ میباشد که دارای سه عملوند میباشد.
صفحه 110:
90ص ۱
زمر : ع7 (بجمحم
اين دو دستور العمل باعث می شوند که ماکزیمم مقادیر مرو در ط قرار بگیرد.
200 7 سیم" >> وه : pou << "Poked" ;
اكر مقدار »< بزركتر يا مساوى ده باشد رشتة لدم در غیر اینصورت رشته
tales Pode داده مى شود.
صفحه 111:
v,
< > دستورالعمل شرطی
۰
توسط این دستور شرطی را تست نموده و بسته
به آنكه شرط درست با غلط باشد عکسالعمل
خاصی را نشان دهیم.
if ope)
{
م مستورا سل
از MeL 5
else
{
دستورا سل[
ار مستورا اهمل13
صفحه 112:
صفحه 113:
freckle <a . k>
coed)
تیا
وم <<
P(x<O)
oat << "xt weave” << pad;
vey
{
:وس د
قحس >> >> فج
}
rena O;
}
صفحه 114:
LIS عملگر
تعدادی عبارت را میتوان با کاما بهم متصل نمود و تشکیل یک عبارت
پیچیدهتری را داد. این عبارتها به ترتیب از چپ به راست ارزیابی شده و مقدار
عبارت معادل عبارت» میباشد.
صفحه 115:
اگر داشته باشیم ۵عو, عط , ۰26: عبارت زیر را در نظر بگیرید:
مقدار عبارت برابر است با DEC که معادل ۱۰ میباشد.
صفحه 116:
عملگرهای منطقی
با استفاده از عملگرهای منطقی میتوان شرط های ترکیبی در برنامه ایجاد نمود.
عملگرهای منطقی عبار تست از :
6220
OR
00
که در 0۵++ به ترتیب بصورت زیر نشان داده می شود.
&&
صفحه 117:
صفحه 118:
if (x= = 5) ily != 0))
cout << x << endl;
صفحه 119:
۳
iostream.h > <_— علساعصق
int main()
{
float a, b, c;
cout << “Enter three real numbers" << endl ;
cin >> ن << ط << ه
if((a <b + c) &&(b < atc) &&(c < atb))
cout << “It is a triangle" ;
else
cout << “Not a triangle" ;
return 0;
1
صفحه 120:
دستور العمل Por
از دستور العمل دا براى تكرار دستور العمل ها استفاده مى شود. شكل كلى دستور
Por بصورت زیر میباشد:
۲0۲ ) عبارت 7 ۲ عبارت Yorke)
دستوراهمل1 :
لمستورا_اهمل2 5
Todt jy j
صفحه 121:
i++)
cout << “hello \n”;
4
مجموعه دستورات بدنه حلقه
{
صفحه 122:
مثال
میا
1
ict i;
Por (FC; i<=O; it +)
1
رما صلاصما" >> نوص
}
}
صفحه 123:
نحوه اجرای دستور ۳
iat i;
Por (Fd; i<=O; i++)
{
”ما ماب" >> انم
}
صفحه 124:
نحوه اجرای دستور ۳
: - 08
it+)
Por (iF; i<=9;
{
<< “ ۷
}
صفحه 125:
نحوه اجرای دستور ۳
: - 001
it+)
vo
Por (iF; i<=9;
{
<< “ ۷
صفحه 126:
نحوه اجرای دستور ۳
:-23
iat i;
صفحه 127:
نحوه اجرای دستور ۳
:-2
iat i;
صفحه 128:
نحوه اجرای دستور ۳
inti; one
f ۱-2
tN
Por (FC; i<=9;5 i
{
<< “ ۷
}
<a”
صفحه 129:
نکته
* لزومی ندارد که کنترل گر حلقه حتماً از ۱ شروع شود.
int i;
for G=5 i<=7% i++)
{
cout << “hello \n”;
}
صفحه 130:
نکته
* مقدار دهی اولیه کنترل گر حلقه می تواند خارج از دستور ۳۳ باشد.
inti =1;
for Cj; i<=3; i++)
{
cout << “hello \n”;
1
صفحه 131:
نکته
* مقدار دهى اوليه كنترل كر حلقه مى تواند خارج از دستور +8 ياشد. در اين صورت مى توان جملهاول موجود در عبر ۲ را
خالی کذاشت.
int i=1; int i=1;
for (i; i<=3; for ر i<=3;
i++) i++)
{ {
cout << “hello cout << “hello
\n”; \n”;
1 1
صفحه 132:
نکته
* گام حرکت می تواند در بدنه دستور ۳ تعریف شود.
int i=1;
for ( i; i<4 )
{
cout << “hello \n”;
i++;
}
صفحه 133:
نکته
* معرفی کنترل گر حلقه می تواند در داخل دستور ۳۲ باشد.
for (inti= 1; i<=3; i+
+)
{
cout << “hello \n”;
}
صفحه 134:
نکته
* در دستور ۳ اگر قسمت شرط خالی باشد. حلقه همیشه اجرا خواهد شد. به عبارتی هیچ شرطی برای توقف نداریم
for (int i= 1;
+)
{
cout << “hello \n”;
وقتی هیچ شرطی نداریم, دو قسمت دیگر دستور ۴۳۲ نیز می توانند خالی باشند.
for ( i 3 )
{
cout << “hello \n”;
1
صفحه 135:
نکته
* لزومی ندارد که گام حرکت بصورت افزایشی باشد بلکه می تواند
بصورت کاهشی نیز باشد.
for (inti= 3, i>=1; i-)
{
cout << “hello \n”;
}
* تمرین: اعداد ۱۰۰ تا ۱ را به صورت نزولی چاپ نمایید. ( با گام
حرکت افزایشی و کاهشی جداگانه بنویسید)
صفحه 136:
نکته
* گام حرکت می تواند افزايش یا کاهش بیش از ۱ واحد را داشته
باشد.
* مثال: چاپ اعداد فرد بین ۱ تا ۱۰۰
10۲ حالص 1 1 >< 100:
k=k+2)
{
cout << k << “\n’;
}
صفحه 137:
نکته
* کنترل گر حلقه می توند اعشاری یا کاراکتری باشد. لزومی ندارد
که حتما عدد صحیح در نظر بگیریم.
بطم ر2 حعطم رج؛ خطه تتقطاء) ۲0۲
)+
{
cout << ch << “\n’;
}
صفحه 138:
فته فاکتوریل آن را محاسبه ونمایش
جح وموم
يك
زج << وم
Por( =; t<=a; ++)
tay
لدم >> بصو >> قحم
rena O 5
}
صفحه 139:
صفحه 140:
)سدم
1
tt FO;
(: 9 ع>۱: )و
Dal << + >> cud,
rena ;
}
صفحه 141:
fet bikin
کوج <=O; +H)
Por(i=d; <=9; +41)
Por{k=;; k<=O; +h)
{
۳400و + ۳00+
mou <<a << ‘Wj
صفحه 142:
دمرين
برنامه ای که اعداد ذوج بین ۱ تا ۱۰۰۰ را چاپ کند.
برنامه ای که ۱۰۰ عدد را خوانده. مجموع را محاسبه و چاپ کند.
برنامه ای که حاصلضرب اعداد ۱ تا ۵۰ را چاپ کند.
برنامه ای که ۵۰ کاراکتر از صفحه کلید خوانده و تعیین کند که
کدام یک حرف کوچک است.
برنامه ای که ۱۰۰ عدد صحیح را خوانده «70 و 7 را چاپ کند.
برنامه ای که کاراکتر هایی که کد آن ها بین ۱۰۰ تا ۲۰۰ هست. را
چاپ نماید.
صفحه 143:
کاربرد دستور سا در دستور Por
اگر در بدنه ۳۲ از جمله ی کنر استفاده شود. ادامه ی اجرای
حلقه متوقف شده و حلقه خاتمه می یابد.
iti, x}
Por (i=C;i<=dOO j++)
{or >x;
قطعه کد فوق حداکثر ۱۰۰ عدد صحیح از ورودی می گیرد. ولی اگر در بين
اعداد ورودی عدد ۵۰ وارد شود بدون بررسی شرط حلقه از ادامه اجرای
دستورات ۳ اجتناب کرده و از حلقه خارج می شود.
صفحه 144:
مثال
* قطعه کدی که تعدادی کاراکتر از صفحه کلید خوانده. بعد از
فشردن دکمه ی ۶) تعداد آن ها را مشخص کند:
ی
inti
jit +) ,)سوم
<<
B (ch=='@’) brick;
}
صفحه 145:
حلقه ۳ تودر تو
* می توان داخل بدنه ی دستور 7" هر دستور دلخواه دیگری نوشت. به عنوان
مثال می توان از یک دستور ۳۳ در بدنه دستور ۳۲ استفاده کرد.
* قطعه کد زیر عبارت 1/۳" را ۱۵ بار اجرا می کند:
pout<<"“Wello رز
صفحه 146:
مثال: چاپ جدول ضرب اعداد
icf wain()
(rai
بلح د )سوط i=; i ++)
Por(wt FC; <=; i++)
{ mu<<ij<<" 5
P (FID) cous<<‘\W;
}
صفحه 147:
مثال: برنامه ای که ۲۰ عدد را خوانده و برای هرکدام
.مجموع اعداد ۱ تا آن عدد را محاسبه کند
fat او
1
تا
Por(it FRC; i<=CO; i++)
fAnD=O; via>>x}
Por (tot RC; i<=x; i++)
2و
ty “<<x<<" >>> 1( اه میک کلم
صفحه 148:
کاربرد حلقه ۲ با دو اندیس
برنامه ای بنویسید که ستون اعداد زیر را جاب کند:
Js! روش
Por(it RC; i<=CO; i++)
:الحجج> >- 00> >" “>> كك لوو
روش دوم:
Por(t Rd, RCO; i<=CO; i*4, i)
DIAIS<I<<", “<<j<<eurc;
صفحه 149:
دستور هر > Por
* اگر دستور صحفلستز در حلقه ۳۳ استفاده شود. جملاتی از حلقه که
هنوز اجرا نشده اند بدون اجرا مانده و ادامه اجرا از انتهای حلقه اغاز
خواهد شد.
)عدم
1
۷۱, 2:
Pore; =O; +)
{ora >x;
صفحه 150:
فصل سوم
ساير ساختارهای تکرار
صفحه 151:
فهرست مطالب فصل سوم
whee Joa! gins
ce while Jeall دستور
bredk دستورالعمل
pore Jl دستور
sutk Josll giao
تابع اصه۳()
<> kira Slee
جدول اولویت عملگرها
صفحه 152:
دستور العمل white
از این دستور العمل مانند دستورالعمل 8 براى تكرار يك دستورالعمل ساده يا تركيبى
استفاده میگردد. شکل کلی این دستور العمل بصورت زیر مى باشد.
صفحه 153:
Por 9 while تفاوت دستورهای
دستورالعمل 103 زمانی استفاده می شود که تعداد دفعات تکرار
از قبل مشخص و معین باشد. در صورتیکه تعداد دفعات تکرار
مشخص نباشد بایستی از دستورالعمل ۱۷0116 استفاده نمود.
دقت کنید با پیاده سازی مکانیزم های خاصی مي توآن بدون
توجه به دفعات تکرار از هر دو دستور بصورت مشابه استفاده
os
صفحه 154:
tet x=O
while(x<S)
زج کج << Tal
با اجرای قطعه برنامه فوق مقادير زير نماي
: میشود
صفحه 155:
yor
it cout = O , g;
Poot x, pu =O, wy;
/*» تعناد مقامير ورومى */ زه << ويم
1 > سح )طن
صفحه 156:
نکته
* همانند دستور ۳۲ اگر داخل بدنه دستور عللطاربه فقط یک جمله
باشد می توان [ و ] را حذف کرد.
* مثال: نمایش اعداد ۰ تا ۱۰۰:
صفحه 157:
برنامه زیر را تفسیر کنید
صفحه 158:
دستورالعمل عازن سل
این دستور العمل نیز برای تکرار یک دستورالعمل ساده
یا ترکیبی استفاده میشود. شکل کلی این دستورالعمل
بصورت زیر میباشد.
زمعرفی کنترل گر حلقه
زمقدار دهی اولیه کنترل گر حلقه
do
5 مستوردامل۱)
دستورالعمل ۲
nga! دستورا :
گام حرکت i
} while( 4);
صفحه 159:
تفاوت دستورهای انب hie 9 do
@
هه
در دستورالعمل ۷۷10116 ابتدا مقدار شرط
ارزیابی شده اما در دستورالعمل 00
While ابتدا دستورالعمل اجرا شده سپس
مقدار شرط ارزیابی میگردد. بنابراین
دستورالعمل ۲۷۷116 00 حداقل یک بار
انجام می شود .
صفحه 160:
include <iostream.
int main()
int count = 0;
do
cout << count ++<<endl ;
while(count <= 9);
return 0 ; }
ارقام ۰ تا ٩ را روی ده خط نمایش میدهد.
صفحه 161:
دستورالعمل لب
این دستورالعمل باعث توقف دستورالعمل های تکرار( طاب ط, عاس , ۵۰۲ شده و
کنترل به خارج از اين دستورالعمل ها منتقل مینماید.
Break
صفحه 162:
> وتاب
لمانا
1
5=O.0 ; رورسم
<< وم
) (4000.0 > بط
}0.0 > ممم
صفحه 163:
حا > طعاطة
)سم
{
tet cout = D 5
٩( )انب
counter : 11 {
pont ++;
( 00 < سس
breck |
"م" >> سج >> " :
صفحه 164:
جمع تعدادی عدد اعشاری که بیشتر از 0 و کمتر از
(0000هستند را محاسبه می کند. اگر بین اعداد
وارد شده عدد منفی وارد شود؛ بواسطه دستور
(break حلقه خاتمه می یابد.
اگر عدد وارد شده بزرگتر یا مساوی 1006060 باشد
نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد
Porc = (; x < (DOO . 0; ++ vont )
{
0
Dat << ۲۵ - سرب dhe " <<eud
bred ;
}
ano tex}
وو <<
pet << pu << ‘Wa |
}
صفحه 165:
Ocho" << vad; مهب - ۵" >> فحر
جمع تعدادى عدد كه بين ) و 0000000 هستند. اگر بین
اعداد وارد شده عدد منفى وارد شودء بواسطه دستور
«ila sbreak خاتمه مى يابد.
اكر عدد وارد شده بزرگتر از 000000 باشد نیز شرط
حلقه برآورده نشده و حلقه خاتمه می یابد.
نکته: اين حلقه حداقل یک بار اجرا می شود.... حتی اگر
عدد اول بزرگتر از 00000 باشد نیز در مجموع شرکت
داده خواهد شد. سپس از حلقه خارج خواهیم شد.
:یا
1
} ubdele <= 0000:0(
pow << suo << pod;
renee O ;
}
صفحه 166:
دستورالعمل صفسه
از دستورالعمل عع# میتوان در دستورالعمل های تکرار . طانب. طاب عل
Por استفاده نمود. این دستورالعمل باعث میشود که کنترل به ابتدای دستورالعمل
های تکرار منتقل گردد.
(تذکر: در ابتدای حلقه بایستی شرط حلقه نیز بررسی شود)
پس بهتر است بگوییم به انتهای بدنه حلقه تکرار رفته و از آن جا ادامه می دهد.
Cont
صفحه 167:
مثال ۱:
جمع تعدادی عدد که کوچکتر و مساوی
0 هستند را بدست می اورد. اگر بین
اعداد وارد شده عدد منفی وارد شود» در حاصل
جمع شرکت نخواهد کرد و اجرای دستورالعمل
ها به انتهای حلقه هدایت خواهد شد.
اگر عدد وارد شده بزرگتر از 4000000 باشد نیز
شرط حلقه برآورده نشده و حلقه خاتمه می یابد.
نکته: این حلقه حداقل یک بار اجرا می شود....
حتی اگر عدد اول بزرگتر از DOO باشد نیز
در مجموع شرکت داده خواهد شد سپس از حلقه
خارج خواهیم شد.
صفحه 168:
)سيم
1
:© مص دور
:0 مه ود تس
/* و عبيتاز تتعناد معاد ورومي" زب << و
raed <u; + ome) :0 2 يسح Port
1
حدم
تسمم ( © عدوم
ot x;
صفحه 169:
suck Joa)! gis
همانطور که می دانید از دستورالعمل شرطی(عطا« ۵) می توان بصورت تودرتو
استفاده نمود ولی از طرفی اگر عمق استفادة تو در تو از اين دستورالعمل زياد
گردد. درک آن ها مشکل می شود . برای حل این مشکل ۰:60 . دستورالعمل
mutch: که عملا یک دستورالعمل چند انتخابی میباشد را ارائه نموده است.
switch
Case
صفحه 170:
صفحه 171:
ver 4:
val << "owe" << wud;
سا
pel << "bun" << od;
bred
:قمع
vou << "Pad" << ead;
| * ايد ناه لجس */
صفحه 172:
Phere” << red; متا سییر >> نج
breds;
To These" << ead; لعج >> نیو
یط
DM << "Breuer Thos Three" << rod;
صفحه 173:
32000000 ne orc]
Pepe resem es
ابتداى برنامه بايستى داشته باشيم
#include
<iostream.h>
صفحه 174:
كرى صفحه کلید گر
قطعه برنامه ذیل یک کرکتر را از
صفحه 175:
EOF 4 معنی1 0۶ ۳00 ميياشدكه در
ط.دةء تعریفشده و مقدار آزسولبر
با ا- سوباشد مقدار آردر سیستمعامل05
عبیتستز 2 1اه .
خاممیی.. وه
)سم
ae
who (xe = )سد (( BOP)
قحو >>:
rena ;
}
صفحه 176:
:)اس
0
:©
۳ >> ۵00" >> فصو
:ی
ape
8:
pou << “BLOG” << end;
bred ;
oo
“Y@WOO" << werd; bros; >> فجن
صفحه 177:
سنا
1
chor wen;
he (cont = )سم ) ) BOP)
Pont I=" ")
oot <<cend}
سم 0 :
}
صفحه 178:
تمرین : برنامه ای با استفاده از ساخنار عص طسو که یک عملگر و دو
عملوند را از ورودی خوانده . عملگر را بر روی عملوند اجرا نمایید.
صفحه 179:
از این عملگر برای تبدیل موقت یک نوع 8382 به نوع
استفاده مى شود. اين عملكر يك عملكر يكتائى مى باشد.
صفحه 180:
صفحه 181:
صفحه 182:
صفحه 183:
دمرين
برنامه ای که یک سکه ۱۰۰ ریللی رابه سکه های "و۵ و۱۰و۲۰ و ۵۰
ریالی خرد کند.
برنامه ای که خروجی زیر را چاپ کند:
برنامه ای که حاصل عبارت زیر را بدست اورد:
لذ ... + 3+ 2 +1- ى
صفحه 184:
صفحه 185:
فهرست مطالب فصل چهارم
تولید اعداد تصادفی
تعریف نوع داده ) CypedeP
داده های از نوع شمارشی
صفحه 186:
اعداد تصادفی
تصادفی پا شانسی در اکثر برنامههای کاربردی در زمینه شبیه سازی و بازیهای
مهمی را ایفا مینمایند. برای ایجاد یک عدد تصادفی صحیح بین ۰ و ۳۲۷۶۷
بایستی از تابع لج) استفاده نمائیم.
rand
صفحه 187:
( )و بر
{
)4+ ;00=< :20 م۳
:م >> ( )لحم >> قحم
© بر
}
صفحه 188:
تعریف نوع داده (ppedeP)
از #طحبومیتوان برای تعریسف نوع دادههای جدیسد کسه معادل نوع
دادههای موجود باشد استفاده تمود. شکل کلی عبارتست از :
نشان دهنده نوع داده موجود
صفحه 189:
حال میتوان مرو درا بصورت زیر تعریف نمود :
صفحه 190:
دادههای از نوع شمارشی
بمنظور معرفی دادههای از نوع شمارشی از کلمه مجح استفاده میگردد.
مثلل
3
/ ۶ fa!
02 ی کننوع دادم ش مشیم اشد
penne skis {worted, devorced, uidow, stnde};
stokes a}
oF stergle |
صفحه 191:
بایستی در نظر داشت كه داددهاى از نوع شمارشى در
عمليات ورودى و خروجى شركت نمى نمايئد. بعبارت ديكر
مقادير دادههاى از نوع شمارشى بايستى در برنامه تعيين
نمود. دستورالعمل های ورودی و خروجی مانند 19 و
8 در مورد دادههای شمارشی نمیتوان استفاده نمود.
صفحه 192:
صفحه 193:
فهرست مطالب فصل پنجم
ot آرایه یک بعدی
۲ _ آرایه دو بعدی (ماتریسها)
صفحه 194:
آرایه یک بعدی
آرایه یک فضای پیوسته از حافظه اصلی کامپیوتر میباشد که میتواند
,چندین مقدا را در خود جای دهد
عناصر آرایه بوسیله اندیس آن ها مشخص میشوند.
کلیه عناصر یک آرابه از یک نوع میباشند.
در 6++. اندیس آرایه از صفر شروع میشود.
صفحه 195:
صفحه 196:
آرایه یک بعدی از نوع الا
اولين عنصر 101
صفحه 197:
تخصیص مقادیر اولیه به عناصر آرایه :
14 OKs (@, ©, 8, 07, 00);
صفحه 198:
دریافت مقادیر عناصر آرایه :
ae =P; +H)
FO; <P;
we via >> Lt];
زه زوم نمع ممم
oo >>
صفحه 199:
tt x9] = (00, 9, 7};
صفحه 200:
ه داشت كه أرايهها به صورت ضمنى مقدار اوليه صفر نمى كيرند. برنامه نويس بايد به ار
ار اولیه صفر تخصیص دهد تا عضوهای باقی ما 1 ۳
tt xf] = {0};
صفحه 201:
,6.6 ,0.6 ,000 ,6.6 ,6.6 سا سرا
;}48.8
9
9
صفحه 202:
گرفنه تشکیل یک آرایه مي دهد سپس بحه
نموده نمایش میدهد.
( )سم بر
{
vot Kt areas = IO ;
Pout x{ wrote], 1 = 0.0 ;
taretze; H+) ;0 مس
۱ << و
Por{FO; iSarstze; t+)
ete afi]
:اط >> قحم
مس ©
}
صفحه 203:
صفحه 204:
زج >> [ ]>> مه
:0 سم
1
صفحه 205:
آرایههای دوبعدی (ماتریسها)
ماتریس ها پوسیله آرایههای دوپعدی در کامپیوترنمایش داده می شوند.
int a[3][4];
ستون ۲ ستون ۲ ستون ۱ ستون ٠
1 | [0[]0]ه [0[]1] SOLO}
ات ات AAO} lata
اتات ات ات ۰ الاب ۰ ACO]
صفحه 206:
تخصیص مقادیر اولیه به عناصر آرایه :
;})0,00,00,00( ,}0,7,0,©( وت تا
صفحه 207:
OIF] { {@, {0,9}, {F,9,9}}; م
صفحه 208:
AOIP]= )0, ©, ©, ©,.6 (: م
صفحه 209:
در یک آزاب موتديسي. هر سطر. در حقيقت آرايفاى يك اتديسى ات در
أعلان gl دیس در تاد ستون ات
(©,©,1,6,6)-[©][ ]ه م
صفحه 210:
را كرفته مجموع عناصر آن را مشخص نموده و نمايش مى دهد.
heck <wetrrcask>
ایک ی
total)
f
Poa xfO][P], wrt= 0.0;
۳ «۹
|| مشج صفحدج >
Por{=O; <9; +)
Por (FO; 1c; ++)
مم << 11:
| اه ۵۳ مه سا طلطله
Por{=O; <9; +H)
Por (FO; 6
ord + =x [1101]
pent << “pid = "<< thd << pod
مور © :
1
صفحه 211:
تا
همراه شماره سطر آن جاپ نماید.
صفحه 212:
ا...ضدحال
1 برنامه ای بنویسید که دو ماتریس را از ورودی خوانده و
حاصلضرب آن را محاسبه و چاپ نماید.
* توجه کنید که دو ما زمانی قابل ضرب هستند که تعداد ستون های
باتریبی اول با مداد سظرهای ماتریین ,جوم جرائر باقندد بيس آنعاد
ماتریس را می توانید تحت عنوان سه عدد از کاربر بپرسید. بصورت
JSS زیر:
[“-]mxn X [“-Inxp = [-Imxp
ابعاد ماتریس را از کاربر بپرسید. یعنی ۲و 0 و 0
صفحه 213:
صفحه 214:
تابع باز گشت
توابع درون خطی
انتقال پارامترها از طریق ارجاع
(sirene cheer ) aliil> clo wt
سربارگذاری توابع
صفحه 215:
استفاده از توابع در برنامهها به برنامهنویس این امکان را میدهد که
بتواند برنامههای خود را به صورت قطعه قطعه برنامه بنویسد. تا کنون
کلیه برنامههائی که نوشتهایم فقط از تابع هسب( ) استفاده نمودهايم.
صفحه 216:
شکل کلی توابع بصورت زیر میباشند :
نوع مقدار برگشتی
لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار كننده به تابع فراخوانده شده
return-value-type function-name (paérameter-
list)
1
declaration and statements
تعریف اعلانهای تابع و دستورالعمل های اجرائی
صفحه 217:
نوع مقدار برگشتی
پارامتری از نوع هط
نام تابع
oe
oka buy (chor ofl)
1
© ساد
كد حرفكرجكد كد حرنفيزركه ©©// :26 :(©6 -7)60( + ' ->لم 88 ' (A= a =
يا
P (Al>= a’ && <= "2')
6-0-6:
:0د هم عم
صفحه 218:
ee en esp ree ree een ey
troche Sorte h>
har bur_to_sp(okar ol)
{
chor 0;
;08 0ه “- سد ” © )7( د" > دق "5 * ع< الماع وهم
صفحه 219:
(مزام مدای با
{
mz;
ركد دام UP (> =y) 2x; رن 9( ع< معد
retwra Zz;
}
صفحه 220:
theoknle <petrecwh>
وس سس
{
wz}
Fer WP > عر
b ,3 آرگومانهایتلبع مس
صفحه 221:
صفحه 222:
صفحه 223:
وقتی در تابعی, تابع دیگر احضار میگردد
بايستي تعريف تابع احضار قبل از تعریف
.تابع احضار کننده در برنامه ظاهر كردد
صفحه 224:
اگر بخواهیم در برنامهها ابتدا main gil
ظاهر گردد بایستی 10۳0801106 تلبع یعنی
ش نمونة تلبع كه شامل نام تلبع. نوع مقدار
بركشتى aol تعداد يارامترهائى را كه تابع
انتظار دریافست آنرا دارد و انواع پارامترها و
ترتیب قرارگرفتن این بارامترها را به اطلاع
کامپایلربرساند
در اسلاید بعد مثالی در این زمینه آورده شده است.
صفحه 225:
ایک یا
0
bog tat Poctortal(tai); // Pocctoa prototype
pect
ito;
pal << "@uler u postive لت >> مس
به << وم
صفحه 226:
در صورتی که تلبع مقداری بر نگردلند نوع مقدار برگشتی
تابع را ۷۵301 اعلان میکنيم. و در صورتیکه تس
مقدارى را دريافت نكند بجاى slparameter- list
01 یا () استفاده می گردد.
در اسلاید بعد مثالی در این زمینه آورده شده است.
صفحه 227:
{rtm vi
زو << بر << ميم
(م) وو
07 سم
}
(براك بای ایس
لسسع ال 1
تابع مقداری بر نمی گرداند.
nz
(0p) Px iv)
pant << “wax udu \a" << 2<< odd
rena;
}
صفحه 228:
احضار بوسیله مقدار ( 04 6 00)
»در و
خروجی برقامه :
20
40
20
حا ممه freckle
rt ood And);
weed) Se لسعم
:00و
pad; << >> تجو
(3) 5
wo <<a << pad;
rena ;
}
)3 خلت بر
تج الو وو از
pot <<a << ead
rena O;
}
صفحه 229:
در اين نوع احضار تابع حافظههای مورد
استفاده آرگومان ها و پارامترها
از هم متمایزند و هرگونه تغییر در پارامترها
ener
در آرگومان های متناظر نمیگردد.
صفحه 230:
تابع بازگشتی (عصسی< (recursive
توابع بازگشتی یا 166111516 توابعی هستند که
وقتی احضار شوند باعث میشوند که خود را احضار نمایند.
صفحه 231:
نحوه محاسبه فاکتوریل از طریق تابع بازگشتی
۰ .۳6۳ عم
Fig) =a!
{ eV HO Si
۲۵۶ میم تیصیلریغرب
ج)* زهم"* ... *و*ق *0 دام
0
«* ا(مج)دام
در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است.
صفحه 232:
تابع بازكشتى محاسبه فاكتوريل
Hrohke <pstreu.k>
ما Paactortea{ ted) 5
tet ata )
{
feu;
عم ” >> نود >:
مب <<
wot << pad <<” Poster = ” >> كك زو
rena ;
}
سس
P(o<=d)
renro();
renero(s "Postrel )
صفحه 233:
نحوه محاسبه « امین مقدار دنباله فیبوناچی از طریق تابع بازگشتی
متیله فیوناچی ... ,00,90 ,0۵ ,9,9 ,9 ,۵4,69
hole Po(s) =
رهد )ص رجام
در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است.
صفحه 234:
20
<bvirroh> 0ك
Ibert Poo tt); Porward deckarctira
pn
toon mtr;
م
]لحم >> > ضاي سبحم من س9 > >> نحو
vt >> a;
Pe(s) ; =
زج >> >> فصو
era |
}
ber tot Plo(loory it)
(P (G==O) rena;
اه
سر
renrefPib(odl) + P(e) )
صفحه 235:
يك شط ست انیس را ترتت آر را زارزت
# include <iostream>
# include <conio.h>
using namespace std;
void reverse(void) ; // forward declaration
int main( )
{
reverse( ) ;
getch();
return @ ;
1
void reverse(void) // read a line of characters and reverse it
{
char ¢ ;
if( (c=cin.get()) "\n')
reverse( );
cout << زع
return ;
1
صفحه 236:
نتقال پارامترها از طريق ارجاع
تاکنون وقتی تایعی را احضار م ىكرديم يك كبى از مقادير آركومان ها دريارامترهاى متناظر
قرار میگرفت . این روش احضار بوسيله مقدار با ۷۵106 11 0811 نامیده شد.
در انتقال پارامترها از طریق ارجاع در حقیقت حافظه مربوط به آرگومان ها و پارامترهای متناظر
بصورت اشتراکی مورد استفاده قرار میگیرد. این روش call by reference
تامیده میشود.
صفحه 237:
نتقال پارامترها از طريق ارجاع
روش بارامترهائى كه از طريق 766929006 نط 6311 عمل مىتمايئد در
.قبل از نام جنين يارامترهائى از 84 استفاده مى شود.واضح است
که در تعریف تابع نيز بهمين طريق عمل مىشود.
صفحه 238:
<bereww.h> سنا
tet VP rile);
ord vPro (tet &) 5
eS)
و
اج >> ب BM SS x SC werd <6 cf) Cel SS
صفحه 239:
وقتی پارامتری بصورت لاط call
0006 اعلان میگردد اين بدان معنى
است کهبا تغییر مقدار لين پارامتر در تلبع احضار
شده مقدار آرگومان متناظر نیز تغییر مینماید.
صفحه 240:
Poa 6.6 :6سا
Det <<a << pad <b;
Powap( a,b);
زط >> اقحس >> ه >> فجن
: © مور
صفحه 241:
توابع درون خطی (صطح)
کلمه 11011106 بدین معنی است که به کامپایلر دستور میدهد که
یک کپی از دستورالعمل های تابع در همان جا (در زمان مقتضی)
تولید نماید تا از احضار تابع ممانعت بعمل آورد.
صفحه 242:
بجای داشتن تنها یک کپی از تابع . چند کپی از دستورالعمل های تابع در
برنامه اضافه میشود که باعث بزرگ شدن اندازه با طول برنامه میشود.
بنابراین از 11011196 برای توابع کوچک استفاده میگردد.
صفحه 243:
مثالی از توابع درون خطی
frookde 9 <pstreawh>
Plot ube (covet Boot ») frotirc oe} } لم
‘ef wrote )
{
Pot side 5
tr >> wider 5
DIM << pike << ribe(okke) << pwd ;
سم 0 :
1
صفحه 244:
(Horne cheese) abd کلاسهای
متغیرها بدو طریق متمایز مشخص میشوند یکی بوسیله نوع (عجبه) آن ها و دیگری بوسیله
کلاس حافظه آن ها. نوع متغیر قبلاً اشاره شده بعنوان مثال عفط. ۰۳۳۵ ۰۰.۰۳۸ ولی
کلاس حافظة یک متغیر در مورد طول عمر و وسعت و دامنة متغیر بحث مینماید.
در اسلاید بعد به انواع كلاس حاقظه می پردازیم.
صفحه 245:
: بطور كلى كلاس حافظه متغيرها به جهار دستة تقسیم میگردد
automatic
static
external
register
صفحه 246:
automatic
متفیرهای عفد در درون یک تابع تعريف مى شوند و در تاعی که آعلان میشود بصورت متفیرهای
محلى براى آن تابع مى باشند. حافظه تخصيص داده شده به متغيرهاى سحده» يس از اتعاماجرایتابع
أز يبن مى رود بعبارت ديكر وسعت و دامنة متغيرهاى از نوع صفح تابعی میباشد كه متغير در آن
اعلان گردیده است.
صفحه 247:
static
متغیرهای 2۵ نیز در درون توابع تعریف می شوند و از نظر وسعت و دامنه شبیه
متغیرهای عصحمطه هستند ولی در خاتمة اجرای تابع. حافظه وابسته به اين نوع
متغیره از بین نمیرود بلکه برای فراخوانی بعدی تابع باقی میماند.
و به دودسته تقسیم می شوند
امهم ساى انتحاتیک ععلی
۲- متفیر های استاتیک عمومی
مقدار اولیه متغیرهای استاتیک محلی و عمومی صفر است.
در اسلاید بعد به یک مثال از كاربرد اين نوع كلاس حافظه مى بردازيم.
صفحه 248:
استائیک محلی
*فقط در همان تابعی که تعریف می شوند قابل استفاده اند.
*هنگام فراخوانی تابع ایجاد می شوند و به هنگام خروج تابع . آخرین مقدار
خومشان را عفظ ین كنت
*فقط یک با مقدار اولیه می گيرند.
در اسلايد بعد به يك مثال از كاربرد اين نوع كلاس حافظه مى بردازيم.
صفحه 249:
"See" 2 حبر وح کون
ی One
ve
1
صفحه 250:
|
Hl pron امه اسلا مه تففطلی با
been tt P(e) 5
)سم
1
كم
اك
حدم
pow << rod
Por (et 0; 1<=0; +4)
po <<] <<" "<< Phi) << red}
rea;
+
foo tt P(t oor)
{
rte bey na = 0, OC;
foray att}
: © +70:0 (6> سدم
0 ©
صفحه 251:
external
متغیرهای از نوع اجه متغیرهلئی هستند که در بیرون از تولبع اعلان می شوند و وسعت و
دامنه فعالیت آنها کلیه توابعی میباشد که در زیر دستور اعلان متغير قرار دارد.
در اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
صفحه 252:
یی tke
۱
tot) مد نی(
{
اس >> جع
زو سا
تللم >> بن >> الحم >> قحو
retura xYZoy 5
}
est)
Dat << pad << o << ead << d << pad << wy;
rewraO ;
}
صفحه 253:
register
وقتی متغیری از نوع طبحم اعلان مى شود از كامييوتر عملا درخواست
میشود که به جای حافظه از یکی از رجیسترهای موجود استفاده نماید
صفحه 254:
0 0ك یا اندیس های آرایهها
pe mea re Ieee tees eran Te ee] 1۱
دردستور 139© 0[
register int i;
for(i=1;i<=10;i++)
cout<<“hi”;
صفحه 255:
سربار گذاری توابع (بلماصه مسلسسح)
در 6++ این امکان وجود دارد که دریک برنامه بتوانیم از چند توابع هم نام
استفاده نمائیم مشروط بر این که پارامترهای این توابع متفاوت باشند. (از
نظر تعداد پارامتر و پا نوع پارامترها و ترتیب آنها)
صفحه 256:
زج >> (ا ماه >> همه
:0 سم
}
tet dP (tot x, tot)
{
rena ty |
}
Pout wk (Poa x, tv)
{
renee ty |
}
صفحه 257:
برنامه ای که با استفاده ار تابعی به نام يج 8() »
مربع یک عدد را محاسبه می کند
دقت شود این برنامه باید بتواند مربع یک عدد صحیح و اعشاری را با استفاده
از توابع سرباگذاری محاسبه نمایید.
صفحه 258:
دمرين
برنامه ای بنویسید که ۳ عدد اعشاری را خوانده و به تابعی ارسال کند و تابع
میانگین آن ها را محاسبه کرده و برگرداند.
بزنامه آی که قتزایب منباذله ی بوریجه جومن را خوانبه: آن«ها را بداتابينى
ارسال كند. تابع معادله را حل كند و جواب ها را در خروجى جاب كند. (تابع
جواب هارا يه تابع اصلى ase كزدائد)
برنامه اى بنويسيد كه عددى را از ورودی خوانده و هریک از ارقام آن را د
یک سطر چاپ کند. تفکیک و چاپ ارقام توسط تابع بازگشتی صورت
برنامه ای بنویسید که حاصلضرب دو عدد صحیح را به کمک جمع کردن
نیم برای این کار از تابع بازگشتی استفاده کنید.
اگر 0
bd si
صفحه 259:
# include <iostream>
# include <conio.h>
using namespace std;
float average(float a, float b, float c){return
((atb+c) /3) ;}
void main()
1
float x, y, 2
cin>>x>>y>>z;
cout<<average(x,y,Z);
getch();
1
صفحه 260:
# include <iostream>
# include <conio.h>
# include <math.h> e
using namespace std;
void f(int a, int b, int c){
float delta = (b*b)-(4*a*c);
if(delta == 0)
cout<<"The only answer:n"<<"x= "<<(-b)/(2*a);
else if(delta > 0)
{
cout<<"Two answers:n"<<"xl= "<<(-b+sqrt(delta) )/(2*a) ;
cout<<"x2= "<<(-b-sqrt(delta))/(2*a) ;
+
1
void main() {
float x, y, Z}
cine>x>>y>>z;
FOGy.Z)5
getch();
1
صفحه 261:
9
# include <iostream>
# include <conio.h>
# include <math.h>
using namespace std;
void f(int a)
{if (a>10) f(a/10);
cout<<(a%10)<<endl;
1
void main()
3
int n;
cin>>n;
F(n);
getch();
1
صفحه 262:
# include <iostream>
# include <conio.h>
# include <math.h>
using namespace std;
int f(int a,int b)
{if (b==1) return a;
return (f(a,b-1)+a);
void main()
int n,m;
cin>>n>>m;
cout<<f (n,m);
getch();
1
صفحه 263:
ساختار ها و اشاره گرها
صفحه 264:
فهرست مطالب فصل هفتم
| ساختارها
bOws |
(Porter) oF 0,31
آرایه
آرایه های دو بعدی و اشاره گرها
تخصیص حافظه بصورت پویا ( عملگر دح)
رشته ها و توابع مربوطه
صفحه 265:
ساختارها شبیه آرایهها بوده بدین صورت که یک نوع داده گروهی است که فضای
پیوسته از حافظه اصلی را اشغال مینماید. اما عناصر ساختارالزاما از یک نوع
نمیباشند بلکه اعضای ییک ساختار میتوانند از نوعهای مختلف از قبیل ۰ و
لط. ۳ . ... باشند.
صفحه 266:
نام ساختار
struct til
{
int hour ; // 0 - 23 0
int minute ; // 0 -
اعضا ساختار
59
int second; //
13
صفحه 267:
acc_no
2
pert)
ser yeep Meee Cnt
صفحه 268:
به دو صورت می توان اعلان یک متغیر از نوع ساختار را نمایش داد:
روش اول
:روش دوم
صفحه 269:
به ساختارها میتوان مقدار اولیه نیز تخصیص داد
wood mst = (PESO, "Ouder Daderi” , POSES};
صفحه 270:
دسترسی به عناصر یک ساختار
صفحه 271:
صفحه 272:
: نکته
عضو یک ساختار خود میتواند یک ساختار دیگر باشد. sticaste'y
int month;
int day;
int year;
1۳
struct account {
int acc_no ;
char acc_typer;
char name[80];
float balance ;
date lastpay ;
1۳
اگرداشته باشیم
account x, y;
آنگاه عضو 1256۳257 بوسیله
x.lastpay.day
x.lastpay.month
x.lastpay.year
مشخص میگردد.
صفحه 273:
: نکته
میتوان آرایای تعریف نمود که هر عضو آن یک ساختار باشد و حتی به آنها مقادیر اولیه تخصیص نمود.
صفحه 274:
)سم
اه اسمود.
سيم
:د مر ود[ رط سحام
>> راهطا © سحن" >> فج
طع< حور << ويم
ل م فده
بطي << بير << وو
+ مت ود
طبر + طعد د طد
2b >>" > >> ميد >> لمم >> نوو
:0 سر
1
صفحه 275:
oy از نظر ساختايىشبيه 5831368 ميهاشد. بالمينة فلوتكه
0
ar een OO Te 11111
[۱0 ora
صفحه 276:
هر کدام از متفیرهای و لا يك رشته
۱۰ کرکتری با یک مقدار از نوع int
میباشد وکامپیوترییک بلوک حافظه که
بتواند رشته ۱۰ کرکتری رادر خود جای
دهد . برای60102 و 526 در نو
میگیرد.
صفحه 277:
صفحه 278:
تمرين:
برنامه اى بنويسيم كه يك دفترجه تلفن 7١ تايى (ظرفيت يذيرش ١؟ نام و شماره تلفن را
داشته باشد)و امكان جستجو در آن را بر اساس نام فرد ايجاد نمايد.
صفحه 279:
اشارهگرها (صبه)
مادممافى كه در كامبيونر مرحاففنه أصلى فخيزه ميشوند
بايتهاى متوالى از حافظه بسته به نوع 212 اشغال میکنند.
مقادير
1
۸۷ ۳۱۳۷۲۸۳۶۲۸
یک کارکتر
9 16-6
0 تا هی
صفحه 280:
(Potcters) bs Fo ,L.5!
با داشتن آدرس داده در حافظة اصلی میتوان براحتی به آن داده
دسترسی پیدا نمود و از طرف دیگر آدرس هر داده در حافظه آدرس
بایت شروع آن داده میباشد.
صفحه 281:
نکته
در کامپیوتر آدرسها معمولاً دو بایت اشغال مینمایند. اگر آدرس «را در «م قرار دهیم آنگاه میگوئيم که بجر یه
isla ge alle
آدرس متغیر »«را بوسیله ۶« نشان میدهیم و عملگر 64 را عملگر آدرس مینامند.
صفحه 282:
26
حال اكر دستور العمل 10 -+ 6 زرا بدهیم:
36
حال اكر دستورالعمل 7# + 0* < 01 ز بدهیم.
43
صفحه 283:
آرایه یک بعدی و اشاره گرها
اولین عنصر آرایه بوسیله 24101 مشخص میشود.
آدرس اولین عنصر آرایه بوسیله LOVE بوسیله ع .مشخ میشود.
آدرس ذامين عنصر آرایه بوسیله 3[64] با بوسیله +02 مشخص میشود.
دو دستورالعمل زیر با هم معادلند .
5 2 [ 1 ]۶ :
de + 6 1۸۲.۵۰
از طرف دیگر اگر داشته باشیم
1101 11021
jfloat *p
99 دستورالعمل زیر معادلند.
21 دمر
2+ عوز
و ه ۵ ۵ 5 ۵ ۵ ۵0
صفحه 284:
ساختارها و اشاره گرها
میتوان اشاره گری را تعریف نعود که به اولین بایت یک ساختار (معمهع) اشاره نماید.
صفحه 285:
استفاده از آرایهها بعنوان پارامتر تبع مجاز است.
505
در اسلايد بعد به يك مثال توجه نمایید.
صفحه 286:
ماوت امس ا/ ز( [ ] میلست فد
coos
rt ofS] 5
Por(tat RD; <P; +4)
pat << of |] << ood |
مجم ©
}
void ood (it of [( || مت مس
{
Por(tat =D; 1<S; +4)
[+
سوت رز سل مسا
wont << of j] << rod;
: یمور
}
صفحه 287:
در صورتیکه آرایه بیش از یک بعد داشته باشد
ee
نمونه تابع ذکر گردد.
در اسلايد بعد به يك مثال توجه نمایید.
صفحه 288:
خدسسیه طايه
Ds 12 ملس
دم
1
;)©( ,}0.2 )6/8۳ کم , (ه ,»1,6,6 -زمززم 079 ( (ق,6,©) ,(4,6,6) ) > ]819[ rf بر
)ميم
5 ' >> [1[]1]» >> بحم
pont << pod ;
1
9
8
9
oO
wo?
0
صفحه 289:
آرایههای دوبعدی و اشارهگرها
يقن ازآیه دویسی بمبورت تغدافی آزایه زک بعدی موانوان تغویف مود
آگربدیک ماتریس ۵ سطری و ۴ ستونی از نوع اعشاری باشد قبلاً این ماتریس را با
iPoa ASIP]
معرفی کردیم. حال با استفاده از اشارهگرها بصورت زیر معرفی نمائیم:
صفحه 290:
آرايه يك بمدى اول
آرايه يك بعدى دوم
آرایه يك يعدى سوم
آرايه يك بعدی چهادم
آرایه یک بعدی پنجم
آرایههای دوبعدی و اشارهگرها
صفحه 291:
<ا ممه طعا
سح
rex F100, 29, ©, 49, 400},
نام آرليه نو رإنديس لشليه به عنصر او يليه مريسايدا| يديرم" هط
رمي مر
اقحس ی
اساي حدمت ملا
Pork; 120; r++)
م > کف
سس له |
Por; a 144)
>>[ سم >> نحم
{iw Pork bard
زهج سا
wnt << Monet) اقحس
rena; }
صفحه 292:
تخصیص حافظه به صورت پویا یا (عملگر سح)
تخصیص صورت پو
از عملكر ely ce تخیصیص حافظمبه صورت پویا
dynamic memory allocation
صفحه 293:
۳2 به اولین داده از نوع 3108 اشاره مینماید.
+تاو ب» 1 +ألمیرعنصراز فضای ی یوسته لشایه میماید.
صفحه 294:
بازگرداندن فضای یک آرایة یک بعدی پویا
اكر در برنامة خود با استفاده از عملگر ۲ . مقدار زیادی حافظه از سیستم اخذ كنيد آنگاه تمام فضای امکانپذیر
11008 در اختيار يك برئامه قرار مى كيرد و ممكن است سيستم از کار بیفند (به اصطلاح سیستم RAM) apy
مى كند). براى اطميئان از كاربرد مطمئن عملكر 007 . بايد بين عملكر 09 و عملكر 0101# متناظر با آن هماهنكى لازم
را بهوجود آوريد تا حافظة اخذ شده را به سيستم عامل بركردانيد. بءطور كلى هركاه كه با مقدارى حافظه كه بدطور بويا
از سيستم اخذ كردهايد كارثان به اتمام رسيد, بهتر است آن را بى درنك به سيستم عامل بركردانيد. نحوة بازكردائدن
حافظة تخصيص يافته به يك آراية يكبعدى بويا بدصورت زيرا.
صفحه 295:
را وا( رح
۰
0
)سدم
1
م
;0.0 = ينوم" مح
قجس >> > و سین جح >> مج
<< مم
:[-] حاط سصمحوم
+ يدكر زوع مجم
إل + سوم" << وم 0
ما هيت
0)
Por (=O; زه بكم
wits "pr +);
pant << teh;
U sx order © Prov be ope we
cee] prs
renee O;
}
صفحه 296:
ant << how wary records? ba";
mPa;
Pr = cew revs);
+H){ يم زه موم
% >> رسد >> مس
i) 0= #0.8) << vod ۱۳|
}
[] سيد
)اص
rena;
1
صفحه 297:
حسة ليه
Poss *); ,* مهبم
wed)
Pht ob, "pb, "ph,
دی
اسر
سیر
wurp(papb); liiitouxeab);
toa cea ce vad ob xe ve
rare
صفحه 298:
eRe fe hear Cntr ee ا ل ل
به تابعى ارسال مى كند .تايع تعداد اعداد زوج و قرد را تمايشب دهد.
صفحه 299:
char name[ ]= ”
sara’;
صفحه 300:
نحوه رفتار با رشتدها همانند رفتار با آرايدها مى باشد ولی یک تفاوت اساسی در نتهای رشتها میباشد که
یک علامت نشاندهنده انتهاى رشتهها میباشد ولی در آرایهها هیچ علامتی انتهای آریهها را مشخص نمی کرد.
علامت ۱0 انتهای رشتهها مشخص میکند. مثلا در دستور
و اكر رشته را با "00000007 مشخص نماييم به صورت زير در حافظه جا مىكيرد.
24 5121 [5]0
له |
]9[ 1 لا [5]3 [5]1
صفحه 301:
مقداردهی اولیه به رشته
:1 -[ ]5۱ مه
char $2[10]= “is”:
char S3[ ]={'N',‘e’",'w’,’ ','L,i','v’,‘e',\0'};
اكر همانند دو دستور بالا عمل كنيم خود كامبايلر اتوماتيك در آخر رشته '10' قرار میدهد ولی در حالت سوم بايد
حتماً خودمان به رشته ۱0" را بدهيم.
نکته قابل توجه این است که رشتهها هميشه یک کارکتر بیشتر بخاطر ۱0" فضا میگيرند.
صفحه 302:
خواندن و نوشتن رشته:
برای خواندن رشتهها از ورودی طبق رویه زیر عمل مینماييم.
char str [51];
cin >> str;
cout <<"string is "<< str;
در اين مثال يك رشته با طول 5 فرض كرديم (يك كاركتر بخاطر '10' در نظر تكرفتيم) و وسیله )3 ورودی
خوانديم وبا تايع )00 در خروجى جاب تموديم.
كاربر اكر كليد 177/67 را در مثال فشار دهد رشته 5/7 مقدار م ى كيرد يا اكر 5/0268 يا 438 را فشار دهد دوباره
مقدار میگیرد.
صفحه 303:
استفاده از متد 851 :
تابع #261 را مىتوان به شکل زیر بکار برد.
(['جداكننده '] و طول رشته و نام رشته) cin. get
و مىتواند نباشد. اين قسمت يك كاركتر را به عنوان انتهاى رشته مشخص
طول رشته:
حداکثر مکانی را مشخص میکند که رشته میتواند بگیرد.
صفحه 304:
char str [30];
cin.get (str ,10);
cin.get(str 10,
در دستور دوم حداکثر میتوانیم با طول ۱۰ به 5/7 از ورودی مقدار دهیم و دستور سوم بجای 1711/07 که آخر رشته
باشد با " . " مشخص میشود.
صفحه 305:
تفاوت ( )۵64 و 60
همانگونه که گفته شد انتهای ورودی دستور CIN را یا 1711/67 مشخص میکند یا 5۸06 ولی در «
میتوانیم فاصله و 14 را نيز به رشته بدهيم. مثلاً
char ٩ ]01[:
cin.get (S.50);
cin >> S:
اگر کاربر رشته "13۷2 701 IT is را به برنامه بدهد تابع () 864 همه را در ') جا مىدهد IT bid cin Jy 1
در 5 قرار میدهد.
صفحه 306:
رشته و اشاره گر
هر رشته از طریق اشارهگری به اولين کرکتر آن در دسترس قرار میگیرد. آدرس یک رشته. آدرس کرکتر
اول آن میباشد. به رشتهها میتوان مقداراولیه تخصیص داد.
char *name =” sara’;
صفحه 307:
انتساب رشتهها.
دو رشته را به صورت مستقیم نمیتوانیم در داخل یکدیگر بريزيم.
دستور (51,52) ۹/70۳ مقدار 52 را در داخل 51 کپی مینماید.
char Si[ ]="computer";
char $2[20];
strepy (S2, S11);
صفحه 308:
مقایسه رشتهها
برای مقایسه رشته نمیتوانیم به اين صورت عمل نماييم. if (S1==S2)
چون 52,51 اشارهگر به رشته میباشند ولبی دستوری بنام
(5۱,52) 5/۳0/772 وجود دارد که دو رشته 52,51 را مقایسه مینماید.
و5
stremp(S,,5>)
صفحه 309:
و5
(و۹,٩) رسد
عدد برگردانده شده از تابع 'زتز5]76 طبق جدول بالا مىباشد. منظور از اینکه دو رشته از هم کوچکتر باشد
يا بزركتر به اين صورت میباشد که سمت چپترین کارکتر را با کد اسکی مقایسه میکند اگر بزرگتر بود که آن
رشته از رشته دوم بزرگتر میباشد. اگر کوچکتر بوده آن رشته کوچکتر میباشد و اگر مساوی بود کارکتر بصدی را
تگاه میکند.
صفحه 310:
برای الحاق دو رشته از تام (51,52) 50701 استفاده مینمايم. اين تایع 52 را بهانتهای 51 وصل
مینماید.
صفحه 311:
رشتههای 51 و 52 رابا هم مقایسه نموده (بدون توجهبه حروف کوچک و بزرگ) اگر
رشته 51 برابربا رشته 92 باشد مقدار صفر و اگر رشته 51 کوچکتر از رشته 82 باشد
یک مقدار منفی در غیر اینصورت یک مقدار مثبت بر میگرداند.
char *sl= "ALI"; // char s1[10] =
"ALI";
char *s2="ali"; //char s2[10]="ali";
cout << strcmpi(sl, s2) << endl;
0
صفحه 312:
رشتههای 91 و 582 رابا هم مقایسه نموده اگر 51 برابربا 52 باشد مقدار صفر و اگر
رشته 51 کوچکتر از رشته 92 باشد یک مقدار منفی در غير اینصورت یک مقدار
Cote برمیگرداند.
char *512 ۶
0۱2۲ 221
char s1[10]= "ALI"
char s2[10]="ali";
cout << strcmp(s1, s2) << endl;
صفحه 313:
تابع ) ه,©2 ,0ك) محمد
حداکثر « کرکتر از رشتة 51 رابجا « کرکتر از رشتة 92 مقايسه نموده در صورتيكه
1 کوچکتر از 22 باشه یک مقدار منفی اگر 81 مساوی با 22 باشد مغذار صفر در
غير اينصورت يك مقدار مثبت برمیگرداند.
*sl= "211 2":
*s2="ali"
s1[10 11 ۶
s2[(10]="ali";
<< strncmp(sl, s2,3) <<
*sl= “ali reza";
ali";
s1[10J= “ali reza";
s2[10]="ali";
<< strncmp(sl, s2,4) <<
char
char
char
char
cout
endl;
char
char
char
char
cout
endl;
صفحه 314:
دو رشتد 51و 52 را بعنوان آرگومان گرفته رشتة 52 رابه انتهای رشتذ 91 اضافه
مىنمايد. كركتر اول رشتة 52 روی کرکتر پالتی "۱0" رشتة 51 نوشته میشود ونهایتً
رشتة 91 را برمیگرداند.
char s1[20]= "ali "; و انك
char *s2="reza";
char s2[20]="reza";
cout << strcat(sl, s2) << endl;
صفحه 315:
دو رشته 51و 52 ومقدار صحیح و مثبت 9 را بعنوان آرگومان گرفته, حداکشر «
کرکتر از رشتة 52 را در نتهای رشتة 51 کبی مینماید.اولین کرکتر رشته 52 روی
كركتر يايانى “710 رشتة 91 مىنويسد ونهايتاً مقدار رشتة 51 را برمیگرداند.
char s1[20]= “ali ۶
char *s2="reza";
char s2[20]="reza";
cout << strncat(sl, s2,2) <<
endl;
صفحه 316:
رشتة ورا بعنوان آرگومان گرفته طول رشته را مشخص مینماید
"ناه" ع1و* ود
char s1[10]= “ali";
cout << strlen(s1);
char *sl= “ali ";
char s1[10]= “ali ";
cout >> strlen(sl);
صفحه 317:
دو رشتة 51 و 52 را بعنوان آرگومان گرفته رشتة 52 را در رشتة 51 کپی مینماید و
نهایتاًمقدار رشتة 51 را بر میگرداند.
char St 28 1- al. 9 reza
char
char
cout << strcpy(sl, s2) << endl;
s1[20];
*s2=“ali";
s2[10]=“ali";
<< strcpy(sl, s2) << endl;
صفحه 318:
5 و مقدار صحیح و مثبت «را بعنوان آرگومان گرفته, حداکثر «
592 در رشتة 51 کپی نموده. نهايتاً مقدار رشتة 51 را برمیگرداند
char s1[20]= “ali ";
char *s2="reza";
char s2[10]="reza";
cout << strncpy(sl, s2,3) <<
endl;
char s1[20];
char *s2=“amir ali";
char s2[10]=“amir ali";
cout << strncpy(sl, s2,4) <<
endl;
کتصع
صفحه 319:
برای استفاده از توابع مربوط به
رشتهها بایستی حتماً در ابتدا برنامه
<include <string.h+ ,|
قرار دهیم.
صفحه 320:
{// interchange the two strings
strepy(t,name[i]) ;
strepy(name[i] , name(j]);
strcpy(name[j] , t) ;
1
“babak", "saman", "naser" };
ea Milage
using namespace std;
#includeciostream>
#include<conio.h>
#include<string.h>
void sort(char name[{][10])
{char t[10];
for(int i=0; i<4; ++i)
for(int j=itl; j<5; (زج+
if(strempi(name[i}, name[j])> 0)
}
void main()
1
char name[5][10] = {"sara", “afsaneh",
sort (name) ;
// display sorted strings
for(int i=0; i<5; ++i)
cout << name[i] << endl;
getch();
1
صفحه 321:
using namespace std;
#include<iostream>
#include<conio.h>
#includecstring.h>
int main( )
1
char s1[20]= "happy birthday";
char s2[20]= "happy holidays:
cout <« stromp(si, s2) << endl;
cout << strnemp(si, s2, 7) << endl ;
getch();
+
صفحه 322:
using namespace std;
#include<iostream>
#include<conio.h>
#include<string.h>
int main( )
{
char s[10] = "sara";
cout << strlen(s);
getch();
}
صفحه 323:
int nikstrcemp(char s[] , char t[] )
{
int i=0;
while (s[i] ]11 ۱
if ( s[i++]='\o' )
return 0;
return (s[i]-t[i]);
1
صفحه 324:
زرررتت لا تابر سرد رت(
تا
* توضیح: در این برنامه از تابعی به نام ۷۳۳۳۲() استفاده کنید که در
این تابع باید عملیات تبدیل را انجام دهد
* نکته : تفاوت کد اسکی حروف کوچک و بزرگ ۳۲ واحد است برای
تبديل “5” به “608 کافی است از کت" به اندازه ۳۲ واحد کم کنید.
صفحه 325:
By IIe
sb ib aes : تدارا
و
صفحه 326:
5 1 هنت
برنامه نویس شی گرا
صفحه 327:
فهرست مطالب فصل هشتم
تعریف شی گرایی ۲ عضوهای بو
چند ریختی (مصامسساس . کلاسهای تودرتو
خاصیت ارث بری . کلاس های محلی
پشته مسج استفاده از باه ها بعنوان
ایجاد شی پارامترهای تابع
ارث بری ۶ برگشت اشیاء
سازنده ها و نابود کننده ها ۷ انتساب اشیاء
توابع دوست ۸ آرایه اشیاء
كلاس هاى دوست ٩ اشاره گر به اشیاء
توابع سازنده پارامتر دار ۰ اشاره گر عل
توابع سازنده یک پارامتری ۱ توابع مجازی و پلی مرفیسم
صفحه 328:
wT
برنامه نویسی شی گرا یا 0010 یک روش جدید برنامه
تویسی میباشد که در آن از ویژگی
ساختيافته همراه با چند ویژگیهای قوی جدید استفاده
میشود. زیان برنامه نویسی 67++ امکان استفاده از 00
را به راحتی فراهم مینماید.
صفحه 329:
نوع داده انتزاعی
*برنامه ها برای حل مسائل دنیای واقعی نوشته می شوند . مثل نگهداری
اطلاعات مربوط به دانشجویان . نگهداری اطلاعات مشتریان بانک ها .
*گر چه می توان بسیاری از مسئله های دنیای واقعی را با استفاده از انواع
اولیه حل کرد . اما با تعریف انواع جدیدی که بتوان اشیای دنیای واقعی . مثل
دانشجویان را مدلسازی کنند . حل مسائل راحتر خواهد Og
*در زبان برنامه نویسی شی گرا امکان تعریف انواع جدید وجود دارد
*در زبان برنامه نوبسی /6++ برای تعریف نوع جدید . از کلاس ها استفاده
اف
>
می شود
صفحه 330:
کلاس ها و اشیا
*کلاس ها نوع جدیدی است که برنامه نویس آن را برای حل مسئله های
دنیای واقعی تعریف می کند .
*کلاس ها حاوی داده ها و تعریف عملیات است
*داده های عضو کلاس را فیلد یا صفت می گویند.
*عملیات کلاس ها را تابع يا متد می نامند.
*شی یک نمونه از کلاس است که در تکنیک برنامه نویسی شی گرا یک نهاد
زمان اجرا می باشد. ۳
>
صفحه 331:
تمام زبانهاى برنامه نويسى شیگرا دارای سه
خصوصيت مشترك زير مى باشند
الف: 12©2051312:13023© (محصورسازى)
(5%) polymorphism :—
(s»©;) imheritance:c
صفحه 332:
محصورسازی (ق له )
محصور سازی يا بسته بندی به معنای این است که تمام جنبه های یک نهاد در داغل یک کلاس جمع
آوری و از سایر نهاد ها تفکیک می شود .بسته بندی . مانع از اين مى شود که داده ها یک شی.
توسط متد های شی دیگری دستیابی شود.
صفحه 333:
جند ريختى به معناى اين است كه نهادى مثل انع شن سای
يا كاربردهاى مختلفى داشته باشند .به عنوان مثال توايع همنام نوعی
جند ريختى محسوب مى شوند.
صفحه 334:
ارث بری فرآیندی است که بوسیله آن یک شی (010[661) میتواند
خاصیتهای شی دیگری را دارا شود.
صفحه 335:
تعریف کلاس و اشیادر ++
نامكلاس Class
{
داده ها توابع اختصاصی
Public :
داده ها و عمومی
Private :
داده ها و توابع اختصاصی
Protected:
داده ها و توابع oni
يلشليواز كلاس[
صفحه 336:
مثال
class employee
ل
char name[20];
public:
void putname(char *s);
void getname(char * 8);
private:
double age;
jemi, em2;
void employee ::putname()
void employee :: getname()
صفحه 337:
دستیابی به اعضای یک کلاس
dal) 9 80 مرک ای OREN ی وت
برای دستیابی به اعضای یک کلاس از نت
eon Cad
امکان پذیر نیست
9 منم ان
امکان پذیر نیست .000
صفحه 338:
برنامه ای که طول و عرض مستطیلی را از ورودی خوانده , مساحت و محیط آن را به
ی ۳
‘
tnt des, dens
papiie:
votd anpat():
vold calc!
int prane,
0
void rect ::caic)
1
len * width;
primes 2 * (len + wadtn)+
1
۱
1
courcc"Enter Len
cans>1en >>wiern:
1
Ant meia()
Feinpac a);
Freaic():
1۱ "Ce Evareac<",Pezime ~ "eee prime;
geten(
retera
صفحه 339:
۳
ونمایش میدهد.
صفحه 340:
صفحه 341:
ايجاد شى (object)
بمنظور ایجاد یک شی بایستی از کلسة رزروشده
1255 استفاده نمود. 01855 از نظر ظاهر شبیه
ساختار یا 5031208 میباشد. پشته را بعنوان یک
068 مىتوان در نظر كرفت كه 0818 تن
شامل يك آرلیه ویک 805 و عملیاتی که روی
اين object انجام میشود عبار تست از PUSH,
initialize .pop كردن
در اسلاید بعد مثالى از نحوه ایجاد شی آورده شده است.
از نحوه ایجاد شی آور
صفحه 342:
بدین معنی است که »ماو 0 9110 ۷
5 بوسیله توابعى كه عضو |
060 نباشند غير قابل ۷
Sh tg ae gees
شترتی هستند این یکی از اد
ee 91ج
kf toy;
بدين معنى است كه بوسيله ساير vai),
قطعات برناصسه قابسل دسسترسی ز(۱ 0اه جمد
میباشد"
:( )سم مر
صفحه 343:
فقط تولبع عضو میتوانند به متغیرهای عضو از نوع همهم
دسترسی داشته باشند. بایستی توجه داشت که اگر نوع عضوی
مشخص نكردد آن عضو به صورت اتوماتيك مهم مى باشد.
Private
صفحه 344:
نحوه تعریف تابع عضو یک کلاس
vord )اس : : اناد i)
1( ©6112 - د دوم
عملكر: : مشخص مینملید که تبع متعلقبه کدام 010[661 میباشد. عملگر : : عملگر
resolution 560۳۵6 نامیده میشود.
صفحه 345:
مج
اه ‘peck wf, 9; || rete te
wok سای
rare)
صفحه 346:
(powers und desiruriors) lao rg: 9 سازتددها
Initializatio — با مقر ایلیه دادن صویطتوملنیکاز طریخ لبعینجام
مشود بام تابع 00۳5]۳06010 با تابع سازندم تابعسازنده تابع
مخصوصوسنکه عضوواز کاس سوده و همام با کاهیمياشد.
صفحه 347:
(powers und desiruriors) lao rg: 9 سازتددها
Joc Se. destructor bois opt alt تلبع سازنده را انجام
ee ای اد sie ۰
آن فراخوانی میگردد.
صفحه 348:
سازندهها (عسسسسه)
class myclass
1
int a,b;
public:
myclass():
void show();
de
myclass ::myclass()
1
0 sb=0;
)
void myclass::show()
{
cout<<"a= " <<az
cout<<"b= "<<bz
1
myclass obi;
ob1.show()
صفحه 349:
سازندهها با پارامتر ( وص حوصهم)
class myclass
1
int a,b;
public:
myclass(int i, int 3):
void show():
1۶
myclass ::myclass(int i, int 3)
void myclass::show()
1
cout<<"a= " <<a;
cout<<"b= "<<b;
1
myclass 6۲1 )20,15( ۶
myclass ob2=myclass (20,30);
ob1.show();
abd. show () +
صفحه 350:
مثال از سازنده با یک پارامتر
#include <iostream.h>
#include <conio.h>
class store
{
int a;
public:
store(int 3) {a=3;}
int getA(){return a:}
1
int main()
{
store ob= 99;
cout<<"j = "<<ob.getA():
getch()
return 0;
صفحه 351:
توابع دوست کلاس
همانطو رکه گفته شد تابعی که عضو کلاس نباشد . نمی تواند به اعضای
اختصاصی آن کلاس دستیابی داشته باشند
برای اعلان تابع دوست باید الگوی آن را در داخل کلاس قرار دهید و
Priccd css vals را قبل از آن ذکر کنید.
صفحه 352:
برنامه ای که با استفاده از تابع دوست دوعدد را با هم جمع و تفریق می کند
#include <icstrean.a>
#include <conio.n>
class AClass {
private:
tat a,b;
public:
void teet() (a=107b=207)
JJ Declare the tvo functions friends
friend int add (AClass input):
friend int minus (AClass input);
ie
// Fonction one
int add(AClass input) {return int (input.a + input.b);}
// Fonction tvo
Ant minus(ACiass input) {return int (inpac.b ~ input.a);}
void main (void) {
AClase ourputy
77 Initialize output
output. test )(
cout << add(cutpus) << endl;
cout << minus(output) << enc
geten(} +
}
صفحه 353:
مثال: تابع دوست دو كلاس
Finciuge <Loscream
ا
class 3;
class A
1
private
int ay
public:
Alfa > 1907)
friend void add (A,B):
iP
class 3
private
int b:
public:
BI){ = 1907)
Friend void add (A,8)+
1
vold ada(A Acb}, B S0b})
1
cout << (Aobj.a + Bol
0
void main()
1
AAG:
B 2:
add (A1,B1)+
gecen():
صفحه 354:
هه مج هومن> تون
#include <conic.n>
مثال: كلاس هاى دوست cues crabs
كلاس هاى را مى توان دوست كلاس هاى ie a
ی
دیگر معرفی کرد دراين حالت» كلا evovaluee int i, int s)lacisbejz}
دوست و تمام توابع عضو آن به اعضای Friend class min;
١ 2 ۳
اختصاصی کلاس دیگر دسترسی دارند class min
1
public:
برنامه ای که با استفاده از کلاس دوست . بین int findmin (twovalues x);
1
int mins: findnin evovalues x) دو عدد کوچکترین را پیدا می کند.
{
return xacn.b2a ant)
1
int main()
{
tvovalues 0b (10,20);
coutcctmin cf 10 , 2048:"cem.findmin (0b)
getch ();
return 9:
صفحه 355:
اعضای کلاس با ویژگی هد
در بعضی از مواقع . فقط يك كبى از يك متغير بايد بين تمام اشياى
يك كلاس مشترك باشد . كلمه كليدى 5597 براى اين منظور به
كار مى رود.
وقتى كلمه كليدى 287 را با اعضاى داده اى كلاس به كار مى بريم »
به كاميايلر مى كوييم كه فقط يك كبى از آن متغير وجود خواهد
داشت و تمام اشياى آن كلاس ء آن متغير را به اشتراك مى كذارند.
صفحه 356:
تمد هب8
کت هی نی
0
int bs 3 nafs fle
مثال: اعضاى كلاس با ويزكى جاع الع
لومم وصور یو موه ای
Sold show:
برنامه ای که کاربرد و اثر عضو داده ای
طقهرا نشان مى دهد. bitcenecendl: |
1
int main()
1
shared x,y;
weet (1,1)7
lenow()7
920 (2,2)7
renew ()7
snow )( ۶
getch():
return 0;
صفحه 357:
انتساب اشیاء (م موی سسوم
در اسلاید بعدمثالی آورده شده است.
صفحه 358:
] ی وس <petrrow.h>
# اه >
امن سا
tt
rable:
لح 4 3) (xi)
st ett) frenrart}
eee
wocken obfl, ob;
)128( باه
b= offi; If cas cess Prow ob ob
)ضام (:
اسم >>
rer ©:
}
صفحه 359:
#include <iostream.h>
#include <conio.h>
class display )
int number;
public:
display(int n) {number=n;}
int show() { cout <<number
مثال: آرایه ای از اشیا
1۶
int main() {
display myarray(4] = {1,2,3,4,}7
for (int 4 = 0; i < 4 +بده )
myarray[i].show();
getch();
return 0;
صفحه 360:
اشاره گر به کلاس عصوص!ن) وا و۳)
اشاره گرها همانطور كه مى توانند به متفیرها اشاره کننده می توانند
به اشياء يك كلاس نيز اشاره کنند و چون شی نمونه ای از کلاس
است پس به كلاس اشاره مى كنند .
در حالت ساده براى دسترسى به اعضاى كلاس توسط شی تعریفی؛
از نقطه () استفاده کردیم. اما در اشاره گر به شی باید از ترکیب ۲
کاراکتر خط و بزرگتر (<-) استفاده کنیم. با هم مثالی کامل از
اشاره گر به شی پا همان کلاس را بررسی می کنیم :
صفحه 361:
sinciuae <destream.n>
#include <condo.n>
lacs CRectangle
£
int width, netents
public
void set_values (int, int);
int area (void) {return (uidth + height);)
35
void CRectangle::set_values (int a, int b)
width - a5
height - ره
21
int main()
{
Rectangle a, *b, *c;
CRectangle * d= new CRectangle[2]3
b= new CRectangie;
c= aa;
S.set_velues (2,2);
boxset_values (3)4)3
توعد 0576
۰۲1. ععن1ه )78(2
cout << "a area: "<< a.area() << endl;
cout << "b area: " << b-varea() << endl;
cout <4 “te area: " << carea() << endly
ose 26 “a[Od wren: © <2 )دهد زهات 6 endl;
cout << “d[1] area: " << d{1]-areat) << endl;
deleter] a:
delete b5
return 03
صفحه 362:
امه اى كه نام . شماره دانشحويى و معدل تعداد 18 دانشجو را از ورودى خوانده در آرايه اى
ee ee er eer EO
صفحه 363:
ارث بری فرآیندی است که بوسیله آن یک شی (010[661) میتواند
خاصیتهای شی دیگری را دارا شود.
صفحه 364:
کلاس های پایه و مشتق شده
* چند کلاس ممکن است خصوصیات و رفتارهای مشترکی داشته باشند
اما هریک شامل خواص و تولبع ديكرى هم باشد. وراثت اجازه می دهد
یک کلاس عمومی تعریف شود که اشیا درخصوصیات آن مشترک
هستند و این کلاس می تواند توسط سایر کلاس ها ارث برده شود و
خواص جدیدی به آن اضافه شود بدون اینکه تاثیری روی کلاس عمومی
داشته باشد.
ورائت شباهت بین دو کلاس را با استفاده از مفاهیم كلاس يايه «صط و
کلاس مشتق شده ۳9 بیان می کند. کلاسی که از آن ارث بری
مى شود كلاس يليه يا مبنا و کلاس وارث که خصوصیات کلاس پایه را
به ارث مى برد را كلاس مشتق شده مى نامند. كلاس يليه شامل كليه
خواص و رفتارهائى است كه بين كلاس هاى مشتق شده مشترك است.
صفحه 365:
مثال:
* مثال. كلاس پایه ۳۳۳< را درنظر بگیرید که دارای خاصیت های اندازه.
رنگ و موقعیت است. هر شکل می تولند رسم شود, پاک شود. حرکت
کند و رنگ شود. هر کدام از اشکال دارای خواص و رفتارهای اضافه تری
هستند. برای یک شکل معین بعضی رفتارها ممکن است متفاوت باشد
نکته. یک کلاس متشق شده به نوبه خود می تواند کلاس پایه برای
سایر کلاس ها باشد.
نکته. اگر کلاس پایه تغییر کند کلاس , مشتة, شده نبز تحت تاثب ابو
تغییرات قرار می گیرد.
Circle Triangle
صفحه 366:
تعریف کلاس مشتق شده
* فرم کلی تعریف یک کلاس مشتق شده به صورت زیر است:
و وه : تنل لام
1
:وصمات سوه خام جموجاروون ||
}
رفوك نام كلا رجديد لستكه از كاهريايه ۲ مشتقشدم
۷۷ باشد و برلیتعیینی جوز دسترسی|عضایک اسپایه در
کاشجدید بکار میرود. گر مجوز دسترسیذکر نشود به ليزمعنى
لستکه کلیه لعضایعءمومیک لاپ ایه در کلسمشتقشده به
صورتخصوصیخوهند بود.
صفحه 367:
مثال. كلاس جديد له 0) از كلاس ععه2) مشتق شده است. در برنامه اصلی 200 wheres
از کلاس سجبو0) فراخولنی شده که خود دو تلبع بجع و لصو از کلاس سعه) را صدا می زند.
#include <iostream.h>
#include <conio.h>
class Base
1
tat i:
public:
int read() { return i; }
void set(int ii) { 4 = 447 }
Base() { i=07 }
۶
class Derived : public Base
1
int 3:
public:
Derived() { 3-07 }
void change(int x) { set(x); cout << read(); }
be
int main() {
Derived a:
d.change (10):
getch()7
return 0;
صفحه 368:
include <iostream.n>>
include <i >
// base class
class Shape
1
public:
void setWidth(int w) {width = w;
void setHeight (int h) {height = hs}
protected:
int width;
int height;
1۶
// Derived class
class Rectangle: public Shape
1
public:
int getArea(){return (width * height) +}
1۶
int main()
1
Rectangle Rect;
Rect. sevWideh )5( ۶
Rect.setHeight (7);
// Print the area of the object.
cout << "Total area: " << Rect.getArea() <<
getch():
return
صفحه 369:
پروژه
کلاسی به نام 10002 تعریف کنید که با آن بتوانید دوزبازی انجام دهید
اين كلاس حاوى یک آرایه دوبعدی #۳ ۲ از نوع صحیح
است سازنده کلاس باید عناصر آرایه را برابر صفر قرار دهد. دو
بازیکن ۰ بازی می کنند . بازیکن اول عدد ۱ را در قرار می دهد و
بازیکن دوم عدد ۲ را در مربعی قرار می دهد . حرکت ها باید در
خلنه های خللی انجام شود بپس از هر حرکت کنترل می کنید که
آما کی ببزنده:شده ابجتا جا خی ربزنامه یلید a Gales yeast
مشخص کند که کدام بازیکن باید اول شروع کند.
صفحه 370:
i
:
i
i
|
صفحه 371:
دانشگاه آزاد اسالمی واحد گرگان
گروه مهندسي كامپيوتر و فناوري اطالعات
برنامه نويسي ++C
محمد رضا ملک شاهکویی
mamad.malek@gmail.com
WWW.MrMalek.Ir
سایت و انجمن علمی تخصصی مهندسی شیمی
SUTCHE.COM
منابع:
• برنامه نویسی به زبان ، C ++نویسنده :جعفرنژاد قمی
• کتاب آموزش زبان برنامه نویسی C ++دایتل دایتل
ابزارها و نرم افزارهاي مورد نياز:
نرم افزارهاي آفيس و ويژوال استوديو ,++Borland c 2008
آدرس پست الکترونيکي:
mamad.malek@gmail.com
2
Course Evaluation Scheme
امتحان پايان ترم 14 :نمره
امتحان ميان ترم 5 :نمره
تمرین های کالسی و شرکت در بحث کالس 1 :نمره
3
جايگاه اين درس در رشته مهندسي کامپيوتر و مهندسي IT
• اين درس اولين درس دانشگاهي رشته مي باشد و نقطه شروعي براي ورود به
دنياي جالب برنامه نويسي و علم و فن کامپيوتر هست .بنابراين ياد گيري اصول
اوليه برنامه نويسي در اين درس از جايگاه ويژه اي برخوردار است.
• اين درس پايه و اساس برنامه نويسي است که جزء اصول اين رشته مي باشد و
اين اصول را به فرگيران ياد مي دهد .بنابراين يادگيري دقيق اين درس به
همراه ارائه پروژه هاي عملي که الزمه اين درس مي باشد جزء اهم مسائل مي
باشد .
اهداف درس
•
الگوريتمي براي حل مسئله ارائه دهد.
•
اصول و مباني اوليه نرم افزار و سخت افزار را بشناسد.
•
اهداف و مفاهيم زبانهاي برنامه نويسي را بداند.
•
مفاهيم اوليه برنامه نويسي ساخت يافته را بداند و اصول الزم را در مرحله اجراء بکار ببرد .
•
دستورات زبان ++Cرا در برنامه ها بکار ببرد.
•
از توابع و روال هاي استاندارد زبان ++Cدر صورت لزوم استفاده نمايد.
•
از توابع ،روال ها براي جدا کردن قطعات برنامه استفاده کند.
زبان هاي برنامهنويسي
• نرمافزارها توسط زبان هاي برنامهنويسي نوشته ميشوند .زبان هاي برنامهنويسي،
يك سيستم ارتباطي هستند كه توسط آن ها ميتوان دستورات الزم را به ماشين
انتقال داد.
• هر زبان برنامهنويسي به مجموعهأي از عاليم ،قواعد و دستورالعملها گفته ميشود
كه امكان ارتباط با كامپيوتر را جهت بيان كاري يا حل مسئلهاي فراهم ميكند.
•
•
•
•
•
در حالت كلي زبان هاي برنامهنويسي را به سه دسته زير تقسيمبندي ميكنند:
زبان هاي سطح باال
زبان هاي سطح پايين
زبان هاي سطح مياني
كامپايلر برنامه نوشته در يك زبان سطح باال را به برنامه مقصد تبديل ميكند.
جلسه اول :الگوریتم ها
هدفهاي كلي
شناخت حل مسئله و ارائه الگوريتم
شناخت اجزاء الزم براي حل مسئله
بررسي صحت الگوريتم
هدفهاي رفتاري
دانشجو پس از مطالعه اين فصل بايد بتواند:
الگوريتمي را براي حل مسئله ارائه دهد.
الگوريتم هاي مختلف براي يک مسئله را مقايسه کند.
شرط ها و حلقه ها را در الگوريتم بکار ببرد .
مقدمه
در زندگي روزمره ،انسان با مسائل مختلفي روبروست و براي هر كدام از اين
مسائل (حل مشكالت) راه حلي و روشي را بر ميگزيند .مسائلي از قبيل راه رفتن،
غذا خوردن ،خوابيدن و غيره كه بشر تقريبًا هر روز آنها را پيش روي خود دارد.
همه اين مسائل نياز به روشي براي حل كردن دارند مثال راه رفتن بايد با ترتيب
خاصي و مراحل معيني انجام شود .تا مسئله راه رفتن براي بشر حل شود.
اصطالحًا روش انجام كار يا حل مسئله را الگوريتم آن مسئله مينامند.
تعريف الگوريتم
هر دستورالعملی که مراحل انجام کاری را با زبانی دقیق و با جزئیات کافی
بیان نماید بطوریکه ترتیب مراحل و شرط خاتمه عملیات در آن کامال“
مشخص شده باشد را الگوریتم گویند .به عبارتي ديگر :الگوريتم
مجموعهاي از دستورالعمل ها ،براي حل مسئله ميباشد كه شرايط زير را
بايد دارا باشد:
دقيق باشد
جزئيات كامل حل مسئله را داشته باشد.
پايانپذير باشد.
مراحل الگوريتم
براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم) .كه
اصطالحًا طراحي الگوريتم براي آن مسئله ناميده ميشود .در طراحي الگوريتم
معموًال سه مرحله زير را از هم جدا ميكنند:
خواندن دادهها
انجام محاسبات
خروجيها
مثال :الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع
دو عدد را محاسبه و چاپ نمايد.
خروجيها
مجموع دو عدد
انجام محاسبات
جمع دو عدد
0ـ شروع
1ـ b ,aرا بخوان.
2ـ مجموع b , aرا محاسبه و در sumقرار بده.
3ـ sumرا در خروجي چاپ كن
4ـ پايان
a , b
ورودي ها
مثال :الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين
سه عدد را محاسبه و چاپ كند.
خروجيها
چاپ مجموع
چاپ ميانگين
انجام محاسبات
محاسبه مجموع
محاسبه ميانگين
0ـ شروع
1ـ سه عدد از ورودي بخوان
2ـ مجموع سه عدد را محاسبه و در sumقرار بده.
3ـ sumرا بر سه تقسيم كرده،در aveقرار بده.
4ـ ave , sumرا در خروجي چاپ كن.
5ـ پايان.
ورودي ها
a
b
c
معموال درك يك الگوريتم با شكل راحت تر از نوشتن آن بصورت متن
ميباشد .لذا الگوريتم را با فلوچارت( )flowchartنمايش ميدهند.
ميشود.
فلوچارت از شكلهاي زير تشكيل
عالمتهاي شروع و پايان :كه معموال از يك بيضي استفاده ميكنند:
End
Begin
متوازياالضالع استفاده ميشود:
عالمتهاي ورودي و خروجي :كه معموال از
writeچاپ کردن
خواندن يا
Read
عالمتهاي محاسباتي و جايگزيني :براي نمايش دستورات جايگزيني و
محاسباتي از مستطيل استفاده ميكنند:
جايگزين يا
محاسبات
عالمت شرط:
براي نمايش شرط از لوزي
استفاده ميشود.
عالمت اتصال:
شرط
ميكنند.
براي اتصال شكلهاي مختلف بهم از فلشهاي جهتدار استفاده
فلوچارت مجموع سه عدد
Begin
Read(a,b,c)
Sum
a+b+c
Ave
sum/3
Write(sum,ave)
End
مثال :فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس
.محتويات دو عدد را با هم جابجانمايد
براي حل اين مسئله b , aرا دو متغير كه در آنها دو عدد خوانده شده ،قرار
ميگيرند در نظر ميگيريم .سپس با استفاده از يك متغير كمكي محتويات اين دو
عدد را جابجا ميكنيم :
a
b
a
b
12
15
12
15
temp
12
temp
a
b
a
b
15
15
15
12
12
12
temp
temp
:فلوچارت مسئله باال بصورت زير خواهد بود
Begin
Read(a,b)
temp
a
a
b
b
temp
Write(a,b)
End
تمرين
1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت كرده
محيط و مساحت آنرا محاسبه و چاپ كند.
2ـ فلوچارتي رسم نمائيد كه شعاع دايرهاي را از ورودي دريافت كرده ،محيط و
مساحت آنرا محاسبه و چاپ نمايد.
3ـ فلوچارتي رسم كنيد كه سه عدد Third , second, firstرا از ورودي
دريافت كرده ،محتويات آن ها را جابجا نموده ،حاصل را در خروجي چاپ كند.
4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده ،سپس محتويات دو
عدد را بدون استفاده از متغير كمكي جابجا كند.
5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد) را از
ورودي دريافت كرده سپس آن را به درجه فارنهايت تبديل كند.
دستورالعملهاي شرطي
در حل بسياري از مسائل يا تقريبًا تمام مسائل نياز به استفاده از شروط
جزء ،نيازهاي اساسي محسوب ميشود .همانطور كه ما خودمان در زندگي
روزمره با اين شرطها سركار داريم .بطور مثال اگر هوا ابري باشد ممكن
است چنين سخن بگوييم:
.اگر هوا باراني باشد سپس چتري برميدارم .در غير اينصورت چتر برنميدارم
:در حالت كلي شرط را بصورت زير نمايش ميدهند
عمل يا اعمال
yes
شرط يا شروط If
then
NO
عمل يا اعمال بعدي
مثال :فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت
.كرده ،فرد يا زوج بودن آن را تشخيص دهد
مثال :فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در
خروجي چاپ نمايد.
مثال :فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده،
كوچكترين عدد را يافته در خروجي چاپ نمايد:
:نمونه اجراي فلوچارت باال بصورت زير ميباشد
خروج
11
c
Min
12
12
11
11
11
11
17
b
a
1
2
3
4
5
تمرين
-1فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده ،قدر مطلق عدد را در خروجي
چاپ كند.
-2فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت ،منفي يا صفر بودن عدد
را تشخيص داده ،در خروجي با پيغام مناسب چاپ كند.
-3فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،بخش پذيري آن بر 3و 5را
بررسي نمايد.
4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي دريافت كرده،
ريشههاي آن را محاسبه در خروجي چاپ كند.
حلقهها
در حل بسياري از مسائل با عملياتي روبرو ميشويم ،كه نياز به تكرار دارند
و عمل تكرار آن ها به تعداد مشخصي انجام ميگيرد .فرض كنيد ،بخواهيم
ميانگين 100عدد را محاسبه كنيم ،در اينصورت منطقي بنظر نميرسد كه
100متغير مختلف را از ورودي دريافت كنيم سپس آن ها را جمع كنيم.
انواع حلقه ها
حلقه هاي با تکرار مشخص
حلقه هاي با تکرار نامشخص
حلقه هاي با تکرار مشخص
در اين نوع حلقهها تعداد تكرار مشخص ميباشد اين حلقه از اجزاء زير
ميشود
:تشكيل
1ـ انديس حلقه
2ـ مقدار اوليه براي انديس حلقه
-3مقدار افزاينده براي انديس حلقه (معموال يك واحد در هر مرحله)
4ـ مقدار نهايي (تعداد تكرار حلقه)
5ـ شرطي براي كنترل تعداد تكرار حلقه
اين حلقهها را غالبًا با فلوچارت بصورت زير نمايش ميدهند:
مقدار اوليه براي انديس حلقه 1 :
انديس حلقه i :
مقدار نهايي (تعداد تكرار حلقه)n :
مقدار افزاينده براي انديس حلقه (معموال
يك واحد در هر مرحله) 1+ :
شرطي براي
كنترل تعداد
تكرار حلقه:
i<=n
مثال :فلوچارتي رسم نمائيد كه عدد nرا از ورودي دريافت كرده ،مجموع
اعداد از يك تا nرا محاسبه كند.
n
مقدار نهايي
i
انديس حلقه
:نمونه اجراي فلوچارت باال بصورت زير است
خروجي
i
sum
5
15
1
2
3
4
5
6
0
1
3
6
10
15
N
مثال :فلوچارتي رسم كنيد كه nعدد از ورودي دريافت كرده ،بزرگترين مقدار از
بين nعدد را پيدا كرده در خروجي چاپ نمايد.
انديس حلقه
مقدار نهايي
بزرگترين مقدار
i
n
Max
مثال :فلوچارتي رسم نمائيد كه ، n , xدو عدد صحيح مثبت را از
ورودي دريافت كرده سپس xبه توان nرا محاسبه كند.
انديس حلقه
مقدار نهايي
عدد به توان pown
i
n
حلقههايي كه تعداد تكرار آن ها مشخص نيست.
ميشود .و دقيقًا
در اين حلقهها با توجه به ورودي ،تعداد تكرار مشخص
نميتوان تعداد تكرار حلقه را بدون ورودي معين كرد .اين حلقه ها فقط
شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا ميشود.
در حالت كلي اين نوع حلقهها بصورت زير نمايش داده ميشوند:
مثال :فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده سپس
تعداد ارقام آن را شمرده در خروجي چاپ نمايد.
عدد خوانده شده
تعداد ارقام
N
count
مثال :فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،سري
فيبوناچي قبل از آن را توليد نمايد.
:در حالت كلي جمالت سري بصورت
N
f1
عدد خوانده شده
جمله اول سري
f2
جمله دوم سري
f3
جمله سوم سري
fk=fk-1+fk-2
تمرين
-1فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،كامل بودن آن را
عليههاي آن با خودش
بررسي نمايد( .عدد كامل ،عددي است كه مجموع مقسوم
برابر باشد).
-2فلوچارتي رسم كنيد كه Nرا از ورودي دريافت كرده N ،جمله سري
فيبوناچي را توليد نمايد.
3ـ فلوچارتي رسم نمائيد كه دو عدد N , Mرا از ورودي خوانده ،بزرگترين
مقسومعليه مشترك دو عدد را محاسبه و چاپ كند.
حلقههاي تودرتو
الگوريتمهايي كه تا حال بكار برديم ،فقط شامل يك حلقه بودند .در صورتي كه در
بسياري از مسائل ممكن است نياز به استفاده از چند حلقه در داخل هم باشيم .در اين
نوع حلقهها بايد دقت بيشتري به خرج دهيم ،تا مشكلي پيش نيايد .اگر از حلقههاي
نوع اول بصورت تودرتو استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و
انديس اوليه جداگانه بايد تعريف كنيم .
در حلقههاي تودرتو به ازاي يكبار تكرار حلقه اوليه ،حلقه داخلي به اندازه
مقدار نهايي خود تكرار ميشود .در كل اگر حلقه اوليه nبار تكرار شود و
حلقه داخلي mبار ،در اينصورت كل حلقه :
nm
nبار
.بار تكرار خواهد شد
mبار
فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد:
nبار
mبار
مثال :فلوچارتي رسم نمائيد كه Nرا از ورودي دريافت كرده ،مجموع سري زير
را محاسبه نمايد:
N
!N
....
انديس حلقه اول
ورودي N
محاسبه فاكتوريل fact
انديس حلقه داخلي
مجموع Sum
3
!3
i
j
S 1
2
!2
ایا راه ساده تری وجود دارد؟
Sum ← Sum + i/fact
تمرينات آخر فصل
-1فلوچارتي رسم نمائيد كه Nعدد از ورودي دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجي چاپ
نمايد.
-2فلوچارتي رسم نمائيد كه N , Xرا از ورودي خوانده مقدار سري زير را محاسبه كند:
+2
2 4
n
x
x
x
S 1
....
!2! 4
!N
-3فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده مقلوب عدد را محاسبه و در خروجي چاپ كند.
4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده ،سن شخص را با تاريخ روز ،محاسبه نموده
در خروجي چاپ كند.
-5فلوچارتي رسم نمائيد كه ( N ,M )m>nرا از ورودي دريافت كرده سري فيبوناچي بين N ,Mرا توليد
كرده ،در خروجي چاپ كند.
برنامه نویسی به زبان ++C
فهرست مطالب
فصل اول :مقدمات زبان ++C
فصل دوم :ساختار های تصمیم گیری و تکرار
فصل سوم :سایر ساختار های تکرار
فصل چهارم :اعداد تصادفی
فصل پنجم :آرایه ها
فصل ششم :توابع
فصل هفتم :ساختارها و اشاره گرها
فصل اول
مقدمات ++C
فهرست مطالب فصل اول
.1تاریخچه مختصر
.2قانون نامگذاری شناسه ها
.3متغیر ها
.4اعالن متغیر
.5تخصیص مقادیر به متغیر
.6داده های از نوع کرکتر
.7کرکتر های مخصوص
.8رشته ها
.9نمایش مقادیر داده ها
.10دریافت مقادیر
.11
.12
.13
.14
.15
.16
.17
.18
.19
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
عملگر sizeof
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات ()Comments
توابع کتابخانه
برنامه در ++C
تاریخچه مختصر ++C
این زبان در اوائل دهه 1980توسط Bjarne stroustrupدر آزمايشگاه بل
طراحي شده .اين زبان عمًال توسعه يافته زبان برنامه نويسي Cمی باشد كه
امكان نوشتن برنامههاي ساخت يافته شئ گرا را ميدهد.
قانون نامگذاري شناسهها
)1
حروف كوچك و بزرگ در نامگذاري شناسهها متفاوت ميباشند.
بنابراين Xy ، XY ، xY ، xyچهار شناسه متفاوت از نظر ++Cميباشد.
قانون نامگذاري شناسهها
)2در نامگذاري شناسهها از حروف الفباء ،ارقام وزير خــط ()underscore
استفاده ميشود و حداكثر طول شناسه 31ميباشد و شناسه بايســـتي با
يك رقم شروع نگردد.
قانون نامگذاري شناسهها
در زير بعضي از كلمات.) براي نامگذاري شناسهها از كلمات كليدي نبايستي استفاده نمود3
.كليدي داده شده است
And
Sizeof
then
xor
Template
Float
False
Friend
While
continue
extern
Private
Switch
Default
Const
delete
typedef
if
this
Virtual
متغيرها
متغير ،مكاني در حافظه اصلي كامپيوتر
ميباشد كه در آنجا يك مقدار را ميتوان
ذخيره و در برنامه از آن استفاده نمود.
قانون نامگذاري متغيرها همان قانون
نامگذاري شناسهها ميباشد.
در اسالید بعد به انواع داده ها اشاره می شود.
انواع داده ها
نوع داده
حافظه الزم
مقادير
2بايت
32767تا –32768
2بايت
65535تا 0
4بايت
2147483647تا –2147483648
4بايت
4294967295تا 0
1بايت
يك كاركتر
char
1بايت
127تا –128
unsigned char
4بايت
3.4e38تا 1.2e-38
8بايت
1.8e308تا 2.2e-308
int
unsigned int
long int
unsigned long int
float
double
اعالن متغیرها
قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده
شود و از آنها استفاده گردد بايستي آنها را در برنامه اعالن
نمود.
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
چند مثال از اعالن متغیر ها :
براي اعالن متغير xاز نوع : int
;x
int
برای اعالن متغيرهاي pو qرا از نوع floatكه هر كدام چهار بايت از
حافظه را اشغال ميكنند :
;float p , q
برای اعالن متغير nextاز نوع كركتر كه ميتوان يكي از 256كركتر را
به آن تخصيص داد و يك بايت را اشغال ميكند.
;char next
تخصيص مقادير به متغيرها
با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود.
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
مثال :
در دستورالعمل
با مقدار اوليه 26اعالن نموده .
X
; int x=26را از نوع int
;long int a=67000 , b=260
در دستورالعمل
متغيرهاي bو aرا از نوع long intتعريف نموده با مقادير بترتيب
260و .67000
دادههاي از نوع كركتر
براي نمايش دادههاي از نوع charدر حافظه كامپيوتر از جدول
ASCIIاستفاده ميشود .جدول اسكي به هر يك از 256
كركتر يك عدد منحصر بفرد بين 0تا 255تخصيص ميدهد.
كركترهاي مخصوص
كامپيلر ++Cبعضي از كركترهاي مخصوص كــه در برنامــه ميتـوان از
آنها براي فرمت بندي استفاده كرد را تشــخيص ميدهــد .تعــدادي از
اين كركترهاي مخصوص به همراه کاربرد آنها در اســالید بعــد آورده
شده است .
كركترهاي مخصوص
\n
Newline
\t
Tab
\b
Backspace
\a
Beep sound
\”
Double quote
\’
Single quote
\0
Null character
\?
Question mark
\\
Back slash
beep ميتوان براي ايجاد صدايa\ بعنوان مثال از كركتر
; char
x = '\a
.استفاده نمود
رشتهها
رشته يا stringعبارتست از دنبالهاي از كركترها كه بين " " قرار داده
ميشود .در حافظه كامپيوتر انتهاي رشتهها بوسيله \ 0ختم ميگردد.
در اسالید بعد به دو مثال دقت نمایید.
مثال : 1
" "BOOK STOREيك رشته ده كركتري ميباشد
كه با توجه به كركتر \ 0كه به انتهاي آن در حافظه
اضافه مي شود جمعــًا يازده بايت را اشغال ميكند.
مثال : 2
دقت نمایید که " "wيك رشته ميباشد كه دو بايت از
حافظــه را اشــغال ميكنــد در حاليكه ' 'wيك كركــتر
ميباشد كه يك بايت از حافظه را اشغال مينمايد.
نمايش مقادير دادهها
براي نمايش دادهها بر روي صفحه مانتور از coutكه
بدنبال آن عملگر درج يعني <<قيد شده باشد استفاده
ميگردد .بايستي توجه داشت كه دوكركتر <پشت سر هم
توسط ++Cبصورت يك كركتر تلقي ميگردد.
:مثال
برای نمایش پيغام good morningبر روی صفحه نمایش :
;"cout << "good morning
برای نمایش مقدار متغیر Xبر روی صفحه نمایش :
; cout << x
دریافت مقادیر متغیرها
به منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامه از
صفحه كليد ،از cinكه بدنبال آن عملگر اســتخراج يعــني >>
قيد شده باشد ميتوان استفاده نمود.
: مثال
int x;
cout << "Enter a number:" ;
cin >> x;
عملگر انتساب
عملگر انتساب = ميباشد كه باعث ميگردد
مقدار عبارت در طرف راست این عملگر ارزيابي
شده و در متغير طرف چپ آن قرار گيرد.
مثال :
;x=a+b
; x=35
; x=y=z=26
از عملگرهاي انتساب
چندگانه نيز ميتوان
استفاده نمود .که مقدار
سه متغير zو yو xبرابر
با 26مي شود.
عملگرهاي محاسباتي
در ++Cپنج عملگر محاسباتي وجود دارد كه عبارتند از :
+
جمع
-
تفريق
*
ضرب
/
تقسيم
%
باقيمانده
اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند .از طرف
ديگر عملگرهاي +و – راميتوان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.
مثال : 1
در حالتي كه هر دو عملوند عملگرهاي – ، + ، * ، / ، %از نوع
صحيح باشد نتيجه عمل از نوع صحيح ميباشد.
نتیجه
عبارت
7
2+5
10
5*2
3
5–2
1
5%2
2
5/2
مثال : 2
در صورتيكه حداقل يكي از عملوندهاي عملگرهاي + ، – ، * ، /از
نوع اعشاري باشد نتيجه عمل از نوع اعشاري ميباشد.
نتیجه
عبارت
7. 0
2 + 0 .5
10.0
5* 2. 0
2.5
5. 0 / 2
3. 0
5. 0 -2
2.5
5. 0 / 2. 0
عملگرهاي افزايش و كاهش
در ، ++Cافزايش يك واحد به مقدار يك
متغير از نوع صحيح را افزايش و بطور
مشابه كاهش يك واحد از مقدار يك
متغير از نوع صحيح را كاهش مينامند..
عملگرهاي افزايش و كاهش
عملگر كاهش را با - -و عملگر افزايش
را با ++نمايش ميدهند .چون عملگرهاي
++و - -فقط روي يك عملوند اثر دارند
اين دو عملگر نيز جزء عملگرهاي يكتائي
ميباشند.
مثال :
سه دستور العمل :
;++x
;x++
;x= x+1
معادل ميباشند و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند.
;--y
;y= y-1
;y--
از عملگرهاي ++و --ميتوان بدو صورت پيشوندي و پسوندي استفاده نمود.
در دستورالعملهاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي مي شود و عملگر
پسوندي بعد از انتساب ارزيابي ميشود.
مثال :
;int x=5
;y=++x * 2
پس از اجراي دستورالعملهاي فوق :
y=12
X=6
;int x=5
;y=x++ * 2
پس از اجراي دستورالعملهاي فوق :
y=10
X=6
عملگر sizeof
Sizeofازعملگرهاي يكتائي مي باشد و مشخص كننده
تعداد بايت هائي است كه يك نوع داده اشغال ميكند.
مثال :
;int x
; cout << sizeof x
مقدار 2نمايش داده ميشود .
; )cout << sizeof(float
مقدار 4نمايش داده مي شود.
عملگرهاي جايگزيني محاسباتي
براي سادهتر نوشتن عبارتها در ، ++Cميتوان از عملگرهاي
جايگزيني محاسبـــاتي استفاده نمود.
=%
:مثال
=/
;int a=1
;a += 1
*=
=-
=+
;int a=1
;a = a +1
اولويت عملگرها
ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام ميگردد .در ذيل جدول اولويت
عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است.
چپ به راست
پرانتزها
چپ به راست
عملگرهاي ضرب و تقسيم و باقيمانده
راست به چپ
چپ به راست
چپ به راست
راست به چپ
عملگرهاي يكتايي
عملگرهاي جمع و تفريق
عملگرهاي درج و استخراج
عملگرهاي جايگزيني و انتساب
)(
- + -- ++ sizeof
%
>>
/
*
+
<<
== += -= *= /= %
مثال : 1
(5+2) *(6+2*2)/2
با توجه به جدول اولويت عملگرها داريم كه
7 *(6+2*2)/2
7*(6+4)/2
7* 10 /2
70 /2
35
: 2 مثال
int a=6 , b=2, c=8, d=12;
d=a++ * b/c ++;
cout << d << c << b << a;
: خروجی
1
9
2
7
توضيحات ()Comments
توضيحات در برنامه باعث خوانائي بيشتر و درك بهتر برنامه مي شــود.
بنابراين توصيه بر آن است كه حتي االمكان در برنامهها از توضـــيحات
استفاده نمائيم .در ،++Cتوضيحات بدو صورت انجام ميگــيرد کــه در
اسالیدهای بعد به آن اشاره شده است.
توضيحات ()Comments
الف :اين نوع توضيح بوسيله //انجام ميشود .كه كامپيوتر هر چيزي را كه بعد از //قرار داده
شود تا انتهاي آن خط اغماض مينمايد.
مثال :
//c is equal to sum of a and b
;c=a+b
ب :توضيح نوع دوم با */شروع شده و به * /ختم ميشود و هر چيزي كه بين* /و * /قرار گيرد
اغماض مينمايد .
مثال :
/ * this is a program
to calcufate sum of
n integer numbers */
توابع كتابخانه
زبان ++Cمجهز به تعدادي توابع كتابخانه ميباشد .بعنوان
مثال تعدادي توابع كتابخانه براي عمليات ورودي و خروجي
وجود دارند .معموًال توابع كتابخانه مشابه ،بصورت برنامههاي
هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايلهاي
كتابخانه دسته بندي و مورد استفاده قرا رميگيرند .اين فايلها
را فايلهاي headerمينامند و داراي پسوند h.ميباشند.
نحوه استفاده از توابع کتابخانه ای
براي استفاده از توابع كتابخانه خاصي بايستـــي نام فايل header
آنرا در ابتداي برنامه در دستور #
includeقرار دهيم.
> اسم فايل include
< #header
تابع
نوع
a b s(i )
int
co s(d )
double
exp (d )
l o g (d )
l o g 10(d )
double
double
double
si n (d )
double
sq rt (d )
double
st rl en (s)
int
t a n (d )
double
t o asci i ( c)
int
t o l o wer(c )
int
t o u p p er(c )
int
شرح
i قدرمطلق
d كسينوس
ex
loge d
Log10 d
d سينوس
d جذر
s تعداد كركترهاي رشته
d تانژانت
cكداسكي كركتر
تبديل به حروف كوچك
تبديل به حرف بزرگ
فايل هيدر
st d l i b .h
ma t h .h
ma t h .h
ma t h .h
ma t h .h
ma t h .h
ma t h .h
st ri n g .h
ma t h .h
st d l i b .h
st d l i b .h
st d l i b .h
برنامه در ++C
اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و
كوچك به زبان ++Cبنويسيم .براي نوشتن برنامه بايستي دستورالعملها را در
تابع ) (mainقرار دهيم و براي اينكار ميتوان به يكي از دو طريقی که در
اسالیدهای بعد آمده است ،عمل نمود.
:روش اول
>
#include
<
) (int main
}
; دستورالعمل 1
; دستورالعمل 2
.
.
.
; دستورالعمل n
; return 0
}
روش دوم :
>
#include
<
) (void main
{
; دستورالعمل 1
; دستورالعمل 2
.
.
.
; دستورالعمل n
}
:error
•
•
•
به خطاهاي برنامه نويسي errorمي گويند .ما در برنامه نویسی دو نوع خطا داریم:
خطاهای دستوری ()syntax error
خطاهای منطقی (.)logical error
را روي صفحه مانیتور نمايشC++ is an object oriented language برنامه ای که پيغام
.مي دهد
#include <iostream.h>
int main( )
{
cout <<"C++ is an object oriented language \n" ;
return 0 ;
}
برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مينمايد.
#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; }
دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمايش ميدهد.
#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 ;
}
فصل دوم
ساختارهای تصمیم گیری و تکرار
فهرست مطالب فصل دوم
.1
.2
.3
.4
.5
.6
عملگر های رابطه ای
عملگر شرطی
دستورالعمل شرطی
عملگر کاما
عملگر های منطقی
دستورالعمل For
عملگرهای رابطه ای
از این عملگرها براي تعيين اينكه آيا دو عدد با
هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر
ميباشد استفاده ميگردد .عملگرهاي رابطهاي
عبارتند از:
مساوي
==
بزرگتر
>
مخالف
بزرگتر يا مساوي
كوچكتر
كوچكتر يا مساوي
=!
=>
<
<
=
عملگر شرطی
شكل كلي عملگر شرطي بصورت زير ميباشد:
expression _ test ? expression _ true : expression _ false
عملگر شرطي تنها عملگري در ++Cميباشد كه داراي سه عملوند ميباشد.
مثال : 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نمايش داده مي شود.
دستورالعمل شرطي
IF
توسط این دستور شرطي را تست نموده و بسته
به آنكه شرط درست يا غلط باشد عكسالعمل
خاصي را نشان دهيم.
) عبارت (
; دستورالعمل 1
.
; دستورالعمل n
if
{
}
else
; دستورالعمل 1
.
; دستورالعمل n
{
}
1 مثال:
if(x != y)
{
cout << x ;
++ x ;
}
else
{
cout << y ;
--y;
}
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;
}
عملگر كاما
تعدادي عبارت را ميتوان با كاما بهم متصل نمود و تشكيل يك عبارت
پيچيدهتري را داد .اين عبارتها به ترتيب از چپ به راست ارزيابي شده و مقدار
عبارت معادل عبارت nميباشد.
(عبارت , .… , nعبارت , 3عبارت , 2عبارت )1
مثال :
اگر داشته باشيم
; int a=2 , b=4 , c=5عبارت زير را در نظر بگيريد:
)(++ a , a+b, ++ c, c+b
مقدار عبارت برابر است با b+cكه معادل 10ميباشد.
عملگرهای منطقی
با استفاده از عملگرهاي منطقي ميتوان شرط هاي تركيبي در برنام ه ايجاد نمود .عملگرهاي
منطقي عبارتست از :
AND
OR
NOT
كه در ++Cبه ترتيب بصورت زير نشان داده مي شود.
&&
||
!
جدول درستی سه عملگر شرطی
a
t ru e
t ru e
fa l se
fa l se
a
t ru e
t ru e
fa l se
fa l se
b
t ru e
fa l se
t ru e
fa l se
b
t ru e
fa l se
t ru e
fa l se
a && b
Tru e
Fa l se
Fa l se
Fa l se
a
t ru e
fa l se
!a
Fa l se
Tru e
a || b
Tru e
Tru e
Tru e
Fa l se
چند مثال :
))if ((x= = 5) ||(y != 0
; cout << x << endl
اگر xبرابر با 5يا yمخالف صفر باشد مقدار xنمايش داده شود .
if(x
)
=x
;0
اگر مقدار xمخالف صفر باشد ،آنگاه xبرابر با صفر شود .
برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد كه آيا تشكيل يك مثلث مي دهد يا خير؟
# 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 ;
}
دستورالعمل For
از دستور العمل forبراي تكرار دستورالعمل ها استفاده مي شود .شكل كلي دستور
forبصورت زير ميباشد:
(عبارت 3
; عبارت ;
2عبارت for )1
{
; دستورالعمل 1
; دستورالعمل 2
.
.
.
; دستورالعمل n
}
ساختار for
;معرفی کنترل گر حلقه
) مقداردهی اولیه کنترل گر حلقه; شرط حلقه; گام حرکت( for
}
;
;int i
)for (i=1; i<=3; i++
{
;”cout << “hello \n
{
مجموعه دستورات بدنه حلقه
{
مثال
void main()
{
cout << “hello \n”;
cout << “hello \n”;
cout << “hello \n”;
}
void main()
{
int i;
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
}
for نحوه اجرای دستور
int i;
i=
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
for نحوه اجرای دستور
int i;
i= 1
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
for نحوه اجرای دستور
int i;
i= 1
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
hell
o
2
for نحوه اجرای دستور
int i;
i= 1
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
hell
o
hell
o
2
3
for نحوه اجرای دستور
int i;
i= 1
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
hell
o
hell
o
hell
o
2
3
4
for نحوه اجرای دستور
int i;
i= 1
for (i=1; i<=3; i++)
{
cout << “hello \n”;
}
hell
o
hell
o
hell
o
2
3
4
نکته
• لزومی ندارد که کنترل گر حلقه حتمًا از 1شروع شود.
;int i
)for (i=5; i<=7; i++
{
;”cout << “hello \n
}
نکته
• مقدار دهی اولیه کنترل گر حلقه می تواند خارج از دستور forباشد.
;int i =1
)for ( i ; i<=3; i++
{
;”cout << “hello \n
}
نکته
•
مقدار دهی اولیه کنترل گر حلقه می تواند خارج از دستور forباشد .در این صورت می توان جمله اول موجود در عبارت forرا خالی گذاشت.
;int i=1
;int i=1
;for ( ; i<=3
)i++
{
cout << “hello
;”\n
}
;for ( i; i<=3
)i++
{
cout << “hello
;”\n
}
=
نکته
• گام حرکت می تواند در بدنه دستور forتعریف شود.
;int i=1
;for ( i; i<=3
)
{
;”cout << “hello \n
;i++
}
نکته
• معرفی کنترل گر حلقه می تواند در داخل دستور forباشد.
for (int i= 1; i<=3; i+
)+
{
;”cout << “hello \n
}
نکته
•
در دستور forاگر قسمت شرط خالی باشد ،حلقه همیشه اجرا خواهد شد .به عبارتی هیچ شرطی برای توقف نداریم
i+
;for (int i= 1
;
)+
{
;”cout << “hello \n
}
)
( for
;
;
{
;”cout << “hello \n
}
• وقتی هیچ شرطی نداریم ،دو قسمت دیگر دستور forنیز می توانند خالی باشند.
نکته
• لزومی ندارد که گام حرکت بصورت افزایشی باشد بلکه می تواند
بصورت کاهشی نیز باشد.
)i--
;for (int i= 3; i >= 1
{
;”cout << “hello \n
}
• تمرین :اعداد 100تا 1را به صورت نزولی چاپ نمایید ( .با گام
حرکت افزایشی و کاهشی جداگانه بنویسید)
نکته
• گام حرکت می تواند افزایش یا کاهش بیش از 1واحد را داشته باشد.
• مثال :چاپ اعداد فرد بین 1تا 100
;for (int i= 1; i <= 100
)k=k+2
{
;”cout << k << “\n
}
نکته
• کنترل گر حلقه می تواند اعشاری یا کاراکتری باشد ،لزومی ندارد
که حتما عدد صحیح در نظر بگیریم.
ch+
;’for (char ch= ‘a’; ch <= ‘z
)+
{
;”cout << ch << “\n
}
. را از ورودي گرفته فاكتوريل آن را محاسبه ونمايش ميدهدn برنامه زير عدد صحيح و مثبت
#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 ;
}
برنامه زير مجموع اعداد صحيح و متوالي بين 1تا nرا محاسبه نموده و نمايش ميدهد.
#include
><iostream.h
int
) (main
{
; int n, i=1
; long s = 0
; cin >> n
)for( ; i<=n; i++
;s += i
; cout << s
} ; return 0
. را نمايش ميدهد9 تا0 برنامه زير ارقام
#include <iostream.h>
int main( )
{
int j=0 ;
for( ; j <= 9 ; )
cout << j++ << endl;
return 0 ;
}
. ايجاد ميشوند را نمايش ميدهد3 ، 2 ، 1 برنامه زير كليه اعداد سه رقمي كه با ارقام
#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تا 1000را چاپ کند.
برنامه ای که 100عدد را خوانده ،مجموع را محاسبه و چاپ کند.
برنامه ای که حاصلضرب اعداد 1تا 50را چاپ کند.
برنامه ای که 50کاراکتر از صفحه کلید خوانده و تعیین کند که کدام یک حرف کوچک است.
برنامه ای که 100عدد صحیح را خوانده maxو minرا چاپ کند.
برنامه ای که کاراکتر هایی که کد آن ها بین 100تا 200هست ،را چاپ نماید.
کاربرد دستور breakدر دستور for
• اگر در بدنه forاز جمله ی ;breakاستفاده شود ،ادامه ی اجرای
حلقه متوقف شده و حلقه خاتمه می یابد.
;int i , x
)for(i=1;i<=100;i++
;{cin>>x
;if(x==50) break
}
• قطعه کد فوق حداکثر 100عدد صحیح از ورودی می گیرد ،ولی اگر در بین
اعداد ورودی عدد 50وارد شود بدون بررسی شرط حلقه از ادامه اجرای
دستورات forاجتناب کرده و از حلقه خارج می شود.
مثال
• قطعه کدی که تعدادی کاراکتر از صفحه کلید خوانده ،بعد از
فشردن دکمه ی Eتعداد آن ها را مشخص کند:
;char ch
;int i
)for(i=0; ;i++
;{cin>>ch
;if (ch==‘E’) break
}
;cout<<i
حلقه forتودرتو
• می توان داخل بدنه ی دستور forهر دستور دلخواه دیگری نوشت .به عنوان
مثال می توان از یک دستور forدر بدنه دستور forاستفاده کرد.
• قطعه کد زیر عبارت Helloرا 15بار اجرا می کند:
15
بار
)for(int i=1; i<=5; i++
{
)for(int j=1; j<=3; j++
3بار
;”cout<<“Hello \n
}
بار 5
چاپ جدول ضرب اعداد:مثال
int main()
{int i,j;
for(int i=1; i<=10; i ++)
for(int j=1; j<=10; j++)
{ cout<<i*j<<“ “;
if (j==10) cout<<‘\n’;
}
return 0;
}
عدد را خوانده و برای هرکدام20 برنامه ای که:مثال
تا آن عدد را محاسبه کند1 مجموع اعداد.
int main()
{
int i,j,x,sum;
for(int i=1; i<=20; i++)
{sum=0; cin>>x;
for(int j=1; j<=x; j++)
sum+=j;
cout<<“sum of 1 to “<<x<<“ :“<<sum<<endl;
}
return 0;
}
کاربرد حلقه forبا دو اندیس
برنامه ای بنویسید که ستون اعداد زیر را چاپ کند:
1,
2,
3,
4,
20
19
18
17
.
.
.
20, 1
روش اول:
)for(int i=1; i<=20; i++
;cout<<i<<“, “<<21-i<<endl
روش دوم:
)i++, j--
;for(int i=1, j=20; i<=20
;cout<<i<<“, “<<j<<endl
دستور ;continueدر for
• اگر دستور ;continueدر حلقه forاستفاده شود ،جمالتی از حلقه که
هنوز اجرا نشده اند ،بدون اجرا مانده و ادامه اجرا از انتهای حلقه اغاز
خواهد شد.
برنامه فوق 20عدد از ورودی خوانده و
حاصلضرب اعداد غیر صفر را در متغیر p
محاسبه کرده و در نهایت نمایش می دهد.
)(int main
{
;int x, p=1
)for(int i=1; i<=20; i++
;{cin>>x
;if (!x) continue
;p*=x
}
;cout<<p
;return 0
}
فصل سوم
سایر ساختارهای تکرار
فهرست مطالب فصل سوم
.1
.2
.3
.4
.5
.6
.7
.8
دستورالعمل while
دستورالعمل do while
دستورالعمل break
دستورالعمل continue
دستورالعمل switch
تابع )(cin.get
عملگر )(><static_cast
جدول اولویت عملگرها
دستورالعمل while
از اين دستور العمل مانند دستورالعمل forبراي تكرار يك دستورالعمل ساده يا تركيبي
استفاده ميگردد .شكل كلي اين دستور العمل بصورت زير ميباشد.
;معرفی کنترل گر حلقه
;مقدار دهی اولیه کنترل گر حلقه
)شرط (while
}
دستورالعمل 1
;
دستورالعمل 2
;
.
.
; دستورالعمل n
گام حرکت
;
}
تفاوت دستورهای whileو for
دستورالعمل forزماني استفاده مي شود كه تعداد دفعات تكرار از قبل
مشخص و معين باشد .در صورتيكه تعداد دفعات تكرار مشخص نباشد
بايستي از دستورالعمل whileاستفاده نمود.
دقت کنید با پیاده سازی مکانیزم های خاصی می توان بدون توجه به
دفعات تکرار از هر دو دستور بصورت مشابه استفاده کرد.
مثال :
int x=0
)while(x<5
;cout << x ++<< endl
با اجراي قطعه برنامه فوق مقادير زير نمايش داده
:ميشود
0
1
2
3
4
. قرار ميدهدavg مقدار از نوع اعشاري را گرفته ميانگين آن ها را محاسبه و در متغيرn برنامة فوق
#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 ; }
نکته
• همانند دستور forاگر داخل بدنه دستور whileفقط یک جمله
باشد می توان { و } را حذف کرد.
• مثال :نمایش اعداد 0تا :100
;cout<<j++<<endl
) (int main
{
;int j = 0
)while(j<=100
; return 0
}
برنامه زیر را تفسیر کنید:
int main( )
{
int j = 0;
while(j<10)
J++;
cout<<j;
return 0 ;
}
دستورالعمل do while
اين دستور العمل نيز براي تكرار يك دستورالعمل ساده
يا تركيبي استفاده ميشود .شكل كلي اين دستورالعمل
بصورت زير ميباشد.
;معرفی کنترل گر حلقه
;مقدار دهی اولیه کنترل گر حلقه
do
; دستورالعمل { 1
دستورالعمل 2
;
.
.
; دستورالعمل n
گام حرکت
;
;)شرط (} while
do
}
; دستورالعمل 1
; دستورالعمل 2
.
.
; دستورالعمل n
;)شرط (} while
تفاوت دستورهای do whileو while
در دستورالعمل whileابتدا مقدار شرط
ارزيابي شده اما در دستورالعمل do while
ابتدا دستورالعمل اجرا شده سپس مقدار شرط
ارزيابي ميگردد .بنابراین دستورالعمل do
whileحداقل يك بار انجام مي شود .
: مثال
# include <iostream.h>
int main( )
{
int count = 0;
do
cout << count ++<<endl ;
while(count <= 9);
return 0 ; }
را روي ده خط نمايش ميدهد9 تا0 ارقام
دستورالعمل break
اين دستورالعمل باعث توقف دستورالعمل هاي تكرار( )for , while ,do whileشده و
كنترل به خارج از اين دستورالعمل ها منتقل مينمايد.
مثال : 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
جمع تعدادی عدد که بین 0و 1000هستند .اگر
; return 0
بین اعداد وارد شده عدد منفی وارد شود ،بواسطه
}
دستور ;breakحلقه خاتمه می یابد.
اگر عدد وارد شده بزرگتر از 1000باشد نیز
شرط حلقه برآورده نشده و حلقه خاتمه می یابد
:2 مثال
#include <iostream.h>
int main( )
{
int count = 0 ;
while( 1 )
{
count ++ ;
if(count > 10 )
break ;
}
cout << "counter : " << count << "\n";
return 0 ;
}
counter : 11
مثال :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
جمع تعدادی عدد اعشاری که بیشتر از 0و کمتر از
; cin >> x
1000هستند را محاسبه می کند .اگر بین اعداد
}
; cout << sum << \n
وارد شده عدد منفی وارد شود ،بواسطه دستور
}
;breakحلقه خاتمه می یابد.
اگر عدد وارد شده بزرگتر یا مساوی 1000باشد
نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد
مثال :4
>#include <iostream.h
) (int main
{
; float x , sum = 0.0
; cout << "Error – Negative Value" << endl
; break
}
جمع تعدادی عدد که بین 0و 1000هستند .اگر بین
اعداد وارد شده عدد منفی وارد شود ،بواسطه دستور
;breakحلقه خاتمه می یابد.
اگر عدد وارد شده بزرگتر از 1000باشد نیز شرط
حلقه برآورده نشده و حلقه خاتمه می یابد.
نکته :این حلقه حداقل یک بار اجرا می شود ....حتی اگر
عدد اول بزرگتر از 1000باشد نیز در مجموع شرکت
داده خواهد شد .سپس از حلقه خارج خواهیم شد.
; cin >> x
)if(x < 0.0
{
{ do
; sum += x
;)} while(x <= 1000.0
; cout << sum << endl
; return 0
}
دستورالعمل continue
از دستورالعمل continueميتوان در دستورالعمل هاي تكرار do while ، while ،
forاستفاده نمود .اين دستورالعمل باعث ميشود كه كنترل به ابتدای
دستورالعمل هاي تكرار منتقل گردد.
(تذکر :در ابتدای حلقه بایستی شرط حلقه نیز بررسی شود)
پس بهتر است بگوییم به انتهای بدنه حلقه تکرار رفته و از آن جا ادامه می دهد.
مثال :1
جمع تعدادی عدد که کوچکتر و مساوی 1000
هستند را بدست می اورد .اگر بین اعداد وارد شده
عدد منفی وارد شود ،در حاصل جمع شرکت
نخواهد کرد و اجرای دستورالعمل ها به انتهای
حلقه هدایت خواهد شد.
اگر عدد وارد شده بزرگتر از 1000باشد نیز
شرط حلقه برآورده نشده و حلقه خاتمه می یابد.
نکته :این حلقه حداقل یک بار اجرا می شود....
حتی اگر عدد اول بزرگتر از 1000باشد نیز
در مجموع شرکت داده خواهد شد سپس از حلقه
خارج خواهیم شد.
>#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
مثال :2
nعدد از ورودی خوانده .در صورتیکه صفر نباشد ان را
در مجموع اعداد شرکت می دهد.
در نهایت میانگین اعداد غیر صفر را محاسبه می کند
>#include <iostream.h
) (int main
{
; int n , navg = 0
; float x, avg, sum = 0
n * /عبارت از تعداد اعداد ورودي * cin >> 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
}
دستورالعمل switch
همانطور که می دانید از دستورالعمل شرطی( )if elseمی توان بصورت تودرتو
استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد
گردد ،درك آن ها مشكل مي شود .براي حل اين مشكل ، ++Cدستورالعمل
switchكه عمًال يك دستورالعمل چند انتخابي ميباشد را ارائه نموده است.
Switch شکل کلی دستور العمل
switch()عبارت
{
case valueone :
statement;
break;
case
statement;
valuetwo:
break;
case
statement;
valuen :
break;
default: statement ;
}
#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 * /
}
1 مثال:
: 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;
}
}
تابع : )(cin.get
اين تابع يك كركتر را از صفحه كليد
ميگيرد .براي استفاده از اين تابع در
ابتداي برنامه بايستي داشته باشيم :
#include
><iostream.h
قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش ميدهد.
char
;x
;) (x = cin.get
; cout << x
برنامة ذيل يك سطر متن انگليسي كه به CTRL Zختم مي شود را گرفته دقيقاً نمايش ميدهد.
><iostream.h
#include
) (int main
{
;char x
)while((x = cin.get( )) !=EOF
; cout << x
; return 0
}
EOFبه معني End of Fileميباشد كه در
iostream.hتعريف شده و مقدار آن برابر با -1
ميباشد .مقدار آن در سيستم عامل DOS
عبارتست از . ctrl z
. استفاده شده استswitch () و دستورcin.get در قطعه برنامه ذيل ازتابع
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; break;
}
.) آن را حذف نموده و نمايش مي دهدblank( برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي
#include
<iostream.h>
int main( )
{
char next;
while((next = cin.get( ) ) !=EOF)
if(next != )
cout << next ;
return 0 ;
}
تمرین :برنامه ای با استفاده از ساخنار switch caseکه یک عملگر و دو
عملوند را از ورودی خوانده ،عملگر را بر روی عملوند اجرا نمایید.
عملگر static_cast
از اين عملگر براي تبديل موقت يك نوع dataبه نوع ديگر
استفاده ميشود .اين عملگر يك عملگر يكتائي ميباشد.
:مثال 1
intint xx==25
; ;25
float
; ;float yy
yy==static_cast
static_cast<<float
)float>(x
; ;)>(x
مقدار xموقتًا بصورت اعشاري در می آيد و در نتيجه مقدار yبرابر با 25.0
می شود .بايستي توجه داشت كه نوع متغير xعوض نمي شود بلكه موقتًا
مقدار آن بصورت اعشاري در آمده است.
2 مثال:
float
floatxx=
=14.75
14.75;;
cout
cout<<
<<static_cast
static_cast<
<int
int>(x)
>(x)<<
<<
endl;
endl;
cout
cout<<
<<xx;;
نمايش داده مي شود14 ابتدا مقدار
نمايش داده14.75 و سپس مقدار
.ميشود
جدول اولویت عملگرها
(
چپ به راست
)
چپ به راست
+-
راست به چپ Static_cast < >( ) ++ -- + - sizeof
چپ به راست
* / %
چپ به راست
چپ به راست
چپ به راست
راست به چپ
راست به چپ
چپ به راست
<<
>>
=> > =<
=!
==
:
?
=*= /= %
<
== += -
,
تمرین
.1
برنامه ای که یک سکه 100ریالی را بــه ســکه های 2و 5و10و 20و 50
ریالی خرد کند.
.2
برنامه ای که خروجی زیر را چاپ کند:
.3
برنامه ای که حاصل عبارت زیر را بدست اورد:
N
!N
S 1 ....
3
!3
2
!2
فصل چهارم
اعداد تصادفی
فهرست مطالب فصل چهارم
.1
.2
.3
تولید اعداد تصادفی
تعریف نوع داده ( ) typedef
داده های از نوع شمارشی
اعداد تصادفی
مقادير تصادفي يا شانسي در اكثر برنامههاي كاربردي در زمينه شبيه سازي و بازيهاي
كامپيوتري نقش مهمي را ايفا مينمايند .براي ايجاد يك عدد تصادفي صحيح بين 0و 32767
بايستي از تابع )(randاستفاده نمائيم.
. را ايجاد مينمايد32767 و0 عدد تصادفي بين10 برنامه زير
#include
<stdlib.h>
#include
< iostream.h>
int main( )
{
for(int j=1; j<=10; ++j)
cout << rand( ) << \n ;
return 0 ;
}
تعريف نوع داده ()typedef
از typedefميتوان براي تعريف نوع دادههاي جديد كه معادل نــوع
دادههاي موجود باشد استفاده نمود .شكل كلي عبارتست از :
;newtype
اسم جديد
type
typedef
نشان دهنده نوع داده موجود
مثال :
;typedef int integer
حال ميتوان yو xرا بصورت زير تعريف نمود :
;integer x,y
دادههاي از نوع شمارشي
بمنظور معرفي دادههاي از نوع شمارشي از كلمه enumاستفاده ميگردد.
مثال
4
3
2
1
0
; }enum color {red, blue, green, yellow, brown
مثال
colorيك نوع داده شمارشي ميباشد.
;}emum status {married, devorced, vidow, single
; status a
; a= single
:
:توجه
بايستي در نظر داشت كه دادههاي از نوع شمارشي در
عمليات ورودي و خروجي شركت نمينمايند .بعبارت ديگر
مقادير دادههاي از نوع شمارشي بايستي در برنامه تعيين
نمود .دستورالعمل هاي ورودي و خروجي مانند cinو
coutدر مورد دادههاي شمارشي نميتوان استفاده نمود.
فصل پنجم
آرایه ها
فهرست مطالب فصل پنجم
.1
.2
آرایه یک بعدی
آرایه دو بعدی ( ماتریس ها )
آرایه یک بعدی
آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر ميباشد كه ميتواند
.چندين مقدا را در خود جاي دهد
كليه عناصر يك آرايه از يك نوع ميباشند.
عناصر آرايه بوسيله انديس آن ها مشخص ميشوند.
در ، ++Cانديس آرايه از صفر شروع ميشود.
کاربرد آرایه ها
آرايهها در برنامهنويسي در مواردي كاربرد دارند كه
بخواهيم اطالعات و دادهها را در طول اجراي
.برنامه حفظ نمائيم
; ]int x[5
x
4
پنجمين عنصر ]x[4
3
2
1
0
اولين عنصر ]x[0
تخصیص مقادیر اولیه به عناصر آرایه :
;}int x[5]= {4, 2, 5, 17, 30
x
30
17
5
2
4
4
3
2
1
0
دریافت مقادیر عناصر آرایه :
;]int x[5
)for(int i=0; i<=4; ++i
; ] cin >> x[ i
نمایش مقادیر عناصر آرایه :
)for(int i=0; i<5; ++i
; ] cout << x[ i
.اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك ،مقدار اوليه صفر ميگيرند
;}int x[5] = {12, 5, 7
x
0
0
7
5
12
4
3
2
1
0
بايستي توجه داشت كه آرايهها به صورت ضمني مقدار اوليه صفر نميگيرند .برنامه نويس بايد به عضو اول آرايه،
مقدار اوليه صفر تخصيص دهد تا عضوهاي باقيمانده بطور اتوماتيك ،مقدار اوليه صفر بگيرند.
; }int x[5] = {0
x
0
0
0
0
0
4
3
2
1
0
دستور زير يك آرايه يك بعدي شش عنصري از نوع floatايجاد مينمايد.
float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9,
; }16.5
x
16.5
5.9
14.2
-17.1
6.3
2.4
5
4
3
2
1
0
عدد اعشاري و مثبت را گرفته تشكيل يك آرايه مي دهد سپس مجموع عناصر آرايه را مشخص100 برنامه ذيل
.نموده نمايش ميدهد
#include <iostream.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++)
tot += x[ j ] ;
cout << tot ;
return 0 ;
}
عدد اعشاري را گرفته تشكيل يك آرايه داده سپس كوچكترين عنصر آرايه را20 برنامه ذيل
.مشخص و نمايش ميدهد
#include <iostream.h>
#include <conio.h>
int main( )
{
float x[20], s;
int j ;
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;
}
.) بصورت صعودي مرتب مينمايدBubble sort( عدد اعشاري را گرفته بروش حبابي100 برنامه زير
#include <iostream.h>
#include <conio.h>
int main ( )
{
float x[100] , temp;
int i,j ;
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 ;
}
آرايههاي دوبعدي (ماتريسها)
ماتريس ها بوسيله آرايههاي دوبعدي در كامپيوترنمايش داده مي شوند.
;]int a[3][4
ستون 3
ستون 2
ستون 1
ستون 0
]a[0][3
]a[0][2
]a[0][1
]a[0][0
سطر 0
]a[1][3
]a[1][2
]a[1][1
]a[1][0
سطر 1
]a[2][3
]a[2][2
]a[2][1
]a[2][0
سطر 2
تخصیص مقادیر اولیه به عناصر آرایه :
; } }int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12
3
2
1
0
4
3
2
1
0
8
7
6
5
1
12
11
10
9
2
int a[3][4]= { {1}, {2,3} , {4,5,6} } ;
0
1
2
3
0
1
0
0
0
1
2
3
0
0
2
4
5
6
0
int a[3][4]= {1, 2, 3, 4,5 } ;
0
1
2
3
0
1
2
3
4
1
5
0
0
0
2
0
0
0
0
در يك آراية دوانديسي ،هر سطر ،در حقيقت آرايهاي يك انديسي است .در
اعالن آرايههاي دوانديسي ذكر تعداد ستون ها الزامي است.
;}int a[ ][4]={1,2,3,4,5
3
2
1
0
4
3
2
1
0
0
0
0
5
1
. را گرفته مجموع عناصر آن را مشخص نموده و نمايش ميدهد4*3 برنامه زير يك ماتريس
#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 ;
}
برنامه که عناصر ماتریس 3*2را از ورودی خوانده و بزرگترین عنصر هر سطر را پیدا کرده و به
همراه شماره سطر آن جاپ نماید.
!...ضدحال
فصل ششم
توابع
فهرست مطالب فصل ششم
.1
.2
.3
.4
.5
.6
تعریف تابع
تابع بازگشتی
توابع درون خطی
انتقال پارامترها از طریق ارجاع
کالس های حافظه ( ) storage classes
سربارگذاری توابع
تعریف توابع
استفاده از توابع در برنامهها به برنامهنويس اين امكان را ميدهد كه
بتواند برنامههاي خود را به صورت قطعه قطعه برنامه بنويسد .تا كنون
كليه برنامههائي كه نوشتهايم فقط از تابع ) (mainاستفاده نمودهايم.
شكل كلي توابع بصورت زير ميباشند :
نوع مقدار برگشتي
لیست پارامتر ها جهت انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شده
return-value-type function-name (parameter)list
{
declaration and statements
نام تابع
}
تعريف اعالنهاي تابع و دستورالعمل هاي اجرائي
.تابع زير يك حرف كوچك را به بزرگ تبديل مينمايد
پارامتری از نوع char
کد حرف کوچک = کد حرف بزرگ// 32 +
یا
نوع مقدار برگشتی
نام تابع
)char low_to_up (char c1
{
;char c2
;c2 = (c1>= a && c1<= z )?(c1 - 32): c1
; )return (c2
}
)if (c1>= a && c1<= z
;c2=c1-32
;else c2=c1
.برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مينمايد
#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;
}
آرگومان
x
‘d’
c1
‘d’
c2
‘D’
. دو مقدار صحيح را گرفته بزرگترين آنها را برمي گرداندmaximum تابع
int maximum(int x, int y)
{
int z ;
z=(x >= y)? x : y;
// if (x>=y) z=x; else z=y;
return z;
}
. جهت یافتن ماکزیمم دو مقدار صحيح استفاده می نماید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;
}
maximum آرگومانهای تابعa, b
a
b
10
15
x
y
10
15
z
15
اسامي پارامترها و آرگومان هاي يك تابع
.ميتوانند همنام باشند
برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسبه نموده نمايش ميدهد.
x!=1*2*3*4*…*(x-1)*x
#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 ;
}
main درn
3
factorial درn
3
factorial درi
2,3,4
factorial درprod
6
وقتي در تابعي ،تابع ديگر احضار ميگردد
بايستي تعريف تابع احضار شونده قبل از تعريف
.تابع احضار كننده در برنامه ظاهر گردد
اگر بخواهیم در برنامهها ابتــدا تــابع main
ظاهر گردد بايستي prototypeتابع يعني
پيش نمونة تابع كه شامل نام تابع ،نــوع مقــدار
برگشتي تابع ،تعداد پارامترهائي را كه تــابع
انتظار دريافت آنرا دارد و انـــــواع پارامترها و
ترتيب قرارگرفتن اين پارامترها را بــــه اطالع
كامپايلر برساند.
در اسالید بعد مثالی در این زمینه آورده شده است.
#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);
}
در صورتي كه تابع مقداري بر نگرداند نوع مقدار برگشتي
تابع را voidاعالن ميكنيم .و در صورتيكه تابع مقداري
را دريافت نكند بجاي parameter- listاز void
يا ( ) استفاده مي گردد.
در اسالید بعد مثالی در این زمینه آورده شده است.
#include <iostream.h>
#include <conio.h>
void maximum(int , int) ;
int main( )
{ int x, y;
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 ;
}
.تابع مقداري بر نمی گرداند
) 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 0;
}
main درa
20
modify درa
20
modify درa
40
: خروجی برنامه
20
40
20
احضار بوسیله مقدار ( ) Call By Value
aدر main
20
aدر modify
20
aدر modify
40
در این نوع احضار تابع حافظ ههاي مورد
استفاده آرگومان ها و پارامترها
از هم متمايزند و هرگونه تغيير در پارامترها
باعـــث تغيـــر
در آرگومان هاي متناظر نميگردد.
>#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 0
}
تابع بازگشتي ()recursive functions
توابع بازگشتي يا recursiveتوابعي هستند كه
وقتي احضار شوند باعث ميشوند كه خود را احضار نمايند.
نحوه محاسبه فاکتوریل از طریق تابع بازگشتی
n != 1*2*3*…*(n-1) *n
! f(n) = n
اگر n=1/ n=0
در غير اينصورت
1
)n *f(n-1
= )f(n
)n!= 1* 2* 3* … *(n-2
*(n-1) *n
n!=(n-1)! *n
در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
تابع بازگشتی محاسبه فاکتوریل
#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) ) ;
}
نحوه محاسبه nامین مقدار دنباله فیبوناچی از طریق تابع بازگشتی
:دنباله فیبوناچی … 0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34,
اگر 1
n=1
اگر 1
n=2
در غير اينصورت
در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
)fib(n-1)+fib(n-2
= ) =fib(nجمله nام
.) را مشخص و نمايش ميدهدfibonacci( امين مقدار دنبالة فيبوناچيn برنامهزير
#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==0) return 0;
else
if(n = = 1 || n= = 2)
return 1 ;
else
return(fib(n-1) + fib(n-2) ) ;
}
.برنامه زير يك خط متن انگليسي را گرفته آن را وارون نموده نمايش ميدهد
# include <iostream>
# include <conio.h>
using namespace std;
void reverse(void) ; // forward declaration
int main( )
{
reverse( ) ;
getch();
return 0 ;
}
void reverse(void)
// read a line of characters and reverse it
{
char c ;
if( (c=cin.get()) != '\n')
reverse( );
cout << c ;
return ;
}
انتقال پارامترها از طريق ارجاع
تاكنون وقتي تابعي را احضار ميكرديم يك كپي از مقادير آرگومان ها درپارامترهاي متناظر
قرار ميگرفت .این روش احضار بوسيله مقدار يا call by valueناميده شد.
در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومان ها و پارامترهاي متناظر
بصورت اشتراكي مورد استفاده قرار ميگيرد .اين روش call by reference
ناميده ميشود .
انتقال پارامترها از طريق ارجاع
در اين روش پارامترهائي كه از طريق call by referenceعمل مينمايند در
پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده ميشود.واضح است
كه در تعريف تابع نيز بهمين طريق عمل ميشود.
#include <iostream.h>
int vfunct(int);
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)
x
y b
{
b *= b ;
10
5
}
100
: مثال
x
y
5
10
5
خروجی:
2
. تغییر نمی کندx مقدار آرگومان
5
0
5
1
: ادامه خروجی
100
نکته :
call
وقتي پارامتري بصورت by
referenceاعالن ميگردد اين بدان معــني
است كه با تغيير مقدار اين پارامتر در تابع احضار
شده مقدار آرگومان متناظر نيز تغيير مينمايد.
. دو مقدار اعشاري را مبادله مينمايد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;
}
توابع درون خطي ()inline
كلمه inlineبدين معني است كه به كامپايلر دستور ميدهد كه
يك كپي از دستورالعمل هاي تابع در همان جا (در زمان مقتضي)
توليد نمايد تا از احضار تابع ممانعت بعمل آورد.
اشکال توابع inline
بجاي داشتن تنها يك كپي از تابع ،چند كپي از دستورالعمل هاي تابع در
برنامه اضافه ميشود كه باعث بزرگ شدن اندازه يا طول برنامه ميشود.
بنابراين از inlineبراي توابع كوچك استفاده ميگردد.
مثالی از توابع درون خطی
#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 ;
}
كالسهاي حافظه ()storage classes
متغيرها بدو طريق متمايز مشخص ميشوند يكي بوسيله نوع ( )typeآن ها و ديگري بوسيله
كالس حافظه آن ها .نوع متغير قبًال اشاره شده بعنوان مثال . . . ، int ، float ، doubleولي
كالس حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مينمايد.
در اسالید بعد به انواع کالس حافظه می پردازیم.
:بطور كلي كالس حافظه متغيرها به چهار دستة تقسيم ميگردد
.1
.2
.3
.4
automatic
static
external
register
متغيرهاي automaticدر درون يك تابع تعريف ميشوند و در تابعي كه اعالن ميشود
بصورت متغيرهاي محلي براي آن تابع ميباشند .حافظه تخصيص داده شده به
متغيرهاي automaticپس از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و
دامنة متغيرهاي از نوع automaticتابعي ميباشد كه متغير در آن اعالن گرديده است.
متغيرهاي staticنيز در درون توابع تعريف مي شوند و از نظر وسعت و دامنه شبيه
متغيرهاي automaticهستند ولي در خاتمة اجراي تابع ،حافظه وابسته به اين نوع
متغيرهـــا از بين نميرود بلكه براي فراخواني بعدي تابع باقي ميماند.
و به دودسته تقسیم می شوند
-1متغیر های استاتیک محلی
-2متغیر های استاتیک عمومی
مقدار اولیه متغیرهای استاتیک محلی و عمومی صفر است.
در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.
• فقط در همان تابعی که تعریف می شوند قابل استفاده اند.
• هنگام فراخوانی تابع ایجاد می شوند و به هنگام خروج تابع ،آخرین مقدار
خودشان را حفظ می کنند.
•فقط یک با مقدار اولیه می گیرند.
در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.
: مثال
#include <iostream.h>
#include <conio.h>
Void test(void);
int main( )
{
Int i;
For (i=0 ; i<5; i++)
test();
return 0 ;
}
Void test(void)
{
Static int y=0;
Int x=0;
Cout<<“\n outo x= “<<x<<“, static y=“<<y;
X++;
Y++;
}
: مثال
#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
ندهيم مقدار صفر بصورت
اتوماتيك براي آنها در نظر گرفته
.ميشود
متغيرهاي از نوع externalمتغيرهائي هستند كه در بيرون از توابــع اعالن مي شــوند و وســعت و
دامنه فعاليت آنها كليه توابعي ميباشد كه در زير دستور اعالن متغير قرار دارد.
در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.
#include <iostream.h>
External int w; // external variable
functa(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
تخصيص ندهيم مقدار صفر
بصورت اتوماتيك براي آنها در نظر
.گرفته ميشود
وقتي متغيري از نوع registerاعالن ميشــود از كامپيوتر عمًال درخواســت
ميشود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد.
کاربرد کالس register
معموًال از نوع رجيستر براي شاخصهاي دستور تكرار و يا انديس هاي آرايهها
استفاده ميشود .بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده
دردستور cinنميباشند
;register int i
)for(i=1;i<=10;i++
;”cout<<“hi
سربارگذاري توابع ()function overloading
در ++Cاين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام
استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند( .از
نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها)
: مثال
#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 ;
}
برنامه ای که با استفاده ار تابعی به نام ، )(Square
مربع یک عدد را محاسبه می کند
دقت شود این برنامه باید بتواند مربع یک عدد صحیح و اعشاری را با استفاده
از توابع سرباگذاری محاسبه نمایید.
تمرین
.1
.2
.3
.4
برنامه ای بنویسید که 3عدد اعشاری را خوانده و به تابعی ارسال کند و تابع
میانگین آن ها را محاسبه کرده و برگرداند.
برنامه ای که ضرایب معادله ی درجه دومی را خوانده ،آن ها را به تابعی ارسال کند.
تابع معادله را حل کند و جواب ها را در خروجی چاپ کند( .تابع جواب ها را به تابع
اصلی برنمی گرداند).
برنامه ای بنویسید که عددی را از ورودی خوانده و هریک از ارقام آن را در یک سطر
چاپ کند .تفکیک و چاپ ارقام توسط تابع بازگشتی صورت گیرد.
برنامه ای بنویسید که حاصلضرب دو عدد صحیح را به کمک جمع کردن محاسبه
کند .برای این کار از تابع بازگشتی استفاده کنید.
= a×b
a
a×(b-1)+a
اگر b=1
اگر b>1
1
# include <iostream>
# include <conio.h>
using namespace std;
float average(float a, float b, float c){return
((a+b+c)/3);}
void main()
{
float x, y, z;
cin>>x>>y>>z;
cout<<average(x,y,z);
getch();
}
# include <iostream>
# include <conio.h>
# include <math.h>
using namespace std;
void f(int a, int b, int c){
float delta = (b*b)-(4*a*c);
if(delta == 0)
cout<<"The only answer:n"<<"x= "<<(-b)/(2*a);
else if(delta > 0)
{
cout<<"Two answers:n"<<"x1= "<<(-b+sqrt(delta))/(2*a);
cout<<"x2= "<<(-b-sqrt(delta))/(2*a);
}
}
void main() {
2
float x, y, z;
cin>>x>>y>>z;
f(x,y,z);
getch();
}
# include <iostream>
# include <conio.h>
# include <math.h>
using namespace std;
void f(int a)
{if (a>10) f(a/10);
cout<<(a%10)<<endl;
}
void main()
{
int n;
cin>>n;
f(n);
getch();
}
3
4
# include <iostream>
# include <conio.h>
# include <math.h>
using namespace std;
int f(int a,int b)
{if (b==1) return a;
return (f(a,b-1)+a);
}
void main()
{
int n,m;
cin>>n>>m;
cout<<f(n,m);
getch();
}
فصل هفتم
ساختار ها و اشاره گرها
فهرست مطالب فصل هفتم
.1ساختارها
Union .2ها
.3اشاره گرها ( )Pointer
.4تعریف آرایه
.5آرایه های دو بعدی و اشاره گرها
.6تخصیص حافظه بصورت پویا ( عملگر ) new
.7رشته ها و توابع مربوطه
ساختارها
ساختارها شبيه آرايهها بوده بدين صورت كه يك نوع داده گروهي است كه فضاي
پيوسته از حافظه اصلي را اشغال مينمايد .اما عناصر ساختار الزامًا از يك نــوع
نميباشند بلكه اعضاي يك ساختار ميتوانند از نوعهاي مختلف از قبيــل char ،
… ، int ، floatباشند.
تعريف ساختار
نام ساختار
struct time
{
int hour ; // 0 – 23
int minute ; // 0 –
59
int second; //
};
اعضا ساختار
:مثال
{ struct account
; int acc_no
;char acc_type
; ]char name[80
; float balance
;}
ساختار accountداراي چهار عضو ميباشد.
acc_noشماره حساب از نوع int
acc_typeنوع حساب از نوع char
مشخصات صاحب حساب از نوع رشتة 80كركتري
name
balanceمانده حساب از نوع float
: به دو صورت می توان اعالن یک متغیر از نوع ساختار را نمایش داد
روش اول:
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;
به ساختارها ميتوان مقدار اوليه نيز تخصيص داد
;}account cust = {4236, r, Nader Naderi , 7252.5
دسترسي به عناصر يك ساختار
.
بمنظور دسترسي به عناصر يك ساختار از عملگر استفاده
.ميگردد .عملگر .جزء عملگرهاي يكتائي ميباشد
: مثال
cust .acc_no = 4236;
cust .acc_type = r;
cust . name = Nader Naderi;
cust . balance = 7252.5;
نکته:
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.month
x.lastpay.year
.مشخص ميگردد
:نکته
ميتوان آرايهاي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.
{ struct struc1
;]char name[40
;int pay1
;int pay2
;}
struc1 cust[ ]= {nader, 3000 , 40000,
sara, 4200, 6000,
susan, 3700, 25000,
;} saman, 4800 , 2000,
دو عدد مختلط را ميگيرد و،برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته
مجموع آن ها را مشخص و نمايش ميدهد.
#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 ;
}
union
unionاز نظر ساختاري شبيه structميباشد .با اين تفاوت كه
عضوهائي كه تشكيل unionميدهد همگي از حافظه مشتركي در كامپيوتر
استفاده مينمايند .بنابراين استفاده از unionباعث صرفهجوئي در حافظه
ميگردد.
مثال :
union id
{
;]char color [10
;int size
;} x , y
هر كدام از متغيرهاي xو yيك رشــته
10كركتري يا يك مقــدار از نــوع int
ميباشد وكامپيوتر يك بلوك حافظه كه
بتواند رشته 10كركتري رادر خود جاي
دهــد ،بــراي colorو sizeدر نظر
ميگيرد.
: مثال
union xpq
{
int x ;
char y[2] ;
}p;
x
¹Á{d ËZ]
µÁY
d
] ËZ
y[1]
y[0]
تمرین:
برنامه اي بنويسيم كه يك دفترچه تلفن 20تايي (ظرفيت پذيرش 20نام و شماره تلفن را
داشته باشد)و امكان جستجو در آن را بر اساس نام فرد ايجاد نمايد.
اشارهگرها ()Pointers
دادههائي كه در كامپيوتر در حافظــه اصــلي ذخــيره ميشــوند
بايتهاي متوالي از حافظه بسته به نوع dataاشغال ميكنند.
نوع داده
حافظه الزم
مقادير
2بايت
32767تا –32768
4بايت
2147483647تا –2147483648
1بايت
يك كاركتر
char
4بايت
3.4e38تا 1.2e-38
float
8بايت
1.8e308تا 2.2e-308
int
long int
double
اشارهگرها ()Pointers
با داشتن آدرس داده در حافظة اصلي ميتــوان براحــتي بــه آن داده
دسترسي پيدا نمود و از طرف ديگر آدرس هر داده در حافظــه آدرس
بايت شروع آن داده ميباشد.
= int x
;613
0
1
2
3
4
5
6
7
613
نکته :
در كامپيوتر آدرسها معموًال دو بايت اشغال مينمايند .اگر آدرس xرا در pxقرار دهيم آنگاه ميگوئيم كه pxبه
xاشاره مينمايد.
x
px
آدرس متغير xرا بوسيله & xنشان ميدهيم و عملگر & را عملگر آدرس مينامند.
int x , *px
;X=54
; px = &x
:مثال
; int y , x , *px
x
px
26
حال اگر دستور العمل ; x += 10را بدهيم:
x
px
36
حال اگر دستورالعمل * ; px = *px + 7بدهيم.
x
43
px
; x = 26
; px = &x
آرایه یک بعدی و اشاره گرها
اولين عنصر آرايه بوسيله ] x[0مشخص ميشود.
آدرس اولين عنصر آرايه بوسيله &] x[0يا بوسيله xمشخص ميشود.
يشود.
آدرس iامين عنصر آرايه بوسيله &] x[iيا بوسيله ( )x+iمشخص م
دو دستورالعمل زير با هم معادلند .
از طرف ديگر اگر داشته باشيم
دو دستورالعمل زير معادلند.
; x[ i ] = 82.5
*(; 82.5 = )x + i
];float x[10
;float *p
]; p = &x[2
; p= x + 2
0 26.5 x
1
24.7
2
5.8
3 -73.2
4 69.0
5 100.5
6 -13.24
7 424.3
8 187.8
9 358.2
ساختارها و اشاره گرها
ميتوان اشارهگري را تعريف نمود كه به اولين بايت يك ساختار ( )structاشاره نمايد.
x
int
fl o a t
ch a r
int
struct
struc1
{
px
a
b
c
d
; int a
float
;b
char
;c
; int d
=}
x, &x
; ;*px
px
عبارت x.aمعادل pxaمعادل (* a.)pxميباشد.
استفاده از آرايهها بعنوان پارامتر تابع مجاز است.
در اسالید بعد به یک مثال توجه نمایید.
در برنامه زير تابع modifyآرايه aرا بعنوان پارامتر ميگيرد.
:خروجی
1
2
3
4
5
3
4
5
6
7
3
4
5
6
7
>#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(int 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(int j=0; j<5; ++j
; cout << a[ j ] << endl
; return
}
نکته :در این مثال از فراخوانی با مقدار استفاده نشده است .برای همین
تغییرات انجام شده در تابع )(modifyباعث تغییر در مقادیر ارایه
در تابع اصلی یا )(mainشده است .این مبحث ،تحت عنوان
فراخوانی از طریق ارجاع در ادامه توضیح داده می شود.
در صورتيكه آرايه بيش از يك بعــد داشــته باشــد
بعدهاي دوم به بعد بايستي در تعريف تــابع و پيش
نمونه تابع ذكر گردد.
در اسالید بعد به یک مثال توجه نمایید.
#include <iostream.h>
void printarr(int [ ][ 3 ]);
int main( )
{
,
int arr1 [2][3] = { {1,2,3}, {4,5,6} } arr2 [2][3]= {1,2,3,4,5}
};
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 ;
}
}
, arr3 [2][3]={ {1,2}, {4}
1
4
2
5
3
6
1
4
2
5
3
0
1
4
2
0
0
0
: خروجی
آرايههاي دوبعدي و اشارهگرها
يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي ميتوان تعريف نمود.
اگر xيك ماتريس 5سطري و 4ستوني از نوع اعشاري باشد قبًال اين ماتريس را با
];float x[5][4
معرفي كرديم .حال با استفاده از اشارهگرها بصورت زير معرفي نمائيم:
;]float (*x)[4
آرايههاي دوبعدي و اشارهگرها
;]float (*x)[4
آرايه يك بعدي اول
x
آرايه يك بعدي دوم
()x+1
آرايه يك بعدي سوم
()x+2
آرايه يك بعدي چهارم
()x+3
آرايه يك بعدي پنجم
()x+4
. ايجاد شده و مقادير عناصر آرايه را به چهار طريق نمايش ميدهدint عنصري از نوع5 در برنامه زير يك آرايه
#include
<iostream.h>
int main( )
{
int x[ ]={12, 25, 6, 19, 100}, i;
int *px=x; // اشاره به عنصر اول آرايه مينمايد،نام آرايه بدون انديس
for(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; }
تخصيص حافظه به صورت پويا يا (عملگر )new
از عملگر newبراي تخيصيص حافظه به صورت پويا
می توان استفاده نمود ،در ضمن ميتوان براي بلوكي
از حافظه كه تخصيص يافته مقدار اوليه تعیین نمود.
براي تخصيص حافظه باندازه 20مقدار از نوع intكه اشارهگر ptxبه آن اشاره نمايد بصورت زير عمل ميشود.
;int *ptx
;]ptx = new int [20
ptxبه اولين داده از نوع intاشاره مينمايد.
ptx+iبه i+1امين عنصر از فضايپيوسته اشاره مينمايد.
سپس آن را مقدار داده و مجموع مقادير، عنصري از نوع اعشاري در حافظه ايجاد نموده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;
}
. عنصري از ساختار را ايجاد مينمايدn برنامه زير آرايههاي
#include
#include
int main( )
{
struct rec
{
<iostream.h>
<conio.h>
float a;
int b;
};
int n;
rec *ptr;
cout << "how many records? \n";
cin >> 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;
getch();
return 0;
}
. جابهجا مينمايد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;
}
برنامه ای که تعداد nعدد را از ورودی خوانده ،در آرایه ای قرار می دهد و سپس آرایه را
به تابعی ارسال می کند .تابع تعداد اعداد زوج و فرد را نمایش دهد.
رشتهها و توابع مربوطه
رشتهها در ، ++Cآرايهاي از كركترها ميباشند كه با كركتر \0ختم مي شوند.
char name[ ]=
;sara
s
a
r
a
\0
مقداردهی اولیه به رشته
رشته و اشاره گر
هر رشته از طريق اشارهگري به اولين كركتر آن در دسترس قرار ميگيرد .آدرس يك رشته ،آدرس كركتر
اول آن ميباشد .به رشتهها ميتوان مقدار اوليه تخصيص داد.
;*name = sara
char
تابع )strcmpi(s1, s2
رشتههاي s1و s2را با هم مقايسه نموده (بدون توجه به حروف كوچــك و بــزرگ) اگر
رشته s1برابر با رشته s2باشد مقدار صفر و اگر رشته s1كوچكتر از رشته s2باشــد
يك مقدار منفي در غير اينصورت يك مقدار مثبت بر ميگرداند.
= ]char *s1= "ALI"; // char s1[10
;""ALI
;"char *s2="ali"; //char s2[10]="ali
;cout << strcmpi(s1, s2) << endl
0
تابع ) strcmp(s1, s2
رشتههاي s1و s2را با هم مقايسه نموده اگر s1برابر با s2باشد مقدار صـــفر و اگر
رشته s1كوچكتر از رشته s2باشد يك مقدار منفي در غــير اينصــورت يك مقــدار
مثبت برميگرداند.
;"char *s1= "ALI
;"char *s2="ali
;"char s1[10]= "ALI
;"char s2[10]="ali
-1
;cout << strcmp(s1, s2) << endl
تابع ) strncmp(s1, s2,n
حداكثر nكركتر از رشتة s1را با nكركتر از رشتة s2مقايسه نمــوده در صــورتيكه
s1كوچكتر از s2باشد يك مقدار منفي ،اگر s1مساوي با s2باشد مقــدار صــفر در
غير اينصورت يك مقدار مثبت برميگرداند.
0
32
;"char *s1= "ali reza
;"char *s2="ali
;"char s1[10]= "ali reza
;"char s2[10]="ali
<< )cout << strncmp(s1, s2,3
;endl
;"char *s1= "ali reza
;"char *s2="ali
;"char s1[10]= "ali reza
;"char s2[10]="ali
<< )cout << strncmp(s1, s2,4
;endl
تابع (strcat(s1, s2
دو رشتة s1و s2را بعنوان آرگومان گرفته رشتة s2را به انتهاي رشــتة s1اضــافه
مينمايد .كركتر اول رشتة s2روي كركتر پاياني \0رشتة s1نوشته ميشود ونهايتًا
رشتة s1را برميگرداند.
ali reza
;" s1[20]= "ali
;"*s2="reza
;"s2[20]="reza
;<< strcat(s1, s2) << endl
char
char
char
cout
تابع (strncat(s1, s2,n
دو رشت ه s1و s2ومقدار صحيح و مثبت nرا بعنــوان آرگومان گرفتــه ،حــداكثر n
كركتر از رشتة s2را در انتهاي رشت ة s1كپي مينمايد .اولين كركتر رشــته s2روي
كركتر پاياني \0رشتة s1مينويسد ونهايتًا مقدار رشتة s1را برميگرداند.
ali re
;" char s1[20]= "ali
;"char *s2="reza
;"char s2[20]="reza
<< )cout << strncat(s1, s2,2
;endl
strlen(s( تابع
. را بعنوان آرگومان گرفته طول رشته را مشخص مينمايدs رشتة
char *s1= "ali";
char s1[10]= "ali";
cout << strlen(s1);
char *s1= "ali ";
char s1[10]= "ali ";
cout << strlen(s1);
3
4
strcpy(s1,s2) تابع
كپي مينمايد وs1 را در رشتةs2 را بعنوان آرگومان گرفته رشتةs2 وs1 دو رشتة
. را بر ميگرداندs1 نهايتًا مقدار رشتة
char
char
char
cout
s1[20]= "ali ";
*s2="reza";
s2[10]="reza";
<< strcpy(s1, s2) << endl;
char
char
char
cout
s1[20];
*s2=“ali";
s2[10]=“ali";
<< strcpy(s1, s2) << endl;
reza
ali
strncpy(s1, s2,n( تابع
n حداكثر، را بعنوان آرگومان گرفتهn و مقدار صحيح و مثبتs1 , s2 دو رشتة
. را برميگرداندs1 نهايتًا مقدار رشتة، كپي نمودهs1 در رشتةs2 كركتر را از رشتة
char s1[20]= "ali ";
char *s2="reza";
char s2[10]="reza";
cout << strncpy(s1, s2,3) <<
endl;
char s1[20];
char *s2=“amir ali";
char s2[10]=“amir ali";
cout << strncpy(s1, s2,4) <<
endl;
rez
amir
براي استفاده از توابع مربوط به
رشتهها بايستي حتمًا در ابتدا برنامه
>include <string.hرا
قرار دهيم.
#
. رشته در نظر گرفته آن ها را بترتيب حروف الفباء مرتب نموده نمايش ميدهد5 برنامه ذيل پنج اسم را بصورت
using namespace std;
#include<iostream>
#include<conio.h>
#include<string.h>
void sort(char name[][10])
{char t[10];
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
strcpy(t,name[i]);
strcpy(name[i] , name[j]);
strcpy(name[j] , t) ;
}
}
void main()
{
char name[5][10] = {"sara", "afsaneh", "babak", "saman", "naser" };
sort(name);
// display sorted strings
for(int i=0; i<5; ++i)
cout << name[i] << endl;
getch();
}
: مثال
using namespace std;
#include<iostream>
#include<conio.h>
#include<string.h>
int main( )
{
char s1[20]= "happy birthday";
char s2[20]= "happy holidays";
cout << strcmp(s1, s2) << endl;
cout << strncmp(s1, s2, 7) << endl ;
getch();
}
-1
-6
: مثال
using namespace std;
#include<iostream>
#include<conio.h>
#include<string.h>
int main( )
{
char s[10] = "sara";
cout << strlen(s);
getch();
}
4
. می باشد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]);
}
برنامه ای بنویسید که رشته ای را از ورودی خوانده ،تمام حروف کوچک آن
رشته را به حروف بزرگ تبدیل کرده و چاپ می کند.
• توضیح :در این برنامه از تابعی به نام )(upperاستفاده کنید که در
این تابع باید عملیات تبدیل را انجام دهد
• نکته :تفاوت کد اسکی حروف کوچک و بزرگ 32واحد است برای
تبدیل ‘ ’aبه ‘ ’Aکافی است از ‘ ’aبه اندازه 32واحد کم کنید.
برنامه ای بنویسید که رشته ای را که به نقطه ختم می شود را از ورودی
خوانده ،کاراکتر های موجود در رشته را به همراه تعداد دفعات تکرار آنها
به خروجی ببرد
فصل هشتم
برنامه نویس شی گرا
فهرست مطالب فصل هشتم
.1تعریف شی گرایی
.2چند ریختی ()polymorphism
.3خاصیت ارث بری
.4پشته ()stack
.5ایجاد شی
.6ارث بری
.7سازنده ها و نابود کننده ها
.8توابع دوست
.9کالس های دوست
.10توابع سازنده پارامتر دار
.11توابع سازنده یک پارامتری
.12
.13
.14
.15
.16
.17
.18
.19
.20
.21
عضوهای static
کالسهای تودرتو
کالس های محلی
استفاده از objectها بعنوان
پارامترهای تابع
برگشت اشیاء
انتساب اشیاء
آرایه اشیاء
اشاره گر به اشیاء
اشاره گر this
توابع مجازی و پلی مرفیسم
تعریف شی گرایی
برنامه نويسي شئ گرا يا oopيك روش جديد برنامه
نويسي ميباشد كه در آن از ويژگي
ساختيافته همراه با چند ويژگيهاي قوي جديد استفاده
ميشود .زبان برنامه نويسي ++Cامكان استفاده از oop
را به راحتي فراهم مينمايد.
نوع داده انتزاعی
•برنامه ها برای حل مسائل دنیای واقعی نوشته می شوند ،مثل نگهداری
اطالعات مربوط به دانشجویان ،نگهداری اطالعات مشتریان بانک ها .
•گر چه می توان بسیاری از مسئله های دنیای واقعی را با استفاده از انواع
اولیه حل کرد ،اما با تعریف انواع جدیدی که بتوان اشیای دنیای واقعی ،مثل
دانشجویان را مدلسازی کنند ،حل مسائل راحتر خواهد بود
•در زبان برنامه نویسی شی گرا امکان تعریف انواع جدید وجود دارد
•در زبان برنامه نویسی ++Cبرای تعریف نوع جدید ،از کالس ها استفاده
می شود
کالس ها و اشیا
•کالس ها نوع جدیدی است که برنامه نویس آن را برای حل مسئله های
دنیای واقعی تعریف می کند ،
•کالس ها حاوی داده ها و تعریف عملیات است
•داده های عضو کالس را فیلد یا صفت می گویند.
•عملیات کالس ها را تابع یا متد می نامند.
•شی یک نمونه از کالس است که در تکنیک برنامه نویسی شی گرا یک نهاد
زمان اجرا می باشد.
نکته مهم :
تمام زبانهاي برنامه نويسي شيگرا داراي سه
خصوصيت مشترك زير ميباشند :
الف( encapsulation :محصورسازي)
ب( polymorphism :چندريختي)
ج( inheritance:ارث بري)
محصورسازی () Encapsulation
محصور سازی یا بسته بندی به معنای این است که تمام جنبه های یک نهاد در داخل یک کالس جمع
آوری و از سایر نهاد ها تفکیک می شود .بسته بندی ،مانع از این می شود که داده ها یک شی،
توسط متد های شی دیگری دستیابی شود.
( polymorphismچند ريختي)
چند ریختی به معنای این است که نهادی مثل متغیر ،تابع ،شی ،معانی
یا کاربردهای مختلفی داشته باشند .به عنوان مثال توابع همنام نوعی
چند ریختی محسوب می شوند.
( inheritanceارث بري)
ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectميتواند
خاصيتهاي شي ديگري را دارا شود.
تعریف کالس و اشیادر ++c
نام کالس Class
{
داده ها توابع اختصاصی
Public :
داده ها و عمومی
Private :
داده ها و توابع اختصاصی
Protected:
داده ها و توابع محافظت شده
;اشایی از کالس }
مثال
دستیابی به اعضای یک کالس
برای دستیابی به اعضای یک کالس از (نقطه) به صورت زیر استفاده می شود.
نام عضو کالس .نام شی کالس
امکان پذیر نیست em1.name
)(Em1.putname
امکان پذیر نیست )(Em1.age
برنامه ای که طول و عرض مستطیلی را از ورودی خوانده ،مساحت و محیط آن را به
خروجی می برد
برنامه ای با استفاده از کالس ها بنویسید که عددی را از ورودي گرفته و فاكتوريل آن را محاسبه
ونمايش ميدهد.
پشته ()stack
پشته ساختاري است كه داراي خاصيت last in first outميباشد .پشته فضاي پيوسته در
حافظه اشغال مينمايد .عملياتي كــه روي پشته انجام ميشوند عبارتند از :
الف ،push :كه باعث ميشود يك عنصر وارد پشته شده.
ب ، pop :كه باعث ميشود يك عنصر از پشته خارج گردد.
ايجاد شي ()object
بمنظور ايجاد يك شي بايستي از كلمــة رزروشــده
classاستفاده نمود class .از نظر ظاهر شبيه
ساختار يا structميباشد .پشته را بعنوان يك
objectميتوان در نظر گرفت كه dataآن
شامل يك آرايه و يك ، tosو عملياتي كه روي
اين objectانجام ميشود عبارتست از push،
initialize ، popكردن پشته.
در اسالید بعد مثالی از نحوه ایجاد شی آورده شده
است.
مثال :
#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نباشــند غــير قابــل
دسترســي هســتند .و اين يكي از
روشهاي محصــــور سازي اقالم
دادههاست.
بدين معني است كه بوسيله ساير
قطعات برنامــه قابــل دسترســي
ميباشد.
;}
نکته :
فقط توابع عضــو ميتواننــد بــه متغيرهاي عضــو از نــوع private
دسترسي داشته باشند .بايستي توجه داشت كه اگر نــوع عضــوي
مشخص نگردد آن عضو به صورت اتوماتيك privateمی باشد.
نحوه تعریف تابع عضو یک کالس
)void stack : : push(int i
{
{ ) if(tos = = SIZE
;cout << stack is full.
;return
}
; stck[tos]= i
; tos ++
}
عملگر : :مشخص مينمايد كه تابع متعلق به كدام objectميباشد .عملگر : :عملگر
scope resolutionناميده ميشود.
: 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 empty. ;
return 0 ; }
tos - - ;
return stck[tos];
}
int main( )
{
stack st1, st2; // create two objects
st1. 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; }
سازندهها و نابودكنندهها ()constructors and destructors
يا مقدار اوليه دادن بصورت اتوماتيك از طريق تــابعي انجام
Initialization
ميشود بنام تابع constructorيا تابع سازنده .تابع سازنده تــابع مخصوصــي
است كه عضوي از كالس بوده و همنام با كالس ميباشد.
سازندهها و نابودكنندهها ()constructors and destructors
تابع نابود كننده يا ، destructorعكس عمل تــــابع سازنده را انجام
ميدهد .وقتي كه شياي از بين ميرود بصورت اتوماتيك تابع نابود كننــده
آن فراخواني ميگردد.
)constructors( سازندهها
سازندهها با پارامتر ()constructors
مثال از سازنده با یک پارامتر
توابع دوست کالس
همانطورکه گفته شد تابعی که عضو کالس نباشد ،نمی تواند به اعضای
اختصاصی آن کالس دستیابی داشته باشند
برای اعالن تابع دوست ،باید الگوی آن را در داخل کالس قرار دهید و
کلمه کلیدی Friendرا قبل از آن ذکر کنید.
برنامه ای که با استفاده از تابع دوست دوعدد را با هم جمع و تفریق می کند
مثال :تابع دوست دو کالس
مثال :کالس های دوست
کالس های را می توان دوست کالس های
دیگر معرفی کرد .دراین حالت ،کالس
دوست و تمام توابع عضو آن به اعضای
اختصاصی کالس دیگر دسترسی دارند
برنامه ای که با استفاده از کالس دوست ،بین
دو عدد کوچکترین را پیدا می کند.
اعضای کالس با ویژگی static
در بعضی از مواقع ،فقط یک کپی از یک متغیر باید بین تمام اشیای
یک کالس مشترک باشد .کلمه کلیدی staticبرای این منظور به
کار می رود.
وقتی کلمه کلیدی staticرا با اعضای داده ای کالس به کار می بریم ،
به کامپایلر می گوییم که فقط یک کپی از آن متغیر وجود خواهد
داشت و تمام اشیای آن کالس ،آن متغیر را به اشتراک می گذارند.
مثال :اعضای کالس با ویژگی static
برنامه ای که کاربرد و اثر عضو داده ای
staticرا نشان می دهد.
انتساب اشياء ()object assignment
در صورتيكه دو تا objectاز يك نوع باشند
ميتوان يك objectرا بديگري انتساب نمود.
در اسالید بعد مثالی آورده شده است.
: مثال
#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 ;
}
مثال :آرایه ای از اشیا
اشاره گر به کالس Pointers to Classes
• اشاره گرها همانطور که می توانند به متغیرها اشاره کنند ،می توانند
به اشیاء یک کالس نیز اشاره کنند و چون شی نمونه ای از کالس
است پس به کالس اشاره می کنند .
• در حالت ساده برای دسترسی به اعضای کالس توسط شی تعریفی،
از نقطه ( ).استفاده کردیم .اما در اشاره گر به شی باید از ترکیب 2
کاراکتر خط و بزرگتر (< )-استفاده کنیم .با هم مثالی کامل از
اشاره گر به شی یا همان کالس را بررسی می کنیم :
مثال :اشاره گر به کالس
برنامه ای که نام ،شماره دانشحویی و معدل تعداد 15دانشجو را از ورودی خوانده در آرایه ای از
اشیا قرار داده و سپس دانشجویی که بیشترین معدل را دارد نمایش دهد.
ارث بری
ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectميتواند
خاصيتهاي شي ديگري را دارا شود.
کالس های پايه و مشتق شده
• چند کالس ممکن است خصوصيات و رفتارهای مشترکی داشــته باشــند
اما هريک شامل خواص و توابع ديگری هم باشد .وراثت اجازه می دهـــد
يک کالس عمومی تعريف شــود که اشــيا درخصوصــيات آن مشــترک
هستند و اين کالس می تواند توسط ساير کالس ها ارث بـــرده شـــود و
خواص جديدی به آن اضافه شود بدون اينکه تاثيری روی کالس عمومی
داشته باشد.
• وراثت شباهت بين دو کالس را با استفاده از مفاهيم کالس پايه baseو
کالس مشتق شده derivedبيان می کند .کالسی که از آن ارث بــری
می شود کالس پايه يا مبنا و کالس وارث که خصوصيات کالس پايه را
به ارث می برد را کالس مشتق شده می نامند .کالس پايه شــامل کليه
خواص و رفتارهائی است که بين کالس های مشتق شده مشترک است.
مثال:
• مثال .کالس پايه shapeرا درنظر بگيريد که دارای خاصيت های اندازه،
رنگ و موقعيت است .هر شکل می تواند رسم شود ،پاک شـــود ،حرکت
کند و رنگ شود .هر کدام از اشکال دارای خواص و رفتارهای اضافه تری
هستند .برای يک شکل معين بعضی رفتارها ممکن است متفــاوت باشــد
مثال محاسبه مساحت.
• نکته .يک کالس متشق شده به نوبه خود می تواند کالس پايه برای
ساير کالس ها باشد.
نکته .اگر کالس پايه تغيير کند کالس مشتق شده نيز تحت تاثير اين
تغييرات قرار می گيرد.
تعريف کالس مشتق شده
• فرم کلی تعريف يک کالس مشتق شده به صورت زير است:
class derived : access base
{
;//members of new class
}
derivedنام کالس جديد است که از کالس پايه baseمشتق شده است.
قسمت accessاختياری است ولی می تواند public، privateيا
protectedباشد و برای تعيين مجوز دسترسی اعضای کالس پايه در
کالس جديد بکار می رود .اگر مجوز دسترسی ذکر نشود به اين معنی
است که کليه اعضای عمومی کالس پايه در کالس مشتق شده به
صورت خصوصی خواهند بود.
مثال .کالس جديد Derivedاز کالس Baseمشتق شده است .در برنامه اصلی تppابع change
از کالس Derivedفراخوانی شده که خود دو تابع setو readاز کالس Baseرا صدا می زند.
مثال:
پروژه
کالسی به نام tictacتعریف کنید که با آن بتوانید دوزبازی انجام دهیــد
این کالس حاوی یـــک آرایـــه دوبعـــدی 3 *3از نـــوع صـــحیح
است .سازنده کالس باید عناصر آرایــه را برابــر صــفر قرار دهــد .دو
بازیکن ،بازی می کنند .بازیکن اول عــدد 1را در قرار می دهــد و
بازیکن دوم عدد 2را در مربعی قرار می دهد .حرکت ها بایــــد در
خانه های خالی انجام شود .پس از هر حرکت کنترل می کنیــد که
آیا کسی برنده شده است یا خیر .برنامه باید نــوبت را رعایت کنــد
مشخص کند که کدام بازیکن باید اول شروع کند.
keywords and alternative tokens.
asm
enum
protected
typedef
auto
explicit
public
typeid
bool
extern
register
typename
break
false
reinterpret_cast
union
case
float
return
unsigned
catch
for
short
using
char
friend
signed
virtual
class
goto
sizeof
void
const
if
static
volatile
const_cast
inline
static_cast
wchar_t
continue
int
struct
while
default
long
switch
xor
delete
mutable
template
xor_eq
do
namespace
this
or_eq
double
new
throw
not
dynamic_cast
operator
true
bitand
else
private
try
and_eq
bitor
not_eq
compl
And
--
or