Transcript Slide 1

‫بسم هللا الرحمن الرحيم‬
‫برنامه سازي‬
‫تعداد واحد‪3 :‬‬
‫تهيه كننده‪:‬‬
‫دکتر حسن توکلی‬
‫جلسه دوم‬
‫«انواع اصلي»‬
‫آنچه در اين جلسه مي‬
‫خوانيد‪:‬‬
‫‪ -1‬انواع دادۀ عددي‬
‫‪ -2‬متغير عدد صحيح‬
‫‪ -3‬محاسبات اعداد‬
‫صحيح‬
‫‪ -4‬عملگرهاي افزايشي‬
‫و کاهشي‬
‫›››‬
‫‪ -5‬عملگرهاي‬
‫‪ -7‬تعريف متغير مميز‬
‫شناور‬
‫‪ - 8‬شکل علمي مقادير‬
‫مميز شناور‬
‫‪ -9‬نوع بولين ‪bool‬‬
‫‪ -10‬نوع کاراکتري‬
‫‪char‬‬
‫‪ -11‬نوع شمارشي ‪›››enum‬‬
‫‪ -13‬برخي از خطاهاي‬
‫برنامهنويسي‬
‫‪ - 14‬سرريزي عددي‬
‫‪ -15‬خطاي گرد کردن‬
‫‪ -16‬حوزۀ متغيرها‬
‫هدف کلي‪:‬‬
‫هدفهاي رفتاري‪:‬‬
‫بتوانيد‪:‬ها در برنامههاي‬
‫کارگيري آن‬
‫اين به‬
‫پاياننحوۀ‬
‫متغييرها و‬
‫معرفيميرو‬
‫جلسه‬
‫انواعد پس از‬
‫انتظار‬
‫‪C++‬عددي صحيح در ‪ C++‬را نام ببريد و متغيرهايي از‬
‫ انواع‬‫اين نوعها را در برنامهها به کار ببريد‪.‬‬
‫ انواع عددي مميز شناور در ‪ C++‬را نام ببريد و متغيرهايي‬‫از اين نوعها را در برنامهها به کار ببريد‪.‬‬
‫ نوع بولين را تعريف کرده و متغيرهايي از اين نوع را در‬‫برنامهها به کار ببريد‪.‬‬
‫>>>‬
‫ نوع شمارش ي را شناخته و متغيرهايي از اين نوع را در‬‫برنامهها به کار ببريد‪.‬‬
‫ مفاهيم «تبديل نوع» و «گسترش نوع» را شناخته و انواع‬‫مختلف را به يکديگر تبديل نماييد‪.‬‬
‫ علت خطاهاي «سرريزي عددي» و «گردکردن» را دانسته‬‫و بتوانيد محل وقوع آنها را کشف کنيد‪.‬‬
‫ عملگرهاي حسابي و افزايش ي و کاهش ي و مقدارگذاري‬‫مرکب را در برنامهها به کار ببريد‪.‬‬
‫مقدمه‬
‫ما در زندگي روزمره از دادههاي مختلفي استفاده ميکنيم‪:‬‬
‫اعداد ‪ ،‬تصاوير‪ ،‬نوشتهها يا حروف الفبا‪ ،‬صداها‪ ،‬بوها‬
‫و ‪ . ...‬با پردازش اين دادهها ميتوانيم تصميماتي اتخاذ‬
‫کنيم‪ ،‬عکسالعملهايي نشان دهيم و مسالهاي را حل‬
‫کنيم‪ .‬رايانهها نيز قرار است همين کار را انجام دهند‪ .‬يعني‬
‫دادههايي را بگيرند‪ ،‬آنها را به شکلي که ما تعيين ميکنيم‬
‫پردازش کنند و در نتيجه اطالعات مورد نيازمان را‬
‫استخراج کنند‪.‬‬
‫‪ -1‬انواع دادۀ عددي‬
‫در ‪ C++‬دو نوع اصلي داده وجود دارد‪« :‬نوع‬
‫صحيح» و «نوع مميز شناور»‪ .‬همۀ انواع ديگر از روي‬
‫اين دو ساخته ميشوند (به شکل زير دقت کنيد)‪.‬‬
‫انواع اصلي‬
‫انواع صحيح‬
‫انواع مميز شناور‬
‫نوع صحيح‬
‫نوع صحيح براي نگهداري‬
‫اعداد صحيح (اعداد ‪ 0‬و‬
‫‪ 1‬و ‪ 2‬و ‪ )...‬استفاده‬
‫اعداد‬
‫اين‬
‫ميشود‪.‬‬
‫بيشتر براي شمارش به‬
‫کار ميروند و دامنه‬
‫محدودي دارند‪.‬‬
‫انواع صحيح‬
‫نوع‬
‫نوع‬
‫نوع‬
boolean
‫شمارش ي‬
‫کاراکتري‬
bool
enum
‫نوع‬
‫عددي صحيح‬
short
char
int
long
unsigned
Unsigned
char
short
Unsigned
wchar_t
int
unsigned
long
‫نوع مميز شناور براي نگهداري اعداد اعشاري استفاده‬
‫مي‌شود‪ .‬اعداد اعشاري بيشتر براي اندازه‌گيري دقيق به‬
‫کار مي‌روند و دامنۀ بزرگ‌تري دارند‪ .‬يک عدد اعشاري‬
‫مثل ‪ 352/187‬را مي‌توان به شکل ‪ 7352/18×10‬يا‬
‫‪ 87352/1×102‬يا‪52/1873×10-1‬يا‪ 2/18735×10-2‬و يا‬
‫‪ ...‬نوشت ‪.‬‬
‫کردن توان عدد ‪10‬‬
‫مميزياد‬
‫به اين ترتيب با کم‬
‫انواع و ز‬
‫شناور‬
‫مميز عدد نيز جابهجا ميشود‪ .‬به همين دليل‬
‫است که به اعداد اعشاري «اعداد مميز شناور»‬
‫گويند‪.‬‬
‫مي‬
‫‪float‬‬
‫‪double‬‬
‫‪long‬‬
‫‪double‬‬
‫‪ -2‬متغير عدد صحيح‬
‫‪ C++‬شش نوع متغير عدد صحيح دارد تفاوت اين شش‬
‫نوع مربوط به ميزان حافظۀ مورد استفاده و محدودۀ‬
‫مقاديري است که هر کدام ميتوانند داشته باشند‪.‬‬
‫اين ميزان حافظۀ مورد استفاده و محدودۀ مقادير‪ ،‬بستگي‬
‫زيادي به سختافزار و همچنين سيستم عامل دارد‪ .‬يعني‬
‫ممکن است روي يک رايانه‪ ،‬نوع ‪ int‬دو بايت از حافظه را‬
‫اشغال کند در حالي که روي رايانهاي از نوع ديگر نوع ‪int‬‬
‫به چهار بايت حافظه نياز داشته باشد‪.‬‬
‫حداكثر مقدار حداقل مقدار‬
‫قابل پذيرش‬
‫قابل پذيرش‬
‫‪32767‬‬
‫‪-32768‬‬
‫نوع متغيير‬
‫‪short‬‬
‫نويسيد‪،‬‬
‫مي‬
‫اي‬
‫برنامه‬
‫وقتي‬
‫‪unsigned short‬‬
‫‪0‬‬
‫‪65535‬‬
‫توجه داشته باشيد که از‬
‫‪int‬‬
‫‪-2147483648‬‬
‫‪2147483647‬‬
‫نوع صحيح مناسب استفاده‬
‫‪unsigned int‬‬
‫‪0‬‬
‫‪4294967295‬‬
‫کنيد تا هم برنامه دچار‬
‫‪long‬‬
‫حافظۀ‬
‫‪-2147483648‬هم‬
‫‪2147483647‬نشود و‬
‫خطا‬
‫‪unsigned long‬‬
‫‪ 4294967295‬را هدر‪ 0‬ندهيد‪.‬‬
‫سيستم‬
‫‪ -3‬محاسبات اعداد صحيح‬
‫اغلب‬
‫مانند‬
‫‪C++‬‬
‫زبانهاي برنامهنويسي‬
‫از‬
‫محاسبات‬
‫براي‬
‫عملگرهاي جمع (‪، )+‬‬
‫تفريق (‪ ، )-‬ضرب (*)‬
‫و‬
‫(‪)/‬‬
‫تقسيم‬
‫‪،‬‬
‫‪- 4‬‬
‫کاهشي‬
‫عملگرهاي‬
‫افزايشي‬
‫و‬
‫‪ C++‬براي دستکاري مقدار متغيرهاي صحيح‪ ،‬دو عملگر جالب‬
‫ديگر دارد‪:‬‬
‫کدام از اين عملگرها دو شکل‬
‫هر‬
‫اما‬
‫عملگر ‪: ++‬‬
‫متفاوت دارند‪ :‬شکل «پيشوندي» و شکل‬
‫مقدار يک متغير را يک واحد افزايش ميدهد‪.‬‬
‫«پسوندي»‪.‬‬
‫عملگر ‪: --‬‬
‫مقدار يک متغير را يک واحد کاهش ميدهد‪.‬‬
‫در شکل پيشوندي ابتدا متغير‪ ،‬متناسب با‬
‫يابدازو نام‬
‫عملگرميقبل‬
‫در‬
‫غيرن‬
‫پسمتاز آ‬
‫پيشوندييا‪،‬کاهش‬
‫شکلافزايش‬
‫عملگر‪،‬‬
‫شکل‬
‫در‬
‫‪.‬‬
‫‪n‬‬
‫‪-‬‬‫يا‬
‫‪m‬‬
‫‪++‬‬
‫مثل‬
‫‌آيد‬
‫ي‬
‫م‬
‫مقدار متغير براي محاسبات ديگر استفاده‬
‫پسوندي‪ ،‬عملگر بعد از نام متغير مي‌آيد مثل‬
‫ميشود‪.‬‬
‫‪ ++m‬يا ‪. --n‬‬
‫در شکل پسوندي ابتدا مقدار متغير در‬
‫محاسبات به کار ميرود و پس از آن مقدار‬
‫متغير يک واحد افزايش يا کاهش مييابد‪.‬‬
‫‪– 5‬‬
‫مرکب‬
‫عملگرهاي مقدارگذاري‬
‫‪ C++‬عملگرهاي ديگري دارد که مقدارگذاري در متغيرها‬
‫را تسهيل مينمايند‪ .‬مثل با استفاده از عملگر =‪+‬‬
‫ميتوانيم هشت واحد به ‪ m‬اضافه کنيم اما با دستور‬
‫;‪m += 8‬‬
‫کوتاهتر‪:‬‬
‫دستور بال معادل دستور ‪ ;m = m + 8‬است با اين‬
‫تفاوت که کوتاهتر است‪ .‬به عملگر ‪« =+‬عملگر مرکب»‬
‫ميگويند زيرا ترکيبي از عملگرهاي ‪ +‬و = ميباشد‬
‫‪ -5‬عملگرهاي مقدارگذاري مرکب‬
‫قبال از عملگر = براي مقدارگذاري در متغيرها استفاده‬
‫کرديم‪ C++ .‬عملگرهاي ديگري دارد که مقدارگذاري در‬
‫متغيرها را تسهيل مينمايند‪.‬‬
‫عملگر مرکب در ‪ C++‬عبارتند از‪:‬‬
‫=* و =‪ /‬و =‪%‬‬
‫=‪ +‬و =‪ -‬و‬
‫نحوۀ عمل اين‬
‫شکل زير است‪:‬‬
‫عملگرها‬
‫به‬
‫;‪m += 8; → m = m + 8‬‬
‫;‪m -= 8; → m = m - 8‬‬
‫;‪m *= 8; →m = m * 8‬‬
‫;‪m /= 8; →m = m / 8‬‬
‫;‪m %= 8; →m = m % 8‬‬
‫‪ – 6‬انواع مميز شناور‬
‫عدد مميز شناور به بيان ساده همان عدد اعشاري است‪ .‬عددي مثل‬
‫‪ 123.45‬يک عدد اعشاري است‪ .‬براي اين که مقدار اين عدد در رايانه‬
‫ذخيره شود‪ ،‬ابتدا بايد به شکل دودويي تبديل شود‪:‬‬
‫‪123.45 = 1111011.01110012‬‬
‫اکنون براي مشخص نمودن محل اعشار در عدد‪ ،‬تمام رقمها را به سمت‬
‫راست مميز منتقل ميکنيم‪ .‬البته با هر جابجايي مميز‪ ،‬عدد حاصل بايد در‬
‫تواني از ‪ 2‬ضرب شود‪:‬‬
‫‪123.45 = 0.11110110111001× 27‬‬
‫به مقدار ‪« 11110110111001‬مانتيس عدد» و به ‪ 7‬که توان‬
‫روي دو است‪« ،‬نماي عدد» گفته ميشود‪.‬‬
‫در‪ C++‬سه نوع مميز شناور‬
‫وجود دارد‪:‬‬
‫انواع مميز شناور‬
‫‪long double‬‬
‫‪double‬‬
‫‪float‬‬
‫براي‬
‫بايت‬
‫هشت‬
‫از‬
‫‪double‬‬
‫نوع‬
‫يا‬
‫ده‬
‫يا‬
‫هشت‬
‫از‬
‫‪long‬‬
‫‪double‬‬
‫نوع‬
‫چهار بايت براي‬
‫از‬
‫‪float‬‬
‫نوع‬
‫معموال‬
‫براي‪.‬‬
‫بايتمي‌کند‬
‫شانزدهاستفاده‬
‫نگهداري عدد‬
‫‌کند ‪.‬نگهداري‬
‫يا‬
‫دوازده‬
‫نگهداري عدد استفاده مي‬
‫عدد استفاده مي‌کند ‪.‬‬
‫جدول تخصيص حافظه براي متغيير هاي‬
‫مميز شناور‬
‫تعداد بيت براي‬
‫ذخيرهسازي‬
‫نوع متغير‬
‫عالمت عدد‬
‫نما‬
‫مانتيس‬
‫‪1‬‬
‫‪8‬‬
‫‪23‬‬
‫‪ 32 float‬بيتي‬
‫‪1‬‬
‫‪11‬‬
‫‪52‬‬
‫‪64 double‬‬
‫بيتي‬
‫‪ – 7‬تعريف متغير مميز شناور‬
‫تعريف متغير مميز شناور مانند تعريف متغير صحيح‬
‫اين‬
‫در‬
‫‪double‬‬
‫نوع‬
‫با‬
‫‪float‬‬
‫نوع‬
‫تفاوت‬
‫است‪ .‬با اين تفاوت که از کلمۀ کليدي ‪ float‬يا‬
‫از‬
‫‪float‬‬
‫برابر‬
‫دو‬
‫‪double‬‬
‫نوع‬
‫که‬
‫است‬
‫‪ double‬براي مشخص نمودن نوع متغير استفاده‬
‫حافظه استفاده مي‌کند‪ .‬پس نوع ‪double‬‬
‫ميکنيم‪.‬‬
‫‪ float‬دارد‪ .‬به همين‬
‫از‬
‫بيشتر‬
‫بسيار‬
‫دقتي‬
‫مثال‪:‬‬
‫دليل محاسبات ‪ double‬وقت‌گيرتر از‬
‫;‪float x‬‬
‫محاسبات ‪ float‬است‪.‬‬
‫;‪double x,y=0‬‬
‫‪ -8‬شکل علمي مقادير مميز‬
‫شناور‬
‫اعداد مميز شناور به دو صورت در ورودي و خروجي نشان داده‬
‫ميشوند‪ :‬به شکل «ساده» و به شکل «علمي»‪.‬‬
‫‪ -1‬ساده‬
‫‪ -2‬علمي‬
‫‪1.234567×104‬‬
‫‪12345.67‬‬
‫مشخص است که شکل علمي براي نشان دادن اعداد‬
‫خيلي کوچک و همچنين اعداد خيلي بزرگ‪ ،‬کارآيي‬
‫بيشتري دارد‪.‬‬
‫‪ – 9‬نوع بولين ‪bool‬‬
‫نوع ‪ bool‬يک نوع صحيح است‬
‫که متغيرهاي اين نوع فقط‬
‫ميتوانند مقدار ‪ true‬يا‬
‫‪ false‬داشته باشند‪ true .‬به‬
‫معني درست و ‪ false‬به معني‬
‫نادرست است‪.‬‬
‫اما اين مقادير در اصل به‬
‫صورت ‪ 1‬و ‪ 0‬درون رايانه‬
‫ذخيره ميشوند‪ 1 :‬براي ‪true‬‬
‫‪ -10‬نوع کاراکتري ‪char‬‬
‫يک کاراکتر يک حرف‪ ،‬رقم يا‬
‫نشانه است که يک شمارۀ منحصر‬
‫عبارت‬
‫به‬
‫دارد‪.‬‬
‫فرد‬
‫به‬
‫عاميانه‪ ،‬هر کليدي که روي‬
‫يک‬
‫ميبينيد‬
‫خود‬
‫صفحهکليد‬
‫کاراکتر را نشان ميدهد‪.‬‬
‫مثال هر يک از حروف '‪ 'A‬تا‬
‫'‪ 'Z‬و '‪ 'a‬تا '‪ 'z‬و هر يک از‬
‫اعداد '‪ '0‬تا '‪ '9‬و يا‬
‫براي تعريف متغيري از‬
‫نوع کاراکتر از کلمه کليدي‬
‫‪ char‬استفاده ميکنيم‪ .‬يک‬
‫کاراکتر بايد درون دو عالمت‬
‫شده‬
‫محصور‬
‫(')‬
‫آپستروف‬
‫باشد‪ .‬پس '‪ 'A‬يک کاراکتر‬
‫است؛ همچنين'‪ '8‬يک کاراکتر‬
‫است اما ‪ 8‬يک کاراکتر نيست‬
‫بلکه يک عدد صحيح است ‪.‬‬
‫‪ – 11‬نوع شمارشي ‪enum‬‬
‫يک نوع شمارشي يک نوع صحيح‬
‫مشخص‬
‫است که توسط کاربر‬
‫ميشود‪ .‬نحو تعريف يک نوع‬
‫شمارشي به شکل زير است‪:‬‬
‫}‪enum typename{enumerator-list‬‬
‫که ‪ enum‬کلمهاي کليدي است‪،‬‬
‫‪ typename‬نام نوع جديد است که‬
‫و‬
‫ميکند‬
‫مشخص‬
‫کاربر‬
‫‪ enumerator-list‬مجموعه مقاديري‬
‫به عنوان مثال به تعريف زير دقت‬
‫کنيد‪:‬‬
‫}‪enum Day{SAT,SUN,MON,TUE,WED,THU,FRI‬‬
‫استوو محدودۀ‬
‫‪Day‬‬
‫جديد‬
‫وقتي‪Day‬نوع‬
‫جديد‬
‫يک نوع‬
‫حاال‬
‫نوع تعريف‬
‫از اين‬
‫کرديم‪،‬‬
‫تعيين‬
‫متغيرهايي کهرا‬
‫مقاديرش‬
‫توانند يکي از‬
‫ميشوند مي‬
‫مي‬
‫مقادير اين‬
‫متغيرهايي از‬
‫توانيم‬
‫‪ SAT‬و ‪ SUN‬و ‪ MON‬و ‪ TUE‬و ‪ WED‬و‬
‫باشند‪ :‬کد باال‬
‫بسازيم‪ .‬در‬
‫جديد‬
‫نوع‬
‫‪ THU‬و ‪ FRI‬را داشته‬
‫از‬
‫‪day2‬‬
‫و‬
‫‪day1‬‬
‫متغيرهاي‬
‫;‪Day day1,day2‬‬
‫‪.‬‬
‫اند‬
‫شده‬
‫تعريف‬
‫‪Day‬‬
‫نوع‬
‫;‪day1 = MON‬‬
‫دلخواهي راو‬
‫‪SAT‬صحيحو ‪SUN‬‬
‫مقادير‬
‫مقادير‬
‫ميتوان‬
‫شمارشگرها نسبت‬
‫به‬
‫چندداد‪:‬که به‬
‫هر‬
‫‪...‬‬
‫بهشمارشگر‬
‫يا چند‬
‫همچنين دو‬
‫کار‬
‫شکل‬
‫همين‬
‫شمارشگرها‬
‫يک بعضي‬
‫در فقط‬
‫اگر‬
‫فهرستاز ميتوانند‬
‫در‬
‫اما‬
‫روند‬
‫مي‬
‫ساير‬
‫مقداردهي شوند‪،‬‬
‫يکسانيآنگاهداشته‬
‫مقادير‬
‫مقداردهي نشدهاند‬
‫شمارشگرها که‬
‫اعداد‬
‫به شکل‬
‫رايانه‬
‫باشند‪:‬‬
‫خواهند‬
‫را‬
‫بعدي‬
‫متوالي‬
‫مقادير‬
‫}‪enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1‬‬
‫صحيح ‪ 0‬و ‪ 1‬و ‪ 2‬و ‪...‬‬
‫گرفت‪:‬‬
‫}‪enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI‬‬
‫به‬
‫ميشوند‪.‬‬
‫ذخيره‬
‫همين دليل است که به‬
‫}‪enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64‬‬
‫نحوۀ انتخاب نامشمارشگرها آزاد است اما بيشتر برنامهنويسان از‬
‫توافق زير در برنامههايشان استفاده ميکنند‪:‬‬
‫‪ – 1‬براي نام ثابتها از حروف بزرگ استفاده کنيد‬
‫اولينرشگر‬
‫‪2‬نام–شما‬
‫باشدش‪ :‬ي را با حرف بزرگ‬
‫بايدنام نوع‬
‫حرف از‬
‫معتبر شمار‬
‫بنويسيد‪.‬‬
‫يعني‪:‬‬
‫نباشد‪.‬حروف کوچک استفاده کنيد‪.‬‬
‫کليديديگر از‬
‫کلمۀهر جاي‬
‫‪ –-13‬در‬
‫‪ -2‬با عدد شروع نشود‪.‬‬
‫‪ -3‬نشانههاي رياض ي نيز نداشته باشد‪.‬‬
‫شمارشگرهاي همنام نبايد در‬
‫شمارشگرها‬
‫نام‬
‫که‬
‫اين‬
‫آخر‬
‫استفاده‬
‫مشترک‬
‫محدودههاي‬
‫نبايد به عنوان نام متغيرهاي‬
‫زير‬
‫هاي‬
‫تعريف‬
‫مثال‬
‫براي‬
‫‪.‬‬
‫شوند‬
‫ديگر در جاهاي ديگر برنامه‬
‫بگيريد‬
‫را در‬
‫مثال‪::‬‬
‫نظرشود‪.‬‬
‫استفاده‬
‫}‪enum Score{A,B,C,D‬‬
‫‪enum‬‬
‫}‪Score{A,B,C,D‬‬
‫}‪enum Group{AB,B,BC‬‬
‫;‪float B‬‬
‫است‬
‫غيرمجاز‬
‫;‪char c‬‬
‫دو تعريف باال‬
‫دو‬
‫هر‬
‫در‬
‫‪B‬‬
‫شمارشگر‬
‫زيرا‬
‫در تعريفهاي باال ‪ B‬و ‪ C‬را‬
‫‪ Group‬آمده‬
‫‪ Score‬و‬
‫تعريف‬
‫متغيرهاي‬
‫عنوان نام‬
‫نبايد به‬
‫است‪.‬‬
‫ديگر به کار برد زيرا اين‬
‫نامها در نوع شمارشي ‪ Score‬به‬
‫انواع شمارشي براي توليد کد‬
‫«خود مستند» به کار ميروند‪،‬‬
‫يعني کدي که به راحتي درک‬
‫شود و نياز به توضيحات اضافي‬
‫نداشته باشد‪.‬‬
‫مثال تعاريف زير خودمستند‬
‫هستند زيرا به راحتي نام و‬
‫محدودۀ‬
‫و‬
‫کاربرد‬
‫نوع‬
‫مقاديرشان درک ميشود‪:‬‬
‫}‪enum Color{RED,GREEN,BLUE,BLACK,ORANGE‬‬
‫}‪enum Time{SECOND,MINUTE,HOUR‬‬
‫}‪enum Date{DAY,MONTH,YEAR‬‬
‫‪ – 12‬تبديل نوع‪ ،‬گسترش نوع‬
‫در محاسباتي که چند نوع‬
‫جواب‬
‫دارد‪،‬‬
‫وجود‬
‫متغير‬
‫هميشه به شکل متغيري است‬
‫که دقت باالتري دارد‪ .‬يعني‬
‫مقداربا يکيک‬
‫صحيح را‬
‫عدد‬
‫يک‬
‫اگر‬
‫براي اين که‬
‫جمع‬
‫شناور‬
‫مميز‬
‫عدد‬
‫متغير از نوع مميز شناور‬
‫مميز‬
‫پاسخ به‬
‫ببنديم‪،‬‬
‫صحيحشکلتبديل‬
‫به نوع‬
‫را‬
‫عمل‬
‫است به‬
‫شناور‬
‫اين )(‪int‬‬
‫عبارت‬
‫از‬
‫کنيم‬
‫مثالهاي زير تبديل نوع و گسترش نوع‬
.‫را نشان ميدهند‬
‫مثال گسترش نوع‬
‫تبديل‬
‫مثال‬
‫عدد صحيح را با يک عدد‬:‫نوع‬
‫زير يک‬
‫برنامۀ‬
int ‫ را به نوع‬double
‫شناور يک‬
،‫برنامه‬
‫اين‬
:‫نوعکند‬
‫جمع مي‬
‫مميز‬
:‫تبديل ميکند‬
int main()
int
{ //main()
adds an int value with a double value:
{ int
// casts
a double value as an int:
n = 22;
double
doublev=1234.987;
p = 3.1415;
int
n; n;
p +=
n
= int(v);
cout
<< "p = " << p << ", n = " << n << endl;
cout
<<0;"v = " << v << ", n = " << n << endl;
return
} return 0;
}
‫‪ – 13‬برخي از خطاهاي برنامهنويس ي‬
‫‌«خطاي زمان کامپايل»‬
‫اين قبيل خطاها که اغلب‬
‫خطاهاي نحوي هستند ‪ ،‬توسط‬
‫کامپايلر کشف ميشوند و به‬
‫راحتي ميتوان آنها را رفع‬
‫نمود‪.‬‬
‫«خطاي زمان اجرا»‌‬
‫به‬
‫خطاها‬
‫اينگونه‬
‫کشف‬
‫راحتي ممکن نيست و کامپايلر‬
‫نيز چيزي راجع به آن نميداند‪.‬‬
‫برخي از خطاهاي زمان اجرا سبب‬
‫‪ -14‬سرريزي عددي‬
‫يک متغير هر قدر هم که‬
‫گنجايش داشته باشد‪ ،‬باالخره‬
‫مقداري هست که از گنجايش‬
‫آن متغير بيشتر باشد‪ .‬اگر‬
‫سعي کنيم در يک متغير‬
‫مقداري قرار دهيم که از‬
‫گنجايش آن متغير فراتر‬
‫«سرريز»‬
‫متغير‬
‫باشد‪،‬‬
‫مثال ‪ 2 – 12‬سرريزي عدد صحيح‬
‫‪1000‬‬
‫عددرا در‬
‫يکمكرر ‪n‬‬
‫وقتي طور‬
‫اين برنامه به‬
‫صحيح‬
‫ضرب ميكند تا سرانجام سرريز شود‪:‬‬
‫عدد‬
‫شود‪،‬‬
‫سرريز‬
‫)(‪int main‬‬
‫يک‬
‫به‬
‫شده‬
‫سرريز‬
‫{‬
‫‪//prints n until it overflows:‬‬
‫مقدار‬
‫منفي‪int‬‬
‫;‪n =1000‬‬
‫‪cout‬‬
‫‪<< "n‬‬
‫;‪= " << n << endl‬‬
‫شود‬
‫مي‬
‫«گردانيده»‬
‫;‪n *= 1000‬‬
‫‪// multiplies n by 1000‬‬
‫عدد‬
‫يک‬
‫وقتي‬
‫اما‬
‫;‪cout << "n = " << n << endl‬‬
‫=* ‪n‬‬
‫;‪1000‬‬
‫‪// multiplies‬‬
‫مميز‪n by 1000‬‬
‫سرريز‬
‫شناور‬
‫;‪cout << " n = " << n << endl‬‬
‫به‬
‫‪inf‬‬
‫نماد‬
‫شود‪،‬‬
‫;‪n *= 1000‬‬
‫‪// multiplies n by 1000‬‬
‫را " <<به‬
‫نهايت‬
‫معناي بي‬
‫‪cout‬‬
‫<< " = ‪n‬‬
‫;‪n << endl‬‬
‫;‪return 0‬‬
‫دست ميدهد‪.‬‬
‫}‬
‫‪ – 15‬خطاي گرد کردن‬
‫خطاي گرد كردن نوع ديگري از خطاست كه اغلب وقتي‬
‫رايانهها روي اعداد حقيقي محاسبه ميكنند‪ ،‬رخ ميدهد‪.‬‬
‫‪1/3‬شناور‬
‫مقايسه برابر‬
‫عدد مميز‬
‫از متغير‬
‫صوريت‬
‫ممكن براياست به‬
‫هيچگاهمثال‬
‫ب«راي‬
‫معادلشناور‬
‫‪1/3‬خطاي‬
‫دقيقامميز‬
‫متغيرهاي‬
‫ذخيرها در‬
‫نکنيد» زير‬
‫استفاده‬
‫نيست‪.‬‬
‫شود كه‬
‫‪0.333333‬‬
‫مثل نظر‬
‫اعداديمورد‬
‫پاسخکهبا آن چه‬
‫‪1/3‬‬
‫کهشود‬
‫شود مي‬
‫سببجاميناش ي‬
‫کردناز آن‬
‫گرد خطا‬
‫اين‬
‫باشد‪.‬رايانه نميتواند اين مقدار را پيدا‬
‫متفاوترند و‬
‫دقيق ندا‬
‫مقدار‬
‫شماست‬
‫کند‪ ،‬پس نزديکترين عدد قابل محاسبه را به جاي چنين‬
‫اعدادي منظور ميکند‪.‬‬
‫‪ – 16‬حوزۀ متغيرها‬
‫انتخاب نامهاي نامفهوم يا ناقص سبب کاهش خوانايي‬
‫کهفاده‬
‫استاست‬
‫مناسبيشود‪.‬‬
‫نويس ي مي‬
‫اصطالحز«ايش‬
‫برنامه و اف‬
‫برنامهواژه‬
‫خطاهاي‪C++‬‬
‫بلوک» در‬
‫خطاهايي‬
‫سبب رابروز‬
‫نامناسب‬
‫به حوزۀ‬
‫توان در‬
‫متغيرها‬
‫مشخص‬
‫حوزۀهممتغير‬
‫وسيلۀ آن‬
‫از مي‬
‫يککهمتغير‬
‫قسمتيايازاست‬
‫برنامه‪،‬محدوده‬
‫بلوکمتغير»‬
‫حوزه‬
‫ميشود‬
‫برنامهکهاست‬
‫نمود‪« ..‬يک‬
‫اخواني‬
‫محدود فر‬
‫کار رود يا‬
‫جفتدر آن‬
‫يک دارد‬
‫خاصوناجازه‬
‫عالمت کرو‬
‫شده‬
‫محدودهشهبه { }‬
‫در‬
‫شود‪.‬‬
‫است‪.‬‬
‫حوزۀ يک متغير از محل اعالن آن شروع ميشود و تا‬
‫پايان همان بلوک ادامه مييابد‪ .‬خارج از آن بلوک‬
‫نميتوان به متغير دسترس ي داشت‪ .‬همچنين قبل از اين‬
‫که متغير اعالن شود نميتوان آن را استفاده نمود‪.‬‬
‫ميتوانيم در يک برنامه‪ ،‬چند متغير متفاوت با يک نام‬
‫داشته باشيم به شرطي که در حوزههاي مشترک‬
‫نباشند‪.‬‬
‫پايان جلسه دوم‬