§1.2. C++ о‘zgarmaslar
Programma bajarilishi paytida qandaydir berilganlarni saqlab turish uchun о‘zgaruvchilar va о‘zgarmaslardan foydalaniladi.
О‘zgarmas (literal) – bu fiksirlangan sonni, satrni va belgini ifodalovchi leksemadir. О‘zgarmaslar beshta guruhga bо‘linadi – butun, haqiqiy (suzuvchi nuqtali), sanab о‘tiluvchi, belgi (literli) va satr («string», literli satr).
Kompilyator о‘zgarmasni leksema sifatida aniqlaydi, unga xotira-dan joy ajratadi, kо‘rinishi va qiymatiga (turiga) qarab mos guruhlarga bо‘ladi.
Butun о‘zgarmaslar quyidagi formatlarda bо‘ladi:
- о‘nlik son;
- sakkizlik son;
- о‘n oltilik son.
О‘nlik о‘zgarmas 0 raqamidan farqli raqamdan boshlanuvchi raqamlar ketma-ketligi va 0 hisoblanadi: 0; 123; 7987; 11.
Manfiy о‘zgarmas – bu ishorasiz о‘zgarmas bо‘lib, unga faqat ishorani о‘zgartirish amali qо‘llanilgan deb hisoblanadi.
Sakkizlik о‘zgarmas 0 raqamidan boshlanuvchi sakkizlik sanoq sistemasi (0,1,..,7) raqamlaridan tashkil topgan raqamlar ketma-ketligi:
023; 0777; 0.
О‘n oltilik о‘zgarmas Ox yoki OX belgilaridan boshlanadigan о‘n; oltilik sanoq sistemasi raqamlaridan iborat ketma-ketlik hisoblanadi:
Ox1A; OX9F2D; 0x23.
Harf belgilar ixtiyoriy registrlarda berilishi mumkin.
Kompilyator sonning qiymatiga qarab unga mos turni belgilaydi. Agar tilda belgilangan turlar programma tuzuvchini qanoatlantirmasa, u oshkor ravishda turni kо‘rsatishi mumkin. Buning uchun butun о‘zgarmas raqamlari oxiriga, probelsiz l yoki L (Long), u yoki U (unsigned) yoziladi. Zarur hollarda bitta о‘zgarmas uchun bu belgilarning ikkitasini ham ishlatish mumkin:
45 l u, 012U1, OxA2L.
Haqiqiy о‘zgarmaslar – suzuvchi nuqtali son bо‘lib, u ikki xil formatda berilishi mumkin:
- о‘nlik fiksirlangan nuqtali formatda. Bu kо‘rinishda son nuqta orqali ajratilgan butun va kasr qismlar kо‘rinishida bо‘ladi. Sonning butun yoki kasr qismi bо‘lmasligi mumkin, lekin nuqta albatta bо‘lishi kerak. Fikserlangan nuqtali о‘zgarmaslarga misollar: 24.56; 13.0; 66.; .87;
- eksponensial shaklda haqiqiy о‘zgarmas 6 qismdan iborat bо‘ladi:
1) butun qismi (о‘nli butun son);
2) о‘nli kasr nuqta belgisi;
3) kasr qismi (о‘nlik ishorasiz о‘zgarmas);
4) eksponenta belgisi ‘e’ yoki ‘E’;
5) о‘n darajasi kо‘rsatkichi (о‘nli butun son);
6) qо‘shimcha belgisi (‘F’ yoki f , ‘L’ yoki ‘l’ ).
Eksponensial shakldagi о‘zgarmas sonlarga misollar:
1e2; 5e+3; .25e4; 31.4e-1 .
Belgi о‘zgarmaslar qо‘shtirnoq (‘,’-apostroflar) ichiga olingan alohida belgilardan tashkil topadi va u char kalit sо‘zi bilan aniqlanadi. Belgi о‘zgarmas uchun xotirada bir bayt joy ajratiladi va unda butun son kо‘rinishidagi belgining ASCII kodi joylashadi. Quyidagilar belgi о‘zgarmaslarga misol bо‘ladi: ‘e’, ‘@’, ‘7’, ‘z’, ‘w’, ‘+’, ‘sh’, ‘*’, ‘a’, ‘s’.
Ayrim belgi о‘zgarmaslar ‘\’ belgisidan boshlanadi, bu belgi birinchidan, grafik kо‘rinishga ega bо‘lmagan о‘zgarmaslarni belgilaydi, ikkinchidan, maxsus vazifalar yuklangan belgilar – apostrof belgisi, savol belgisini (?), teskari yon chiziq belgisini (\) va ikkita kо‘shtirnoq belgisini (“) chop qilish uchun ishlatiladi. Undan tashqari, bu belgi orqali belgini kо‘rinishini emas, balki oshkor ravishda uning ASCII kodi sakkizlik yoki о‘n oltilik shaklda yozish mumkin. Bunday belgidan boshlangan belgilar escape ketma-ketliklar deyiladi.
C++ tilida qо‘shimcha ravishda wide harfli о‘zgarmaslar va kо‘p belgili о‘zgarmaslar aniqlangan. Wide harfli о‘zgarmaslar turi milliy kodlarni belgilash uchun kiritilgan bо‘lib, u shart kalit sо‘zi bilan beriladi, hamda xotirada 2 bayt joy egallaydi. Bu о‘zgarmas L belgisidan boshlanadi: L’\013\022’ , L/cc’.
Kо‘p belgili о‘zgarmas turi int bо‘lib, u tо‘rtta belgidan iborat bо‘lishi mumkin: ‘ abs’ , ‘ \001\002\003\004’.
Ikkita qо‘shtirnoq (“,”) ichiga olingan belgilar ketma-ketligi satr о‘zgarmas deyiladi: “bu satr о‘zgarmas va uning nomi string\n”
Satr ichida escape ketma-ketligi ham ishlatilishi mumkin, faqat bu ketma-ketlik apostrofsiz yoziladi.
Probel bilan ajratib yozilgan satrlar kompilyator tomonidan yagona satrga ulanadi:
“satr –bu belgilar massivi” /* bu satr keyingi satrga qо‘shiladi */ “, uning turi char[]”;
Bu yozuvga “ satr –bu belgilar massivi, uning turi char[]”; yozuvi bilan ekvivalent hisoblanadi. Uzun satrni bir nechta qatorga yozish mumkin va buning uchun qator oxirida ‘\’ belgisi qо‘yiladi.
Kо‘p miqdordagi, mantiqan bog‘langan о‘zgarmaslardan foydalanganda sanab о‘tiluvchi turdan foydalanilgani ma’qul. Sanab о‘tiluvchi о‘zgarmaslar enum kalit sо‘zi bilan aniqlanadi. Mazmuni bо‘yicha bu о‘zgarmaslar oddiy butun sonlardir. Sanab о‘tiluvchi о‘zgarmaslar C++ standarti bо‘yicha butun turdagi о‘zgarmaslar hisoblanadi. Har bir о‘zgarmasga (songa) mazmunli nom beriladi va bu identifikatorni programmaning boshqa joylarida nomlash uchun ishlatilishi mumkin emas. Sanab о‘tiluvchi tur qо‘yidagi kо‘rinishga ega:
enum { =, , … = };
Bu yerda enum – kalit sо‘z (inglizcha enumerate – sanamoq); - о‘zgarmaslar rо‘yxatining nomi; - butun qiymatli konstantalarning nomlari; shart bо‘lmagan inisializatsiya qiymati (ifoda).
Misol uchun hafta kunlari bilan bog‘liq masala yechishda hafta kunlari dush (dushanba), sesh (seshanba), chor (chorshanba), paysh (payshanba), juma (juma), shanba (shanba), yaksh (yakshanba) о‘zgarmaslarini ishlatish mumkin va ular sanab о‘tiluvchi tur yordamida bitta satrda yoziladi: enum Hafta{dush, sesh chor, paysh, juma, shanba,yaksh};
Sanab о‘tiluvchi о‘zgarmaslar quyidagi xossaga ega: agar о‘zgarmas qiymati kо‘rsatilmagan bо‘lsa, u oldingi о‘zgarmas qiymatidan bittaga ortiq bо‘ladi. Kelishuv bо‘yicha birinchi о‘zgarmas qiymati 0 bо‘ladi.
Do'stlaringiz bilan baham: |