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++
بلوک» در
خطاهايي
سبب رابروز
نامناسب
به حوزۀ
توان در
متغيرها
مشخص
حوزۀهممتغير
وسيلۀ آن
از مي
يککهمتغير
قسمتيايازاست
برنامه،محدوده
بلوکمتغير»
حوزه
ميشود
برنامهکهاست
نمود« ..يک
اخواني
محدود فر
کار رود يا
جفتدر آن
يک دارد
خاصوناجازه
عالمت کرو
شده
محدودهشهبه { }
در
شود.
است.
حوزۀ يک متغير از محل اعالن آن شروع ميشود و تا
پايان همان بلوک ادامه مييابد .خارج از آن بلوک
نميتوان به متغير دسترس ي داشت .همچنين قبل از اين
که متغير اعالن شود نميتوان آن را استفاده نمود.
ميتوانيم در يک برنامه ،چند متغير متفاوت با يک نام
داشته باشيم به شرطي که در حوزههاي مشترک
نباشند.
پايان جلسه دوم