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
|

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