أهلا بك أخى حيدر أتمنى أن تكون على خير حال
|
ما هي ميزة المتغير من نوع const و نوع float ؟
|
أنت تعلم أن المتغيرات المستخدمة فى الكود يقوم البيك بحفظها فى الرام وهى ذاكرة تتغير محتوياتها حسب سريان الكود
أما إذا تم تعريف المتغير على أنه const فسقوم البيك بحفظه فى الروم وهى ذاكرة دائمة لاتتغير محتوياتها
وقد تم تعريف المصفوفة من النوع const لعدم شغل مساحة كبيرة من الرام خاصة وأن ذلك البرنامج يستخدم العديد من المتغيرات
جرب أن تمسح كلمة const من الأوامر التالية وانظر ماذا سيحدث .....
كود:
const char number[] ={'y','/','9','8','7','x','6','5','4','-','3','2','1','+','=','0','y'} ;
const unsigned int number2[]={'y','/', 9 , 8 , 7 ,'x', 6 , 5 , 4 ,'-', 3 , 2 , 1 ,'+','=', 0 ,'y'} ;
const float number3[]={'y','/', 9 , 8 , 7 ,'x', 6 , 5 , 4 ,'-', 3 , 2 , 1 ,'+','=', 0 ,'y'} ;
ستجد أنه عند عمل build للبرنامج ستظهر رسالة خطأ not enough ram
أما التعريف float لأن المتغير من النوع float يمكنك من التعامل مع الأعداد الكسرية ونحن بحاجة إلى ذلك كى تكون عملية القسمة صحيحة .....لماذا ؟
لأن خارج قسمة int/int سيعطى int بمعنى أنك لو قسمت 8 على 6 سيكون الناتج 1 وهو مالانريده لذلك قمنا بتعريف متغيرين من النوع float يمثلان العددين ويكون ناتج القسمة أيضا من النوع float وبذلك سيكون خارج قسمة 8 على 6 ( بعد تعريفهما على أنهما float ) هى 1.3 وهو الناتج الصحيح
انظر كيف تم تعريف المتغيرات المستخدمة فى عملية القسمة فقط
كود:
float x3 = 0 , x4 = 0 , result2 = 0 ;
طبعا العمليات الأخرى( الجمع والطرح والضرب ) سيكون التعريف integer وليس float
ما هو عمل هذا الكود
كود:
floattostr(result2 , txt ) ;
|
هذا الأمر يأخذ متغيرا float ويحوله إلى string من النوع char حتى نتمكن من عرضها على شاشة lcd لأنه كما تعرف لابد أن يكون المعروض على الشاشة من النوع char ولابد أن تكون تلك ال string مكونة من 13 عنصر على الأقل
لذلك تم تعريفها فى بداية البرنامج
كود:
unsigned char m = 0 , m1 = 0 , txt[13] , lcd[13] , i = 0 , j = 0 ;
وبالمثل الأمر
كود:
inttostr( result, txt ) ;
يأخذ متغيرا من النوع integer ويحوله إلى مصفوفة من النوع char ولابد ان يكون بها على الأقل 7 عناصر
لاحظ أن المتغير result2 يحوى الناتج من عملية القسمة وهو من النوع float
أما المتغير result يحوى الناتج من أى عملية أخرى وهو من النوع integer
أتمنى أن أكون قد وفقت فى الإجابة أخى حيدر ..
إن بقى شىء لم يتضح أرجو أن تذكره وآسف على تأخرى فى الإجابة لظروف ليست بيدى.......