A Crash Course in C - Part 1

Data types and operators.

إعداد بيئة البرمجة

البرمجة بلغة C لا تحتاج غير محرر نصوص Text editor لنقوم بالكتابة عليه ومترجم للغة الألة Compiler يحول الأكواد التي قومنا بكتابتها الي تعليمات يمكن تنفيذها من قبل وحدة المعالجة المركزية ومُربط Linker ليقوم بتجميع الملفات التي تم إنشائها من قبل الـ Compiler في ملف تنفيذي يمكن تشغيله علي نظام التشغيل.

ولكن هناك طريقة افضل من استخدام تلك المكونات مفصولة وهي استخدام بيئة تطوير متكاملة Integrated Development Environment IDE والتي ستسهل عملية الكتابة والتحويل الي ملف تنفيذي. ليس علي القاريء ان يلتزم ببيئة تطوير محددة فهناك العديد من البيئات المتوافرة بشكل مجاني مغلق او مفتوح المصدر ولكن في شرح الأمثلة سيتم استخدام CodeBlocks. يمكنك تحميله من هنا: http://www.codeblocks.org/downloads/26 ان كنت علي نظام ويندوز ولا تمتلك MinGW بشكل مسبق قم بختيار codeblocks-17.12mingw-setup.exe

بعد تنصيب CodeBlocks قم بفتحه وانشيء مشروع جديد من File -> New -> Project -> Console Application -> Go

newprog

بعد ذلك اختر C بدلا من C++ وقم بتسمية المشروع الأول لك اي اسم كمثال Hello world Project واترك الإعدادات التالية كما هي بدون تعديل ثم اضغط Finish وسيتم انشاء المشروع.

لتشغيل المشروع قم بالضغط علي Build and Run

FirstRun

 

البرنامج الأول

برنامج الـ C ايا كان حجمه يتكون من متغيرات Variables ودوال Functions. والدالة تحتوي الشروط و الأوامر التي سيتم تنفيذها والتي تحدد طريقة عمل البرنامج بينما المتغيرات تقوم بتخزين المعلومات اثناء عملية تنفيذ البرنامح. البرنامج التالي هو احد ابسط البرامج التي يمكن كتابتها بلغة C:

السطر الأول والثاني من البرنامج يحتوي علي التوجيه <..>include# مع اختلاف المحتوي بين <> والذي يمثل الملف الرأسي Header File المراد استخدامه داخل برنامجنا. والملفات الرأسية تحتوي علي ثوابت ودوال تسهل علينا البرمجة وتنتهي دائمنا بـ h.

في السطر الرابع يوجد اسم الدالة ()main وهي الدالة الرئيسية لأي مشروع ومنها يبدأ تنفيذ البرنامج. اما القوسين في اسم الدالة فيدلان علي أنها دالة (دالة بدون وسائط في هذه الحالة) وليست متغير او ثابت. وقد تأتي الدالة main في عدة اشكال اشهرهم:

و تعني ان الدالة لا تقبل وسائط. او في الشكل التالي:

و يعني ان الدالة ستقبل وسائط الدالة الرئيسية Command line arguments. مما يمكننا من تمرير الوسائط للبرنامج عن طريق الـ Console كمثال:

 

وقبل اسم الدالة يتم تحديد نوع البيانات التي سترجعها الدالة في هذه الحالة تم استخدام int وهو ما يحدد القيمة المرجعة كرقم صحيح يساوي 0.

في السطر الخامس والثامن يوجد الحاضنات Braces ويتمثلان في {…} ويطلق علي ما بينهم Block وهو ما سيتم تنفيذه عند استدعاء الدالة داخل البرنامج.

في السطر السادس يوجد الدالة printf وهي دالة تابعة للملف الرأسي stdio.h, وتقوم تلك الدالة بطبع الوسائط التي يتم تمريرها لها الي الشاشة، في مثالنا السابق سيتم طبع كلمة !Hello world متبوعة بسطر جديد n\. وفي نهاية اي سطر داخل الـ Block الخاص بالدالة يتم وضع الفاصلة المنقوطة ; و تعني نهاية السطر او التعليمة.

في السطر السابع يوجد كلمة return وهي ما تحدد القيمة المرجعة بعد انتهاء تنفيذ الدالة وتتوافق مع نوع البيانات الذي تم تحديده بشكل مسبق عن طريق استخدام int. ففي تلك الحالة سيتم إرجاع القيمة 0، وبسبب اننا داخل الدالة main وإنتهاء تنفيذها يعني انتهاء تنفيذ البرنامج نفسه سيتم إرجاع تلك القيمة الي الحاسوب والقيمة 0 في هذه الحالة تعني انه تم الأنتهاء من تنفيذ البرنامج بدون اي اخطاء او مشاكل.

 

الأنواع والمؤثرات Types and Operators

المتغيرات Variables والثوابت Constants هي كائنات البيانات الأساسية Basic Data Objects التي يتم معالجتها في البرنامج. عملية التعريف Declaration يتم تنفيذها للتعريف عن المتغيرات والثوابت التي سيتم استخدامها اثناء عملية التشغيل ومن اي نوع ستكون تلك المتغيرات والثوابت بالأضافة الي إمكانية تعيين قيمة مبدئية لها Initial Value. اما المؤثرات Operators فتحدد ما سيتم فعله بتلك المتغيرات والثوابت، ويحدد نوع المتغيرات والثوابت انواع البيانات التي يمكن ان تحتويها وما العمليات التي يمكن ان تتم عليها.

 

المعرفات Identifiers

المعرفات مثال اسماء المتغيرات والدوال تتكون من احرف وارقام مع مراعاة ان اول خانة في اسم المُعرف يجب ان تكون حرفا او _ وان المتغيرات في لغة C تعتبر حساسة لحالة الأحرف case-sensitive فكمثال المتغير Var يختلف عن المتغير var عن المتغير vaR وهكذا ..

الأنواع Types

ويحمل كل مُعرف من المعرفات نوع، يحدد ذلك النوع البيانات التي يمكن للمُعرف ان يحتويها وكيف سيتم تخزين تلك البيانات داخل الذاكرة وما هي العمليات التي يمكن تنفيذها عليه، وتحتوي لغة C علي ثلاث انواع اساسية تتمثل في الأحرف characters والأرقام الصحيحة integers والأرقام الغير صحيحة floating-point. الجدول التالي يوضح نوع المعرف والحجم الذي يحتاجه لتخزين البيانات

sizetable

من الجدول السابق يمكننا تقسيم الأنواع حسب الحجم علي الترتيب التالي:

البرنامج التالي يوضح عدد الـ Bytes بستخدام الـ sizeof operator. ومع انه يشبه الي حد ما الدوال الي انه ليس دالة لكنه كلمة محجوزة Keyword.

sof

 

الفرق بين signed وunsigned

اثناء كتابة البرنامج يحتاج المبرمج احيانا الي التغيير في طريقة استخدام مساحة المتغيرات فيمكنه استغلال الـ most-significant-bit والتي يتم استخدامها كـ Sign-bit للتمييز بين البيانات السالبة والموجبة. هذا يجعل المتغير موجب دائما ويضاعف مساحته عن طريق استخدام الـ type specifiers

علي النحو التالي

المثال التالي يوضح الفرق بين ان يكون المتغير signed وunsigned

Signedandunsigned

لاحظ انه لا فرق بين كتابة signed من عدم كتابتها بسبب ان الأرقام تكون signed من الأصل وكيف تم التعامل مع الـ most-significant-bit في الحالتين.

الثوابت Constants

المتغيرات يمكن أن تغيير قيمتها بعد تعينها فكمثال:

بينما الثوابت التي يتم تعينها عن طريق الـ Qualifier المسمي const لا يمكن تغيير قيمتها بعد تعينها

كذلك يمكن تعيين الثوابت عن طريق الموجه directive المسمي define# بالشكل التالي

definedirective

و تسمي الثوابت في تلك الحالة ثوابت رمزية symbolic constants لأنه يتم تبديل اسمها بقيمتها اثناء عملية التجميع، سيتم التحدث تفصيلا عن عملية التجميع في الأجزاء القادمة.

 

العمليات الحسابية Arithmetic Operations

تنقسم العمليات الحسابية الي نوعين احادي unary وثنائي binary. في الـ binary يمكننا استخدام المؤثرات operators التالية:

مثال:

binaryarth

اما في الـ unary فيتم أستخدام المؤثرات operators التالية:

مثال:

unaryarth

و يمكن استبدال الـ unary operators علي النحو التالي:

لاحظ اننا في تلك الحالة من يحدد القيمة التي سيتم اضافتها فيمكن وضع اي قيمة اخري مثال:

 

المؤثرات العلاقية والمنطقية Relational and Logical Operations

المؤثرات العلاقية هي مؤثرات تستخدم في المقارنة بين قيمة وقيمة أخري, حيث تكون النتيجة إما صحيحة True ويتم تمثيلها بالرقم 1 او خاطئة False ويتم تمثيلها بالرقم 0.

و تتمثل المؤثرات العلاقية في:

المثال التالي يوضح استخدام المؤثرات العلاقية:

relopr

 

اما المؤثرات المنطقية فتستخدم في الجمع بين المؤثرات العلاقية في نتيجة واحدة نهائية وتنقسم الي:

المثال التالي يوضح استخدام المؤثرات المنطقية:

logicopr

من المثال السابق يتضح ان:

 

مؤثرات خاصة بالبيتات Bitwise Operators

مؤثرات الـ Bitwise هي مجموعة من المؤثرات التي تعمل علي مستوي البيتات Bits. وتنقسم الي:

المثال التالي يوضح استخدام مؤثرات الـ Bitwise علي بيانات تمت كتابتها بالنظام الثنائي binary للتوضيح:

bitwise

من المثال السابق نلاحظ ان:

 

Type Conversions and Casts

اثناء كتابة البرنامج قد يحتاج المبرمج الي تحويل نوع بيانات الي نوع بيانات اخر من ثم تخزينه وإعادة استخدامه. ولكي نقوم بذلك نستخدم الـ Casts عن طريق كتابة نوع البيانات المراد التحويل له بين قوسين متبوع بالبيانات المراد تحويلها بين قوسين آخرين. المثال التالي يوضح كيفية استخدام الـ Casts:

casts