|
O‘zbekiston respublikasi oliy ta’lim, fan va innovatsiyalar vazirligi navoiy davlat pedagogika instituti
|
bet | 77/178 | Sana | 13.05.2024 | Hajmi | 14,73 Mb. | | #230019 |
Bog'liq Darslik 01.05.2023Tiplarni almashtirish. Turli tipdagi elementlarni o‘z ichiga olgan arifmetik ifodalarda C ++ Builder hisoblar vaqtida avtomatik ravishda tipni o‘zgartirishni amalga oshiradi. Bu standart konvertatsiya har doim quyidagi qoidaga muvofiq amalga oshiriladi: agar ifodada har xil tipdagi operandlar mavjud bo‘lsa, u holda "pastroq" turdagi operandning tipi "yuqori" tipdagi operand turiga o‘zgartiriladi. Ya’ni, unchalik aniq bo‘lmagan tip aniqroq tipga almashtiriladi. Masalan, agar amalda qisqa butun va uzun butun son ishtirok etsa, u holda qisqas butun son uzunga almashtiriladi; agar butun son va haqiqiy operandlar qatnashsa, unda butun son haqiqiyga o‘tkaziladi va hokazo. Bunday turdagi konvertatsiyadan so‘ng ikkala operand ham bir xil tipga ega bo‘ladi. Shu bilan birga amal natijasi ham ushbu tipga tegishli hisoblanadi.
Bular faqat arifmetik amallar uchungina taalluqlidir, lekin o‘zlashtirish amalida qo‘llanilmaydi. O‘zlashtirish amalida ifodaning natija tipi chap operand tipiga o‘tkaziladi. Bunda agar chap operandning tipi ifoda natijasi tipidan "kichikroq" bo‘lsa, aniqlik yo‘qolishi yoki hatto noto‘g‘ri natija bo‘lishi mumkin.
Misol. Yopiq turdagi avtomatik konvertatsiya qilish.
double а = 5.4, b = 2;
int с = а * b;
Ushbu amal natijasida c o‘zgaruvchisi qiymati 10 ga teng bo‘ladi, lekin haqiqiy qiymat 10.8 ga teng bo‘lishi kerak. Bu qiymat aslida a * b ni ko‘paytirish natijasida hisoblab chiqiladi, lekin c butun sonli o‘zgaruvchi bo‘lganligi sababli, kasr qismi tushirib qoldiriladi.
Misol.
int m =1, n=2;
double A = m /n;
Amal natijasida A = 0 teng bo‘ladi. Chunki m va n butun sonli o‘zgaruvchilar bo‘lgani sababli, m / n bo‘linmasi kasr qismini tashlab, natijada nolga teng bo‘lgan butun son hosil bo‘ladi.
Misol.
int m = 1;
double n = 2;
double A = m / n;
Ushbu amal to‘g‘ri natijani beradi, ya’ni A = 0,5. Bu holda bo‘lish amalining operandlaridan biri double tipiga ega bo‘lganligi sababli, ikkinchisining tipi, butun operand ham doublega o‘tkaziladi va bo‘linish natijasi double tipiga ega bo‘ladi.
Misol:
double а = 300, b = 200;
short с = а * b;
Bunda amal natijasida c o‘zgaruvchisining qiymati kutilgan 60,000 o‘rniga -5536 ga teng bo‘ladi. Gap shundaki, short tipidagi o‘zgaruvchi 32,767 dan oshmaydigan qiymatni saqlay oladi. Yuqoridagi ifodaning o‘ng tomoni 60 000 natijani beradi. Keyin uni short tipidagi o‘zgaruvchiga o‘zlashirish butunlay noto‘g‘ri natija beradi.
Yuqoridagi ba’zi misollardan ko‘rinib turibdiki, tiplarni yashirin almashtirish har doim ham kerakli natijani bermaydi. Buni tipni aniq almashtirish amali yordamida tuzatish mumkin. Bunda belgilangan tipga o‘tkazmoqchi bo‘lgan qiymatdan oldin (tip) sifatida yoziladi.
Misol:
int m = 1, n = 2;
double A = m / n;
Ushbu amal natijasida A o‘zgaruvchisi xato qiymat qabul qilgan edi. Buni quyidagi dastur kodi yordamida tuzatish mumkin:
double A = (double)m / n;
Ushbu dastur kodida qo‘shimcha amal qo‘llaniladigan. Bunda m o‘zgaruvchisi double tipidagi haqiqiy qiymat sifatida qaraladi. Keyin n o‘zgaruvchisi ham bilvosita double tipida o‘tkaziladi, shuning uchun bo‘linish endi butun sonlar bilan emas, balki haqiqiy sonlar bilan amalga oshiriladi. Natijada esa to‘g‘ri qiymat 0,5 hosil bo‘ladi.
Bundan tashqari C++ Builder dasturlash muhitida tiplarni bir turdan ikkinchisiga almashtirish ham mumkin. Buning uchun toifa o‘zgartirish funksiyalaridan foydalaniladi. Quyidagi jadvalda eng ko‘p foydalaniladigan toifa o‘zgartirish funksiyalari keltirilgan.
|
| |