Presentation is loading. Please wait.

Presentation is loading. Please wait.

بسم الله الرحمن الرحيم.

Similar presentations


Presentation on theme: "بسم الله الرحمن الرحيم."— Presentation transcript:

1 بسم الله الرحمن الرحيم

2 تهيه كننده: دکتر حسن توکلی
برنامه سازي تعداد واحد: 3 تهيه كننده: دکتر حسن توکلی

3 جلسه دوم «انواع اصلي»

4 آنچه در اين جلسه مي خوانيد:
1- انواع دادۀ عددي 2- متغير عدد صحيح 3- محاسبات اعداد صحيح 4- عملگرهاي افزايشي و کاهشي 5- عملگرهاي مقدارگذاري مرکب 6- انواع مميز شناور ›››

5 ››› 7- تعريف متغير مميز شناور 8 - شکل علمي مقادير مميز شناور
9- نوع بولين bool 10- نوع کاراکتري char 11- نوع شمارشي enum 12- تبديل نوع، گسترش نوع ›››

6 13- برخي از خطاهاي برنامه‌نويسي
14 - سرريزي عددي 15- خطاي گرد کردن 16- حوزۀ متغيرها

7 هدف کلي: معرفي انواع متغييرها و نحوۀ به‌کارگيري آن‌ها در برنامه‌هاي C++ هدف‌هاي رفتاري: انتظار مي‌رود پس از پايان اين جلسه بتوانيد: - انواع عددي صحيح در C++ را نام ببريد و متغيرهايي از اين نوع‌ها را در برنامه‌ها به کار ببريد. - انواع عددي مميز شناور در C++ را نام ببريد و متغيرهايي از اين نوع‌ها را در برنامه‌ها به کار ببريد. - نوع بولين را تعريف کرده و متغيرهايي از اين نوع را در برنامه‌ها به کار ببريد. >>>

8 - نوع شمارشي را شناخته و متغيرهايي از اين نوع را در برنامه‌ها به کار ببريد.
- مفاهيم «تبديل نوع» و «گسترش نوع» را شناخته و انواع مختلف را به يکديگر تبديل نماييد. - علت خطاهاي «سرريزي عددي» و «گردکردن» را دانسته و بتوانيد محل وقوع آن‌ها را کشف کنيد. - عملگرهاي حسابي و افزايشي و کاهشي و مقدارگذاري مرکب را در برنامه‌ها به کار ببريد.

9 مقدمه ما در زندگي روزمره از داده‌هاي مختلفي استفاده مي‌کنيم: اعداد ، تصاوير، نوشته‌ها يا حروف الفبا، صداها، بوها و با پردازش اين داده‌ها مي‌توانيم تصميماتي اتخاذ کنيم، عکس‌العمل‌هايي نشان دهيم و مساله‌اي را حل کنيم. رايانه‌ها نيز قرار است همين کار را انجام دهند. يعني داده‌هايي را بگيرند، آن‌ها را به شکلي که ما تعيين مي‌کنيم پردازش کنند و در نتيجه اطلاعات مورد نيازمان را استخراج کنند.

10 1- انواع دادۀ عددي در C++ دو نوع اصلي داده وجود دارد: «نوع صحيح» و «نوع مميز شناور». همۀ انواع ديگر از روي اين دو ساخته مي‌شوند (به شکل زير دقت کنيد).

11 نوع صحيح نوع صحيح براي نگهداري اعداد صحيح (اعداد 0 و 1 و 2 و ...) استفاده مي‌شود. اين اعداد بيشتر براي شمارش به کار مي‌روند و دامنه محدودي دارند.

12

13 نوع مميز شناور براي نگهداري اعداد اعشاري استفاده مي‌شود
نوع مميز شناور براي نگهداري اعداد اعشاري استفاده مي‌شود. اعداد اعشاري بيشتر براي اندازه‌گيري دقيق به کار مي‌روند و دامنۀ بزرگ‌تري دارند. يک عدد اعشاري مثل 352/187 را مي‌توان به شکل 10×7352/18 يا 102×87352/1 يا1-10×52/1873يا2-10×2/18735 و يا ... نوشت. به اين ترتيب با کم و زياد کردن توان عدد 10 مميز عدد نيز جابه‌جا مي‌شود. به همين دليل است که به اعداد اعشاري «اعداد مميز شناور» مي‌گويند.

14 2- متغير عدد صحيح C++ شش نوع متغير عدد صحيح دارد تفاوت اين شش نوع مربوط به ميزان حافظۀ مورد استفاده و محدودۀ مقاديري است که هر کدام مي‌توانند داشته باشند. اين ميزان حافظۀ مورد استفاده و محدودۀ مقادير، بستگي زيادي به سخت‌افزار و همچنين سيستم عامل دارد. يعني ممکن است روي يک رايانه، نوع int دو بايت از حافظه را اشغال کند در حالي که روي رايانه‌اي از نوع ديگر نوع int به چهار بايت حافظه نياز داشته باشد.

15 حداكثر مقدار قابل پذيرش
نوع متغيير حداقل مقدار قابل پذيرش حداكثر مقدار قابل پذيرش short -32768 32767 unsigned short 65535 int unsigned int long unsigned long وقتي برنامه‌اي مي‌نويسيد، توجه داشته باشيد که از نوع صحيح مناسب استفاده کنيد تا هم برنامه دچار خطا نشود و هم حافظۀ سيستم را هدر ندهيد.

16 3 -محاسبات اعداد صحيح C++ مانند اغلب زبان‌هاي برنامه‌نويسي براي محاسبات از عملگرهاي جمع (+) ، تفريق (-) ، ضرب (*) ، تقسيم (/) و باقيمانده (%) استفاده مي‌کند.

17 4 - عملگرهاي افزايشي و کاهشي
C++ براي دستکاري مقدار متغيرهاي صحيح، دو عملگر جالب ديگر دارد: عملگر ++ : مقدار يک متغير را يک واحد افزايش مي‌دهد. عملگر -- : مقدار يک متغير را يک واحد کاهش مي‌دهد. اما هر کدام از اين عملگرها دو شکل متفاوت دارند: شکل «پيشوندي» و شکل «پسوندي».

18 در شکل پيشوندي ابتدا متغير، متناسب با عملگر، افزايش يا کاهش مي‌يابد و پس از آن مقدار متغير براي محاسبات ديگر استفاده مي‌شود. در شکل پسوندي ابتدا مقدار متغير در محاسبات به کار مي‌رود و پس از آن مقدار متغير يک واحد افزايش يا کاهش مي‌يابد. در شکل پيشوندي، عملگر قبل از نام متغير مي‌آيد مثل ++m يا --n . در شکل پسوندي، عملگر بعد از نام متغير مي‌آيد مثل m++ يا n-- .

19 5 – عملگرهاي مقدارگذاري مرکب
5 – عملگرهاي مقدارگذاري مرکب C++ عملگرهاي ديگري دارد که مقدارگذاري در متغيرها را تسهيل مي‌نمايند. مثلا با استفاده از عملگر += مي‌توانيم هشت واحد به m اضافه کنيم اما با دستور کوتاه‌تر: m += 8; دستور بالا معادل دستور m = m + 8; است با اين تفاوت که کوتاه‌تر است. به عملگر += «عملگر مرکب» مي‌گويند زيرا ترکيبي از عملگرهاي + و = مي‌باشد

20 5- عملگرهاي مقدارگذاري مرکب
قبلا از عملگر = براي مقدارگذاري در متغيرها استفاده کرديم. C++ عملگرهاي ديگري دارد که مقدارگذاري در متغيرها را تسهيل مي‌نمايند. عملگر مرکب در C++ عبارتند از: += و -= و *= و /= و =%

21 نحوۀ عمل اين عملگرها به شکل زير است:
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;

22 6 – انواع مميز شناور عدد مميز شناور به بيان ساده همان عدد اعشاري است. عددي مثل يک عدد اعشاري است. براي اين که مقدار اين عدد در رايانه ذخيره شود، ابتدا بايد به شکل دودويي تبديل شود: = اکنون براي مشخص نمودن محل اعشار در عدد، تمام رقم‌ها را به سمت راست مميز منتقل مي‌کنيم. البته با هر جابجايي مميز، عدد حاصل بايد در تواني از 2 ضرب شود: = × 27 به مقدار «مانتيس عدد» و به 7 که توان روي دو است، «نماي عدد» گفته مي‌شود.

23 درC++ سه نوع مميز شناور وجود دارد:
نوع double از هشت بايت براي نگهداري عدد استفاده مي‌کند. نوع long double از هشت يا ده يا دوازده يا شانزده بايت براي نگهداري عدد استفاده مي‌کند. معمولا نوع float از چهار بايت براي نگهداري عدد استفاده مي‌کند.

24 23 8 1 52 11 جدول تخصيص حافظه براي متغيير هاي مميز شناور مانتيس نما
نوع متغير تعداد بيت براي ذخيره‌سازيِ مانتيس نما علامت عدد float 32 بيتي 23 8 1 double 64 بيتي 52 11

25 7 – تعريف متغير مميز شناور
7 – تعريف متغير مميز شناور تعريف متغير مميز شناور مانند تعريف متغير صحيح است. با اين تفاوت که از کلمۀ کليدي float يا double براي مشخص نمودن نوع متغير استفاده مي‌کنيم. مثال: float x; double x,y=0; تفاوت نوع float با نوع double در اين است که نوع double دو برابر float از حافظه استفاده مي‌کند. پس نوع double دقتي بسيار بيشتر از float دارد. به همين دليل محاسبات double وقت‌گيرتر از محاسبات float است.

26 8- شکل علمي مقادير مميز شناور
اعداد مميز شناور به دو صورت در ورودي و خروجي نشان داده مي‌شوند: به شکل «ساده» و به شکل «علمي». 2- علمي ×104 1- ساده مشخص است که شکل علمي براي نشان دادن اعداد خيلي کوچک و همچنين اعداد خيلي بزرگ، کارآيي بيشتري دارد.

27 9 – نوع بولين bool نوع bool يک نوع صحيح است که متغيرهاي اين نوع فقط مي‌توانند مقدار true يا false داشته باشند. true به معني درست و false به معني نادرست است. اما اين مقادير در اصل به صورت 1 و 0 درون رايانه ذخيره مي‌شوند: 1 براي true و 0 براي false.

28 10- نوع کاراکتري char يک کاراکتر يک حرف، رقم يا نشانه است که يک شمارۀ منحصر به فرد دارد. به عبارت عاميانه، هر کليدي که روي صفحه‌کليد خود مي‌بينيد يک کاراکتر را نشان مي‌دهد. مثلا هر يک از حروف 'A' تا 'Z' و 'a' تا 'z' و هر يک از اعداد '0' تا '9' و يا نشانه‌هاي '~' تا '+' روي صفحه‌کليد را يک کاراکتر مي‌نامند.

29 براي تعريف متغيري از نوع کاراکتر از کلمه کليدي char استفاده مي‌کنيم
براي تعريف متغيري از نوع کاراکتر از کلمه کليدي char استفاده مي‌کنيم. يک کاراکتر بايد درون دو علامت آپستروف (') محصور شده باشد. پس 'A' يک کاراکتر است؛ همچنين'8' يک کاراکتر است اما 8 يک کاراکتر نيست بلکه يک عدد صحيح است . مثال: char c ='A';

30 11 – نوع شمارشي enum enum typename{enumerator-list}
يک نوع شمارشي يک نوع صحيح است که توسط کاربر مشخص مي‌شود. نحو تعريف يک نوع شمارشي به شکل زير است: enum typename{enumerator-list} که enum کلمه‌اي کليدي است، typename نام نوع جديد است که کاربر مشخص مي‌کند و enumerator-list مجموعه مقاديري است که اين نوع جديد مي‌تواند داشته باشد.

31 به عنوان مثال به تعريف زير دقت کنيد:
enum Day{SAT,SUN,MON,TUE,WED,THU,FRI} حالا Day يک نوع جديد است و متغيرهايي که از اين نوع تعريف مي‌شوند مي‌توانند يکي از مقادير SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشند: Day day1,day2; day1 = MON; day2 = THU; وقتي نوع جديد Day و محدودۀ مقاديرش را تعيين کرديم، مي‌توانيم متغيرهايي از اين نوع جديد بسازيم. در کد بالا متغيرهاي day1 و day2 از نوع Day تعريف شده‌اند. آنگاه day1 با مقدار MON و day2 با مقدار THU مقداردهي شده است.

32 enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1}
مقادير SAT و SUN و هر چند که به همين شکل به کار مي‌روند اما در رايانه به شکل اعداد صحيح 0 و 1 و 2 و ... ذخيره مي‌شوند. به همين دليل است که به هر يک از مقادير SAT و SUN و ... يک شمارشگر مي‌گويند. مي‌توان مقادير صحيح دلخواهي را به شمارشگرها نسبت داد: enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64} اگر فقط بعضي از شمارشگرها مقداردهي شوند، آنگاه ساير شمارشگرها که مقداردهي نشده‌اند مقادير متوالي بعدي را خواهند گرفت: enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI} دستور بالا مقادير 1 تا 7 را به ترتيب به روزهاي هفته تخصيص خواهد داد. همچنين دو يا چند شمارشگر در يک فهرست مي‌توانند مقادير يکساني داشته باشند: enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1}

33 نام شمارشگر بايد معتبر باشد: يعني: 1- کلمۀ کليدي نباشد.
نحوۀ انتخاب نام‌شمارشگرها آزاد است اما بيشتر برنامه‌نويسان از توافق زير در برنامه‌هايشان استفاده مي‌کنند: 1 – براي نام ثابت‌ها از حروف بزرگ استفاده کنيد 2 – اولين حرف از نام نوع شمارشي را با حرف بزرگ بنويسيد. 3 – در هر جاي ديگر از حروف کوچک استفاده کنيد. نام شمارشگر بايد معتبر باشد: يعني: 1- کلمۀ کليدي نباشد. 2- با عدد شروع نشود. 3- نشانه‌هاي رياضي نيز نداشته باشد.

34 enum Score{A,B,C,D} float B; char c;
آخر اين که نام شمارشگرها نبايد به عنوان نام متغيرهاي ديگر در جاهاي ديگر برنامه استفاده شود. مثلا: enum Score{A,B,C,D} float B; char c; در تعريف‌هاي بالا B و C را نبايد به عنوان نام متغيرهاي ديگر به کار برد زيرا اين نام‌ها در نوع شمارشي Score به کار رفته است . شمارشگرهاي هم‌نام نبايد در محدوده‌هاي مشترک استفاده شوند. براي مثال تعريف‌هاي زير را در نظر بگيريد: enum Score{A,B,C,D} enum Group{AB,B,BC} دو تعريف بالا غيرمجاز است زيرا شمارشگر B در هر دو تعريف Score و Group آمده است.

35 انواع شمارشي براي توليد کد «خود مستند» به کار مي‌روند، يعني کدي که به راحتي درک شود و نياز به توضيحات اضافي نداشته باشد. مثلا تعاريف زير خودمستند هستند زيرا به راحتي نام و نوع کاربرد و محدودۀ مقاديرشان درک مي‌شود: enum Color{RED,GREEN,BLUE,BLACK,ORANGE} enum Time{SECOND,MINUTE,HOUR} enum Date{DAY,MONTH,YEAR} enum Language{C,DELPHI,JAVA,PERL} enum Gender{MALE,FEMALE}

36 12 – تبديل نوع، گسترش نوع در محاسباتي که چند نوع متغير وجود دارد، جواب هميشه به شکل متغيري است که دقت بالاتري دارد. يعني اگر يک عدد صحيح را با يک عدد مميز شناور جمع ببنديم، پاسخ به شکل مميز شناور است به اين عمل گسترش نوع مي‌گويند. براي اين که مقدار يک متغير از نوع مميز شناور را به نوع صحيح تبديل کنيم از عبارت int() استفاده مي‌کنيم به اين عمل تبديل نوع گفته مي شود

37 مثال‌هاي زير تبديل نوع و گسترش نوع را نشان مي‌دهند.
مثال گسترش نوع برنامۀ زير يک عدد صحيح را با يک عدد مميز شناور جمع مي‌کند: int main() { // adds an int value with a double value: int n = 22; double p = ; p += n; cout << "p = " << p << ", n = " << n << endl; return 0; } مثال تبديل نوع: اين برنامه، يک نوع double را به نوع int تبديل مي‌کند: int main() { // casts a double value as an int: double v= ; int n; n = int(v); cout << "v = " << v << ", n = " << n << endl; return 0; }

38 13 – برخي از خطاهاي برنامه‌نويسي
13 – برخي از خطاهاي برنامه‌نويسي ‌«خطاي زمان کامپايل» اين قبيل خطاها که اغلب خطاهاي نحوي هستند ، توسط کامپايلر کشف مي‌شوند و به راحتي مي‌توان آن‌ها را رفع نمود. «خطاي زمان اجرا» کشف اينگونه خطاها به راحتي ممکن نيست و کامپايلر نيز چيزي راجع به آن نمي‌داند. برخي از خطاهاي زمان اجرا سبب مي‌شوند که برنامه به طور کامل متوقف شود و از کار بيفتد.

39 14- سرريزي عددي يک متغير هر قدر هم که گنجايش داشته باشد، بالاخره مقداري هست که از گنجايش آن متغير بيشتر باشد. اگر سعي کنيم در يک متغير مقداري قرار دهيم که از گنجايش آن متغير فراتر باشد، متغير «سرريز» مي‌شود،در چنين حالتي مي‌گوييم که خطاي سرريزي رخ داده است.

40 مثال 12 – 2 سرريزي عدد صحيح اين‌ برنامه‌ به طور مكرر n را در 1000 ضرب‌ مي‌كند تا سرانجام سرريز شود: int main() { //prints n until it overflows: int n =1000; cout << "n = " << n << endl; n *= 1000; // multiplies n by 1000 cout << " n = " << n << endl; return 0; } وقتي يک عدد صحيح سرريز شود، عدد سرريز شده به يک مقدار منفي «گردانيده» مي‌شود اما وقتي يک عدد مميز شناور سرريز شود، نماد inf به معناي بي‌نهايت را به دست مي‌دهد.

41 15 – خطاي گرد کردن خطاي‌ گرد كردن‌ نوع‌ ديگري‌ از خطاست‌ كه‌ اغلب‌ وقتي‌ رايانه‌ها روي‌ اعداد حقيقي‌ محاسبه‌ مي‌كنند، رخ‌ مي‌دهد. براي‌ مثال‌ عدد 1/3ممكن‌ است‌ به‌ صورت‌ ذخيره‌ شود كه‌ دقيقا معادل‌ 1/3 نيست‌. اين خطا از آن‌جا ناشي مي‌شود که اعدادي مثل 1/3 مقدار دقيق ندارند و رايانه نمي‌تواند اين مقدار را پيدا کند، پس نزديک‌ترين عدد قابل محاسبه را به جاي چنين اعدادي منظور مي‌کند. «هيچ‌گاه از متغير مميز شناور براي مقايسه برابري استفاده نکنيد» زيرا در متغيرهاي مميز شناور خطاي گرد کردن سبب مي‌شود که پاسخ با آن چه مورد نظر شماست متفاوت باشد.

42 16 – حوزۀ متغيرها اصطلاح «بلوک» در C++ واژه مناسبي است که مي‌توان به وسيلۀ آن حوزۀ متغير را مشخص نمود. يک بلوک برنامه، قسمتي از برنامه است که درون يک جفت علامت کروشه { } محدود شده است. انتخاب نام‌هاي نامفهوم يا ناقص سبب کاهش خوانايي برنامه و افزايش خطاهاي برنامه‌نويسي مي‌شود. استفاده از متغيرها در حوزۀ نامناسب هم سبب بروز خطاهايي مي‌شود. «حوزه متغير» محدوده‌اي است که يک متغير خاص اجازه دارد در آن محدوده به کار رود يا فراخواني شود.

43 حوزۀ يک متغير از محل اعلان آن شروع مي‌شود و تا پايان همان بلوک ادامه مي‌يابد. خارج از آن بلوک نمي‌توان به متغير دسترسي داشت. همچنين قبل از اين که متغير اعلان شود نمي‌توان آن را استفاده نمود. مي‌توانيم در يک برنامه، چند متغير متفاوت با يک نام داشته باشيم به شرطي که در حوزه‌هاي مشترک نباشند.

44 پايان جلسه دوم


Download ppt "بسم الله الرحمن الرحيم."

Similar presentations


Ads by Google