C Proqramlaşdırmasında tipqazlaşdırma

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

 

Tətbiqetmə

Fərz edək ki, biri tam ədədi (bütöv ədədi), digəri də ondalık ədədi olduğu iki ədədi əlavə etməliyik. Sonra nəticə bir onluq ədədi olacaqdır. Ancaq təsəvvür edin ki, bir proqramda nəticə növünü tam olaraq elan etmişik, amma əslində üzən ədədi saxlamalıdır. Bu vəziyyətdə, nəticə dəyişəninin məlumat tipini orijinal tam dəyərindən üzmək üçün əvvəlcədən yazaraq ləğv edirik.

Aşağıdakı proqramı heç bir yayım olmadan nəzərdən keçirin. Burada rəqəmlər fərqli məlumat tiplərinə sahib olmasına baxmayaraq əlavə olunur. Ancaq proqramın altından tərtib etdikdə, məlumat itkisi olacağını söyləyən bir xəbərdarlıq mesajı göstərilir. Nəticəni yoxladığımızda düzgün nəticə göstərməsinə baxmayaraq (% d istifadə edildikdə - intResult məlumat növü), lakin onluq dəyərləri göstərə bilmir. İkinci vəziyyətdə, məlumat float kimi göstərməyə çalışdığımızda nəticə float olsa da, intResult düzgün nəticəni göstərə bilmir. Bunun əvəzinə, cavabı məlumatların sıfır itkisi kimi göstərir. Buna görə nəticəni yazdırarkən fərqli məlumat tipi qeydlərindən istifadə etmək düzgün nəticə verməyəcəkdir. Avtomatik olaraq məlumat tipini çevirmir, əksinə məlumat itkisi var.

//Program without typecasting
#include 

void main(){
	int intNum1 = 10, intResult =0;
	float flNum2 = 22.45;

	intResult = intNum1 + flNum2;

	printf("Result = %d\n", intResult); // no typecasting of result
	printf("Result = %f\n", intResult); // datatype is considered as float here, but not type casted
}

Yuxarıda göstərilən məsələnin öhdəsindən gəlmək üçün düzgün nəticəni əldə etmək üçün dəyişənlərin məlumat növünü açıq şəkildə dəyişdirməliyik. Dəyişənin məlumat növünün dəyişdirilməsi yalnız həmin ifadə üçün keçərlidir. Bu ifadə yerinə yetirildikdən sonra, dəyişən yenə də elan edilmiş orijinal məlumat tipinə sahib olacaqdır. Yuxarıdakı nümunədə, intResultun üzmək üçün tökülməsi lazımdır.

//Program without typecasting
#include 

void main(){
	int intNum1 = 10;
	float flNum2 = 22.45, flResult=0;

 	flResult =intNum1 + flNum2; // autoamatically type casts the result value now

 	printf("Result = %f\n", flResult); 
}

Şəkil 1: Xəbərdarlıq mesajı yoxdur

Yuxarıdakı halda, intNum1-in məlumat növü, şamandıra atılan implicilty növüdür və sonra üzən nəticə əldə etmək üçün hər iki rəqəm əlavə olunur. Bunları açıq şəkildə üzmək və ya başqa bir məlumat növü üçün yazmaq lazımdırsa, istədiyimiz məlumat tipini dəyişən addan əvvəl açıq şəkildə qoymalıyıq.

//Program without typecasting
#include 

void main(){
	int intNum1 = 10;
	float flNum2 = 22.45, flResult=0;

 flResult =(float)intNum1 + flNum2; // explicitly typecast intNum1 to float

 printf("Result = %f\n", flResult); 
}

Burada da nəticə eyni olacaq və xəbərdarlıq mesajı da olmayacaq.

Dəyişənləri aşağı ölçülü dəyərdən daha yüksək ölçülü dəyərə yaza bilərik. Buna tam təbliğ deyilir. Məlumat növünün ölçüsü aşağıdakı kimidir:

Bir rəqəmi başqa bir xarakterə əlavə etdiyimiz başqa bir nümunəni nəzərdən keçirək. Burada simvol 1 baytdır və dolayısı ilə tam ədədə çevrilir. Yəni əlifba ASCII dəyərini almaq üçün çevrilir və rəqəmlə əlavə olunur.

//Program without typecasting
#include 

void main(){
	int intNum = 10, intResult;
	char chrAlpha = 'A';
                                                 
	intResult = intNum + chrAlpha; // implicilty converts chrAlpha into integer

	printf("Ascii Value of 'A' is : %d\n", chrAlpha);
	printf("Result = %d\n", intResult); 
}

Crack Sistemi Dizayn Müsahibələri
Translate »