الخميس، 31 يناير 2013

Intro. to Programming - Lesson 3



Intro. to Programming - Lesson 3



Installing Cygwin & Notepad++
اتكلمنا قبل كده عن الحاجات اللي هنحتاجها عشان نبدأ نكتب و نشغل برنامج بالـ c  وقلنا اننا هنحتاج حاجتين اساسيتين :
1-text editor  : عشان اكتب فيه الكود
2- compiler  : اللي هترجم بيه الكود ده للـ binary
احنا هنستخدم في الكورس الـ notepad++  كـ text editor  وهنستخدم gcc  الموجود ضمن Cygwin  كـ compiler

خطوات التنزيل:
أولأ هننزل 3 حاجات Cygwin installer  ، Cygwin offline version  ، notepad++ installer

أول حاجة هنسطبها هي Cygwin  فهنشغل Cygwin installer  اللي هو اسمه setup



























بعد ما خلصنا تسطيب Cygwin  عايزين نقدر نستدعي gcc  من اي مكان جوا windows  عشان كده هنضيف الـ path بتاعه في environment variables  بتاعة ويندوز بالطريقة دي










نجرب بقى نعمل call  لـ gcc  من command line  هندخل على run  و نكتب cmd







و بعدين نكتب gcc-3  هتظهر الرسالة دي اللي بتدل انه قدر يستدعيه بس هو محتاج اسم ملف عشان يعمله compile  

كده عندنا كل حاجة جاهزة عشان نبدأ نكتب و نـ compiled  برامج الـ c


Program flow

احنا قلنا قبل كده ان اي تعامل بينك و بين الكمبيوتر في الـ real time  بيكون دايماً مع الـ RAM  ، بمعنى ان اي data  بتكتبها مثلاً بتتخزن على طول في RAM  بعد كده ممكن تتنقل في اي storage  تانية زي الـ hard disk.
البرنامج لما تيجي تعمله run  برضه زي أي data  ، بيتنقل كله في الميموري.
بفرض ان عندك برنامج فيه 6 أوامر ، لما تيجي تعمله run  بيتنقل في الـ memory  بداية من عنوان معين بيديهوله الـ Operating System  بيكون فيه أول أمر في البرنامج ، و بيكون فيه pointer  بيشاور على الأمر اللي هيتنفذ. في الأول الـ pointer  هيشاور على أول أمر ينفذه و بعدين ينزل على اللي بعده و ينفذه و هكذا لغاية ما يخلص البرنامج.

لاحظ إن الامر اللي بيتنفذ مش بيتمسح من الـ memory  ، بيفضل موجود بس الـ Pointer  مبقاش بيشاور عليه .
طيب افرض ان الأمر رقم 3 ده كان عبارة عن استدعاء لبرنامج تاني ، بمعنى ان الامر رقم 3 ده بيقول "روح للبرنامج اللي اسمه P2 " مثلاً ، في الحالة دي ايه اللي هيحصل ؟
أولاً البرنامج لما يجي يتنفذ هيتنقل في الـ memory  عادي خالص ، هيبدأ بتنفيذ أول أمر ، و بعدين التاني و بعدين الامر التالت هيجي ينفذه يلاقيه بيقول روح للبرنامج p2  ، البرنامج p2  ده هيكون موجود في ال RAM  برضه زي أي برنامج وبادئ عند عنوان معين ، هيروح الـ Pointer  للعنوان ده و يبدأ ينفذ p2  أمر أمر ، و لما يخلص يرجع تاني للبرنامج الأساسي يكمل تنفيذ الأوامر اللي ناقصة ، فهينفذ الأمر الرابع و الخامس و السادس.
البرنامج الصغير الفرعي ده اللي هو P2  ليه اسماء كتير ، فيه لغات بتسميه Function  أو subroutine  أو method ، المهم انه مجموعة من الأوامر مع بعض بيتم استدعائها من البرنامج الأساسي.


Include statements
بفرض انك عايز تكتب كود معين يعمل وظيفة معينة في البرنامج بتاعك و مش عارف تكتب الكود ده و سألت حد فاداك ملف فيه الكود و قالك حطه copy & paste  في البرنامج بتاعك
افرض ان الكود ده كان كبير مثلاً 200 سطر ، و البرنامج بتاعك برضه كان كبير ، يا ترى منظر الكود هيكون ايه ؟
افرض انك عايز تستخدم الكود ده في أكتر من برنامج ، تخيل لو في كل برنامج قعدت تعمل copy & paste  للكود هيكون برامجك شكلها ايه ؟
عشان كده كل لغات البرمجة بتدعم حاجة اسمها include  بمعنى انك ممكن تستخدم الكود الموجود في ملف معين و تستدعي الـ functions  الموجودة فيه من غير ما تعمل copy & paste  للملف ده في البرنامج بتاعك بس بتكتب جملة في البرنامج تشاور بيها على الملف ده
كل لغة ليها طريقة معينة في كتابة جملة الـ include  مثلاً في الـ c   بتكون بالشكل ده
#include filename
جملة include  مهمة برضه لما تيجي تستخدم libraries  خارجية مش موجودة في اللغة ، مثلاً لو عايز تعمل image processing  في البرنامج بتاعك اكيد هتضطر تدوّر على external library  تساعدك في الموضوع ده و تنزلها و تعملها include  و بعدين تقرا الـ documentation  بتاعها عشان تستخدمها في البرنامج بتاعك

Arguments and Return values
بفرض انك عندك دالة اسمها print  ، و انت عايز تطبع جملة معينة زي “Hello”  مثلاً ، هل يكفي انك تستدعي الدالة print  بس ؟ طب كده هي هتطبع ايه ؟ لازم تزوّدها بمعلومات إضافية عشان تنفذ الوظيفة اللي انت عايزها فهنا مثلاً لازم تستدعي الدالة و تبعتلها الـdata  للي عايز تطبعها (اسمها arguments  أو parameters )
Function: print
Arguments: “Hello”
مثال تاني : لو عايز تستدعي دالة ترسم مربعات اسمها drawSquare  مينفعش بس تكتب drawSquare  لأ لازم تحددلها مجموعة من الحاجات (arguments ) عشان ترسم المربع اللي عايزه ، زي مثلاً طول الضلع ، اللون اللي هترسم بيه ، لون الخلفية ، المكان اللي هترسم فيه و هكذا كل الحاجات دي اسمها parameters  أو arguments

Return value  هي القيمة اللي هترجع بيها الدالة للبرنامج الاساسي اللي استدعاها ( أو الـ operating system  لو الدالة دي دالة الـ main ). أي function  ليها return value  لما تخلص تنفيذ هترجع بالقيمة دي للبرنامج اللي استدعاها و ممكن تستخدم القيمة دي في البرنامج. مثال: لو عندك برنامج بيستدعي في سطر من سطوره دالة بتجمع رقمين ، بيكون الـ return type  بتاعها قيمة رقمية ، و القيمة اللي بترجع بيها هي حاصل جمع الرقمين ، و الـ arguments  بتوع الدالة دي هم الرقمين.

ايه المطلوب عشان اتعلم اي لغة برمجة :
1-      تعلم قواعد اللغة دي ، او grammar  اللي هتكتب بيه اوامر اللغة ، اسمه syntax
2-      تتعلم الدوال الاساسية اللي موجودة في اللغة
3-      تتعلم ازاي تستخدم external libraries  اللي فيها دوال متقدمة عشان تقدر تعمل حاجة مفيدة بالبرنامج بتاعك

كتابة أول برنامج بالسي :
الوقتي هنكتب اول برنامج بالشكل ده

نفهم بقى ايه الكلام ده.
أول حاجة انت بتفكر في الوظيفة اللي عايز البرنامج يعملها ، فاحنا عايزين نعمل برنامج يطبع كلمة hello ، فعشان نكتب البرنامج بنعمل دالة اسمها main  دي الدالة الأساسية في البرنامج اللي هي أول حاجة هتشتغل لما البرنامج يشتغل ، أي برنامج لازم يكون فيه دالة main  و بتتكب في الـ c  بالشكل ده


زي اي دالة عادية لما نيجي نكتبها بتتكب بالصورة دي
Return_type function_name(arguments) {

Return return_value;
}
هنا الـreturn_type  بتاع الfunction  من نوع int  بمعنى ان القيمة اللي هترجع بيها الدالة للبرنامج اللي استدعاها (هنا الـ operating system ) هتكون integer  و لازم تكون return_value  في آخر سطر من الدالة من نفس النوع المتعّرف فوق
بعد return type  بنكتب اسم الدالة (هنا اسمها main ) و بعدين بين قوسين بنكتب الـ arguments  هنا مفيش arguments  فبنكتب void  (بمعنى nothing )
و بعدين نكتب محتوى الدالة بين قوسين { }

طيب الوقتي نشوف الوظيفة اللي عايزين نعملها ، عايز نكتب كود يطبع كلمة hello
عارفين ان الدالة اللي بتستخدم عشان الطباعة في ال c  اسمها printf  و بتاخد argument  بالشكل ده

بس الدالة printf  الـ compiler  هيعرفها منين ، بمعنى اصح هيستدعيها منين ؟ عشان نستخدم الدالة دي لازم نعمل include  لملف stdio.h  أو standard input/output  فبنضيف جملة Include  للملف ده في اول سطر خالص  بالمنظر ده

كده خلاص الكود جاهز ، نعمل save  للملف ده باسم prog1.c  مثلاً و بعدين نروح نعمل compile
نروح على command line  و ندخل على الـ directory  اللي موجود فيه  مثلاً عندي موجود في
E:\c_programming
فهنكتب في command line
E:
Cd c_programming
Gcc-3 prog1.c
a


ملحوظة: gcc  لما يعمل compile  لأي source  بيسمي الملف الـ binary  أو الـ executable  a.exe  عشان كده لما نيجي نشغله نكتب a  
بيظهر كلمة Hello  بتتطبع على شاشة الـ command line  زي ما احنا شايفنين

المتغيرات Variables  :
المتغيرات حاجة اساسية في أي لغة برمجة ، وزي ما هو باين من اسمها هي عبارة عن قيم ممكن تغيّرها أكتر من مرة خلال البرنامج.
عشان تخزن أي data  في البرنامج لازم تستخدم variables  بتديها اسم بعد كده تستخدم الاسم ده في تغيير قيمتها او قراءة قيمتها او عمل عمليات عليها
طب ازاي بنكتب الـ variable  ؟ عشان تكتب variable  بيكون بالطريقة دي
Variable_type variable_name= value;
أول حاجة variable_type  هو نوع الـ data  اللي هتتخزن في المتغير ده و في انواع كتير زي ما قلنا قبل كده زي int , unsigned int , float, char  
تاني حاجة variable_name  اي اسم تختاره للـ variable  
بعد كده ممكن تديله قيمة مبدئية أو لأ
مثلاً :
Unsigned short int x = 4;
هنا variable type  هو unsigned short int
Variable name  هو x
Value  هي 4

Printf & placeholders  :
احنا اتكلمنا قبل كده عن printf  و ازاي تستخدمها في طباعة text  مثلاً ، طب لو عايز تحط مع الـ text  ناتج جمع رقمين مثلاً او طرح او اي قيمة تانية بتعمل كده ازاي ؟ بتحط في المكان اللي عايز تحط فيه القيمة دي في الطباعة حاجة اسمها placholder  يعني معناه بتقول لدالة printf  انك هتحط متغير من نوع معين في المكان ده و بعد لما تخلص الـ text  تكتب ,  و بعدين اسم الـ Variable
مثال:

هنا انت عامل 3 متغيرات x = 5  و y= 6  و z  هو مجموع x + y
و عامل جملة printf  تطبع الجملة دي
The sum of (x) and (y) is: (z)
و عشان التلات متغيرات من النوع Int بتستخدم Placeholder  عبارة عن %d  
هيكون ناتج التنفيذ كده

طيب كل نوع متغير ليه placeholder  مختلف في الـ c  ودي امثلة عليها 

Data type
Placeholder
Int / signed int
%d , %i
Unsigned int
%u
Single character
%c
String of characters
%s

ليست هناك تعليقات:

إرسال تعليق