أنواع البيانات والمتغيرات : Data Types and Variables

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

أنواع البيانات والمتغيرات : Data Types and Variables

مُساهمة من طرف Admin في الإثنين أبريل 20, 2015 7:14 pm

أنواع البيانات والمتغيرات : Data Types and Variables
تستخدم لغة السى أنوع عديدة من البيانات تشمل الأحرف characters و الأعداد الصحيحة
integer numbers والأعداد الحقيقية ( الغير صحيحة) float numbers . فى لغة السى ، يجب الأعلان (تعريف) declare عن المتغير قبل أن تستخدمه . عند الإعلان عن المتغير يتم حجز مساحة فى الذاكرة مناسبة لنوعه .

المتغيرات فى لغة السى
المتغيرات هى مجموعة من البايتات Bytes يتم حجزها فى الذاكرة العشوائية RAM , حيث يتم وضع قيم متغيرة فى تلك البايتات المحجوزة ويمكن استرجاعها فى أى وقت . كل بايت يتم الوصول اليه من خلال عنوان address . تفقد ذاكرة RAM جميع بياناتها عند قطع التيار .
ذاكرة RAM عبارة عن رقاقة Chip تحتوى على عدد من الترانزستورات والمكثفات تقدر بالملايين , حيث كل ترانزستور ومكثف يشكلان وحدة ذاكرة تسمى بت(خانة) Bit , يحمل هذا البت إما القيمة صفر "0" أو القيمة واحد "1" . كل 8 بتات تشكل واحد بايت Byte وكل بايت له عنوان يمكن الوصول إليه والتغيير فى محتوياته ، أى أن الذاكرة عبارة عن عناوين متسلسلة لكل عنوان قيمة متغيرة كما فى الشكل التالى .



فى لغة السى ، يوجد عدة أنواع من المتغيرات والثوابت , منها متغيرات خاصة بالأعداد الصحيحة integer وأخرى خاصة بالأعداد الحقيقية float وثالثة خاصة بالأحرف characters و.... , ويجب الإعلان عن المتغيرات والثوابت قبل استعمالها (كأنك تحجز مكانا مسبقا " لوضع قيمة فيما بعد" ) .
طريقة الإعلان عن متغير :
للإعلان عن المتغير يتم كتابة نوع المتغير ثم اسم المتغير ثم القيمة التى سيحتويها المتغير (فى حالة إعطاءه قيمة مباشرة فى البداية ) كما فى الشكل التالى .



نوع المتغير Variable Type :
توجد عدة أنواع من المتغيرات لا تختلف عن بعضها إلا فى الحجم وهذا يعنى أنه عند الإعلان عن المتغير يمكننا أن نعطيه حرفا بدلا من القيمة .
تعريف المتغيرات والثوابت والمعرفات :
ينبعى التعريف الصحيح (الاسم والنوع المناسب) لجميع المتغيرات والثوابت المستخدمة فى البرنامج . نفس الشىء ينطبق على الدوال والمعرفات .
البيانات الأساسية يمكن أن تكون بطول 8 أو 16 أو 32 بت ، ونظراللخصائص الخاصة للميكروكونترولر ، يمكن أيضا تعريف متغيرات بطول بت واحدة .

مدى المتغيرات الأساسية :
• متغير 8 بت : مثل متغير الأحرف ويسمى char ( أو int8) يكون مداه من 0 إلى 255 .
• متغير 16 بت : مثل متغير الأعداد الصحيحة الطويلة ويسمى long int (أو 1nt16) يكون مداه من 0 إلى 65535 .
• متغير 32 بت : مثل متغير الأعداد الحقيقية (التى تحتوى على كسر عشرى) ويسمى float (أو int32) يكون مداها +/- 65535 .
• متغير بت واحد : وهو يأخذ إما القيمة صفر "0" او القيمة واحد "1" ويسمى short (أو int1) .
فيما يلى جدول يبين أنواع المتغيرات بلغة السى القياسية ، ولغة السى مع المترجم CCS C :



المتغيرات ذات القيم السالبة :
المتغيرات من نوع long int قد تحتوى أو قد لا تحتوى على علامة (إشارة) السالب . للتأكد من أن المتغير يكون موجب دائما ، نستخدم كلمة "بدون إشارة" unsigned قبل تعريفه ، أما إذا كان من الضرورى معالجة أعداد سالبة فأننا نستخدم كلمة "بإشارة" signed قبل تعريفة .
مثال :

الكود:

unsigned long int time; // Time will from 0 to 65535
signed long int space; // Space will from -32768 to 32767


لاحظ أن :
• استخدام signed تخفض مجال المتغير إلى النصف .
• إذا لم يتم استخدام نوع محدد فإن المتغير يكون من النوع الافتراضى وهو unsigned .
• نوع char دائما يكون unsigned .
• النوع float يمكن أن يكون سالب أو موجب (ينصع بعدم استخدامه إلا عند الضرورة) .

مثال لإعلان (تعريف) المتغيرات والثوابت :
لإعلان متغير ينبغى أن نتبع الترتيب التالى : من اليسار إلى اليمين : النوع ثم الاسم "Type Name"
مثال :

الكود:

Type Name
char  time;       // The variable 'time' is from 0 to 255

يمكن إعلان مجموعة متغيرات من نفس النوع فى سطر واحد كما يلى :

الكود:

char i, j, k; // Declares that i, j and k are of type char.

طريقة كتابة أسماء المتغيرات والثوابت والدوال :
جميع مسميات المتغيرات والثوابت والدوال ينبغى أن تبدأ بحرف أبجدى letter ، وأن يكون له 32 حرف كحد أقصى ولا يستخدم الأحرف الخاصة او أحرف التحكم ( مثل ! , \ , ? , % , ….) .
تحدثنا سابقا عن عناوين المتغيرات , توجد ملاحظة قوية هنا يجب التنبيه بها وهى أننا نرى المتغيرات أسماء أما الجهاز فيراه عناوين , الإسم مجرد أداة استعملت لتسهيل عملية الوصول إلى تلك العناوين بدون اللجوء إلى عناوين إنما أسماء واضحة توضح سبب الإعلان عنها .
لإسم المتغير حدود لا يجب تجاوزها وهى :
• أن لا يتجاوز اسم المتغير رأكثر من 31 حرف .
• أن لا يبدأ اسم المتغير بأرقام .
• أن لا يكون اسم المتغير يحتوى على مؤثرات مثل الجمع والطرح و...
• أن لا يكون اسم المتغير يحتوى على رموز مثل % و # و... باستثناء رمز الشرطة التحتية (-) .
• أن لا يكون اسم المتغير مستعمل سابقا فى دالة أو متغير آخر .
• أن لا يكون اسم المتغير من أسماء الكلمات المحجوزة .
ملحوظة هامة :
المترجم حساس لشكل الحرف ، فالكلمات TEST و Test و test ، بالنسبة للمترجم تكون لثلاثة متغيرات مختلفة .
من المفضل ، كممارسة عملية ، استخدام اسماء بأحرف مختلفة للتفرقة بين مسميات المتغيرات والثوابت والدوال ، كما فى الأمثلة التالية :

الكود:

PORTB  for registers
TimeMs for functions
value for RAM variables

قيمة المتغير Variable Value :
يجب مراعاة قيمة المتغير حسب نوعه , فمثلا لا يمكن أن نعطى للمتغير int قيمة عدد حقيقى float . قيمة المتغير يمكن أن نعطيها له مباشرة بعد الإعلان عنه أو نقوم بالإعلان عنه ونضع به قيمة فيما بعد .
جميع المتغيرات يمكن استخدامها بعد الإعلان عنها . المثال التالى يبين متغيران من نوع الحرف char اسمهما w و x ، ولقد تم الإعلان عنهما وتعيين القيم 5 و 9 لهما على الترتيب :

الكود:

char   w = 5, x = 9;


تخصيص (تعيين) القيم للمتغيرات :
يتم تخصيص قيمة للمتغير كما فى المثال التالى :

الكود:

time = 123;

فى هذا المثال ، المتغير المسمى time يتم استبداله بالقيمة العشرية "123" .

ملحوظة هامة :
القيم الابتدائية للمتغيرات :
ينبغى دائما أن نحدد القيم الابتدائية لكل متغير فى البرنامج قبل استخدامه ، لأنه لا شىء يضمن أنه يكون بصفر عند إعادة التشغيل reset .

المتغيرات الشاملة (العمومية) global والمتغيرات المحلية local :
يوجد طريقتان أساسيتان لحجز ذاكرة للمتغيرات :
• طريقة المتغيرات الشاملة Global :
المتغيرات الشاملة يمكن الوصول إليها من خلال جميع الدوال الموجودة فى البرنامج . هذا يعنى أن أى دالة فى البرنامج يمكن أن تستخدم هذه المتغيرات الشاملة (العمومية) .
• المتغيرات المحلية Local :
المتغيرات المحلية يمكن أن نصل إليها فقط من داخل الدالة التى قمنا بإنشائها بها . وهذا يعنى ان الدالة التى أنشأنا فيها المتغير المحلى هى الوحيدة التى يمكن أن تستخدمها .
مثال :

الكود:


char A, B, C; // A, B and C are global variables, since they are outside
                      // Any function

main ()
{
  A = 0;                            // Make A = 0
  Time ();                        // Call  Time function
  Wait ();                        // Call Wait function
}

 Time ()
    {
    char J;                // Create a variable called J.
                                // Only Time () function can use it
    J = A;
    }

Wait ()
{
    char X;              // Create a variable called X.
                                // Only function  Wait () can use it
    X = A;
  X = J; // Error: The variable J does not exist for this function
 }

الميزة الرئيسية فى استخدام المتغيرات المحلية هى أن نفس ذاكرة RAM المحتلة بمتغيرات سوف تتقاسم مع المتغيرات المحلية الأخرى ، مما يتيح زيادة مساحة الذاكرة .
الثوابت Constants :
يتم إعلان القيم التى سوف لا تتغير بواسطة البرنامج باستخدام كلمة const كما فى المثال التالى :

الكود:

float const pi = 3.14 ;

الدوال Functions :

Admin
Admin

عدد المساهمات : 985
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى