Programming Freaks  | دورات ومقالات برمجيه

Please login or register.

Login with username, password and session length
Advanced search  

News:

Please Read our FAQ

Author Topic: الفصل الاول | مفاهيم اساسية في لغة السي  (Read 2780 times)

St0rM

  • [C programmer]
  • Administrator
  • Active Member
  • *****
  • Posts: 209
  • Why So serious ?
    • View Profile
    • WWW
    • Email
البدايه واول برنامج

مفاهيم اساسية


مامعنى كلمة Programming ؟
ماذا يعني بالنسبه لك التخاطب مع احد طلابك وتوجيهه الي ارشادات لحل مسألة ما ؟
ماذا يعني بالنسبه لك ان تقوم بطلب طلبات محدده من جارسون في احد المطاعم ؟
ماذا يعني بالنسبه لك ان تقوم باخبار زوجتك ان تقوم بايقاظك في الساعه التي تريدها ؟

كل هذا يعني شيئ واحد وان اختلف في اللفظ . البرمجه
البرمجه ماهي الا توجيه شيئ/شخص ما الي مجموعه من العمليات او الافعال التي تؤدي الي حل مشكلة ما او الوصول الي هدف ما .


مامعنى Programming Language ؟
كيف تستطيع ان تتحدث الي الجارسون في المطعم ؟ باي لغه سوف تحدثه ؟
اسمعك تقول الان العربيه ؟ وماذا لو كان الجارسون في مطعم فرنسي ؟ ماذا سوف تتحدث اليه ؟ بالتأكيد الفرنسيه .
اذن لغة البرمجه هي وسيلة التخاطب مع الحاسب لكي تستطيع الوصول لهدفك .
امثله علي تلك اللغات البرمجيه , c , c++ , perl , java , php , python , BASIC , pascal , vb , etc etc

ماهو ال Source Code ؟
هو خطابك او توجيهك للمترجم/المفسر في صورة لغه حيه يستطيع ان يفهمها اي انسان . موجهه للبشر وليس للحاسب

ماهو ال interpreter  او المفسر ؟
الحاسب لايفهم عدة لغات , في الحقيقه الحاسب لا يفهم الا لغة واحده وهي لغة ال0 و 1 تسمي بال binary
ولكن كيف استطيع توجيه الحاسب لكي يقوم بعدة عمليات اريده ان يقوم بها وانا لا افهم تلك اللغه ؟
لا تحتاج ان تفهم الغه لان هذه وظيفة ال interpreter /المفسر
هناك فارق بينهم لا تحتاج ان تعرفه الان سوف نتكلم عنه لاحقا
اذن ان تكتب البرنامج بلغة البرمجه التي قمت بتحديدها , تقوم بكتابتها بقواعد تلك اللغه في ملف نصي عادي وتقوم بتمريره الي المفسر/ال interpreter


مامعنى ال Debugging ؟
كما قلنا من قبل , انت تكتب برنامج بلغة برمجيه معينه , بالتأكيد هناك عدة احتما لات ان تقوم بالسهو عن قاعدة ما في تلك اللغه مما ينتج عنه خطا يجعلك تعود الي ال source code لكي تقوم بتصحيحه
هناك ثلاث انواع  من الاخطاء runtime errors و compiling/interpreting errors و logic errors

وما الفارق بينهم ؟
في لغة البرمجه التي تقوم بالكتابه بها , لها قاعده ان تقوم بانهاء كل سطر تنفيذي في ال source code ب ; لكي يستطيع المترجم ان يفهم متي تننتهي هذا السطر التنفيذي
ولكنك قد نسيت ان تقوم بانهاء السطر ب ;
عند الترجمه سوف يصدر خطا وهذا يسمي ب خطا ترجمه compiling errors .

ولكن في بعض الاحيان ينتج اخطاء غير نصيه , لا تتعلق بقاعده في اللغه بل تتعلق بالاخطاء  التي يرتكبها البشر , مما يتسبب عنه اخطاء قد تكون صغيره كانهاء البرنامج بدون اصدار اي نتيجه او حتي بدون ان يقوم بعمله  او قد تكون كبيره قد تسبب مثلا في system crash اذا كانت خطيره , تلك الاخطاء لايكتشفها المترجم . تحدث في وقت التنفيذ

وفي بعض الاحيان قد لاتحدث اخطاء مثل الذي ناقشناها , بل تحدث اخطاء تسمي بالاخطاء المنطقيه
هذه الاخطاء تنتج عن التفكير غير المنطقي او الخطأ المنطقي في تحديد سير عمليه ما
تمنع البرنامج من اصدار النتائج الصحيحه ! لان الحاسب لا يعرف ماذا تعني الا عن طريق ماتكتبه له
سوف نناقش هذه الاخطاء بالتفصيل في الاجزاء القدامه .

لانك مبتدا ولا تحتاج الي تعقيد في المسائل اكثر من ذلك
انت الا ن تعرف ما هي البرمجه وماهي لغات البرمجه وماذا يعني كتابة برنامج .

المتطلبات :
لكي تبدا
1 -  يجب ان يتوافر لديك نظام تشغيل , اي نظام تشغيل حاليا
2- يجب ان يتوفر لديك مترجم اللغه C compiler
(اذا كنت تعمل علي ويندوز تستطيع ان تقوم بتحميل bloodshed devcpp مجاني ولديه محرر ايضا , اذا كنت تعمل علي ال*NIX فلا تحتاج لشئ لان ال compiler متوافر لديك بشكل عام )
3- تحتاج الي محرر نصوص عادي يقوم بتخزين النص كنص عادي ولا يضع عليه اي نوع من انوع ال formatting
اي انك لا تستطيع استخدام Microsoft word مثلا او k-word "تستطيع اذا قمت بحفظ الملف كملف نصي عادي" سوي ذلك تستطيع استخدام اي محرر , تحت ويندوز استخدم اي IDE تحت لينكس استخدم vim اذا اردت
4- لا تتقيد بوقت ولا تتقيد بقواعد فقط قم بقراة ماتستطيع قراءته وتطبيقه ثم اكمل فيما بعد



First program :
افتح المحرر الخاص بك وقم بكتابة البرنامج التالي

Code: [Select]
#include <stdio.h> 

int main(void)
{
        printf("Hello World\n");

        return 0;

}


قم بحفظ الملف ك hello_world.c
ثم قم بترجمة الملف عن طريق

gcc hello_world.c -o hello_world
ثم قم بتنفيذ البرنامج
./hello_world

الخطوات المتعلقه بالترجمه لا يشترط ان تكون بهذا الشكل , اذا كنت تعمل علي ويندوز قم بالبحث كيف تقوم بترجمة ملف علي ويندوز واذا كنت تعمل علي *NIX قم باتباع الخطوات السابقه اما اذا كنت تعمل علي نظام اخر فتفقد خبير في نظامك كي يدلك علي الطريقه
بعد ان قمت بتفيذ البرنامج ماذ تري امامك الان ؟
Hello World
تم طباعتها علي وحدة الاخراج الخاصه بك , ال Monitor الخاص بك .

الان تستطيع ان تسمي نفسك مبرمج مبتدئ :) .




لنبدا في تحليل النص الان , ماذا يعني كل هذا ؟
Code: [Select]
#include <stdio.h>

هذا امر يصدر الي المترجم لكي يقوم بجلب محتويات الملف ووضعها في الملف الذي قمت بكتابته انت
Code: [Select]
int main(void)

في هذا السطر يتم الاعلان عن "تعريف" دالة وهي من اهم الدوال في السي
في الحقيقه هي ليست فقط من اهم الدوال , هي داله ضروريه في اي برنامج سي
كل برنامج قد كتب بلغة السي يحتوي علي دالة رئيسيه واحده تسمي ب
main
تلك الداله هي نقطة بداية البرنامج كل مايتم وضعه في تعريفها ينفذ

{
هذا القوس او مايسمي ب curly braces وهي بداية تعريف الداله
كل ماهو مضمون بين { } يسمي ب code block وتحتوي علي العمليات التي تريد ان تقوم بتنفيذها "تعريف الداله"
Code: [Select]
printf("Hello world");

ماهي printf ؟ هي دالة اخري وظيفتها ان تقوم بطباعة سلسله نصيه الي وحدة الاخراج الخاصه بك
وماهي السلسله النصيه ؟
كل ماهو مضمون بين " و " يسمي بسلسلة نصيه , وهي عباره عن مجموعة من الحروف المتسلسله التي تنتهي ب رمز خاص لايظهر اماك ولكن يعرفه المترجم

هل تلاحظ وجود ; في اخر السطر ؟
كما سبق وان قلت من قبل فهذه قاعده برمجيه في لغة ال c
عامة "ولاحظ انا اقول عامة" تنتهي كل ال statements في لغة ال c ب ;
ال statements هي تصريح للمترجم بالقيام بعمل شيئ ما , يتم تحديده عن طريق ال statements سواء ان كانت تعريف داله او استدعاء داله او جمع عددين الخ الخ ,

ماهي ال return 0 ?
هي statement "انت الان تعرف معناها" تقوم باخبار المترجم ان تلك الداله قد انتهي عملها هنا وقد انتهي عملها بشكل سليم وسوف ترجع قيمة 0 للنظام "ليست ذو اهميه كبيره ولكنها ايضا مهمه سوف تتضح الرؤيه قريبا لاتقلق نفسك بهذا "
اي قيمة ترجع للنظام غير ال 0 فهي تعبر عن قيمة اخري غير النجاح . "بشكل عام"

سوف نقوم بعمل تعديل بسيط علي البرنامج لكي اشرح نقطة اخري حتي لانغفل هنا لانها حقا مهمه !
Code: [Select]
#include <stdio.h> /* An header File */

int main(void) /* This is where all c programs start executing */
{ /* Start code block */
        printf("Hello World\n"); /* Called output function */

        return 0; /*Just return a zero to the system indecating that every thing is ok */

} /* End code block */

سوف تجد هذا ال source code مع مجموعه اخري من ال source codes في الملف المرفق يوجد مجلد اسمه 0x1.src
"
هذه العبارات بين ال /* وال */ تسمي بتعليقات
يقوم المترجم بتجاهلها تماما وتحويلها ل مسافه " space "
ولكن مااهميتها ؟ اهميتها للبشر , اذا قمت بكتابة برنامج ما واردت اعطاء نصائح او ارشادات الي المبرمج الاخر الذي سوف يستلمها منك كيف سوف يعرف تلك الارشادات ؟ عن طريق الملف النصي الذي قمت انت بادراج تعليقات نصيه فيه لكي يستطيع ان يفهم
كل مابين /* و */ فهو تعليق ويتم تجاهله كله بمسافه واحده عن طريق ال compiler
يمكن للتعليقات ان تقع في اي مكان في الsource code تقع فيه ال "space"
اي اي مكان تستطيع ان تدرج به "space" يمكنك ان تضع تعليق مكانه .

بعد ان قمت بتعريفك الي الشكل العام لل source code للغة ال c سوف اقوم بتوضيح بعض اشياء اخري .

اولا الدوال . نظرة عامه عليها , هي مجموعة من الاوامر مدرجة في code block "تعرف ماهو لاني قد سبق وان عرفته"
ولها اسم موحد , تستطيع ان تمرر لها قيم وان تقوم بارجاع قيمه واحده فقط منها وتسمي تلك الدوال بال functions
وتنقسم الي قسمين ,اعلان عن الداله وتعريفها , ويمكن ان يدمج اعلانها وتعريفها في مكان واحد "سوف نناقش هذا بالتفصيل في الاجزاء القادمه"

التعريف المبدائي "prototype" لها يكون علي هذا الشكل
Code: [Select]
return_value function_name(function_arguments_list)
{
/* function code block */
}

مثال
Code: [Select]
int function(void)
{
printf("Hello world");
return 0;
}

هذه الداله ترجع قيمه عدديه ولها اسم function ولا تقبل اي قيم "سوف نناقش بالتفصيل لاحقا"


ماذا تعني #include تلك ؟
هي مايسمي ب preprocessor وهي اول خطوه في الترجمه , يقوم المترجم بتنفيذ تلك الاوامر قبل ان يبدأ بترجمة باقي ال source code
ووظيفتها كما قلت من قبل ان تقوم بجلب محتويات ملف يسمي بال header file وتقوم بادراجه في ال source code وسوف تعرف لماذا لاحقا .



الشكل العام لبرنامج بلغة ال c
Code: [Select]
#include <header_file.h>
#other preprocessors /* will be discussed later */

/* functions definitions*/

int main(void)
{

/* code block */

return 0;
}

وصلنا الي نهاية الفصل الاول . الان ان تستطيع ان تقوم ب :
1- تحديد ماهي البرمجه
2- تحديد ماهي لغة البرمجه
3- تعريف الاخطاء البرمجيه
4- كتابة برنامج بسيط بلغة السي
5- تحديد الشكل العام لبرنامج السي
6- تحديد ماهي الدوال والتصريحات
وبعد ان انتهيت اطلب منك ان تقوم بقراءة ال source codes الاخري التي قد ادرجتها لك " لا طلب منك فهمها علي الاطلاق سوف نقوم بمناقشتها فيما بعد" وايضا اطلب منك مراجعة الفصل مره اخيره قبل ان تبدا في الفصل القادم :) وداعا
« Last Edit: September 05, 2009, 07:35:46 AM by St0rM »
Logged