C tiplarni o‘zgartirish
Tiplarni o‘zgartirish
Ba’zan bir ma’lumot tipidagi qiymatni boshqa tipga o‘zgartirishga to‘g‘ri keladi. Bu tiplarni o‘zgartirish (type conversion) deb ataladi.
Masalan, ikki butun sonni — 5 ni 2 ga bo‘lmoqchi bo‘lsangiz, natija 2.5 bo‘lishini kutasiz. Biroq biz suzuvchi nuqtali qiymatlar bilan emas, butun sonlar bilan ishlayotganimiz sababli, quyidagi misol shunchaki 2 ni chiqaradi:
Misol
int x = 5;
int y = 2;
int sum = 5 / 2;
printf("%d", sum); // Outputs 2
O‘zingiz sinab ko‘ring »
To‘g‘ri natija olish uchun tiplarni o‘zgartirish qanday ishlashini bilishingiz kerak.
C tilida o‘zgartirishning ikki turi mavjud:
- Yashirin (implicit) o‘zgartirish (avtomatik)
- Aniq (explicit) o‘zgartirish (qo‘lda)
Yashirin (implicit) o‘zgartirish
Yashirin o‘zgartirish bir tipdagi qiymatni boshqa tipga o‘zlashtirganingizda kompilyator tomonidan avtomatik ravishda bajariladi.
Masalan, int qiymatni
float tipiga o‘zlashtirsangiz:
Misol
// Automatic conversion: int to float
float myFloat = 9;
printf("%f", myFloat); // 9.000000
O‘zingiz sinab ko‘ring »
Ko‘rib turganingizdek, kompilyator 9 int qiymatini avtomatik ravishda 9.000000 float qiymatiga o‘zgartiradi.
Bu xavfli bo‘lishi mumkin, chunki ayrim vaziyatlarda muayyan qiymatlar ustidan nazoratni yo‘qotishingiz mumkin.
Ayniqsa, aksincha bo‘lsa — quyidagi misol 9.99 float qiymatini avtomatik ravishda 9 int qiymatiga o‘zgartiradi:
Misol
// Automatic conversion: float to int
int myInt = 9.99;
printf("%d", myInt); // 9
O‘zingiz sinab ko‘ring »
.99 ga nima bo‘ldi? Bu ma’lumot dasturimizda kerak bo‘lishi mumkin edi-ku! Shuning uchun ehtiyot bo‘ling. Kutilmagan natijalarga yo‘l qo‘ymaslik uchun kompilyator bunday vaziyatlarda qanday ishlashini bilish muhim.
Yana bir misol: agar ikki butun sonni — 5 ni 2 ga bo‘lsangiz, natija 2.5 ekanini bilasiz. Sahifa boshidan ma’lumki, natijani butun son sifatida saqlasangiz, faqat 2 soni ko‘rsatiladi. Demak, natijani float yoki double sifatida saqlash yaxshiroq bo‘lardi, to‘g‘rimi?
Nega natija 2.5 emas, balki 2.00000? Chunki bo‘lish amalida 5 va 2 hali ham butun sonlar. Bunday holatda butun son qiymatlarini suzuvchi nuqtali qiymatlarga qo‘lda o‘zgartirishingiz kerak (quyiga qarang).
Aniq (explicit) o‘zgartirish
Aniq o‘zgartirish qiymat oldiga tipni qavs ichida () yozish orqali qo‘lda bajariladi.
Yuqoridagi misoldagi muammomizni hisobga olsak, endi to‘g‘ri natijani olishimiz mumkin:
Misol
// Manual conversion: int to float
float sum = (float) 5 / 2;
printf("%f", sum); // 2.500000
O‘zingiz sinab ko‘ring »
Tipni o‘zgaruvchi oldiga ham qo‘yishingiz mumkin:
Misol
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%f", sum); // 2.500000
O‘zingiz sinab ko‘ring »
Oldingi bobda "o‘nli kasr aniqligi" haqida bilib olganingiz uchun, xohlasangiz, ortiqcha nollarni olib tashlab, natijani yanada ixcham qilishingiz mumkin:
Misol
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%.1f", sum); // 2.5
O‘zingiz sinab ko‘ring »
Hayotiy misol
Quyida ma’lumot tiplari va tiplarni o‘zgartirishning hayotiy misoli keltirilgan: unda o‘yindagi maksimal ballga nisbatan foydalanuvchi ballining foizini hisoblaydigan dastur yaratamiz:
Misol
// Set the maximum possible score in the game to 500
int maxScore = 500;
// The actual score of the user
int userScore = 423;
/* Calculate the percantage of the user's score in relation to the maximum available score.
Convert userScore to float to make sure that the division is accurate */
float percentage = (float) userScore / maxScore * 100.0;
// Print the percentage
printf("User's percentage is %.2f", percentage);
O‘zingiz sinab ko‘ring »
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
