📚 الدوال في C++ (تطبيق على إنترنت الأشياء)
المفاهيم الأساسية
استدعاء الدالة: تمرير عددين صحيحين لها كمعاملات من البرنامج الرئيسي.
الدالة الرئيسية (main): دالة خاصة في C++، نوع إرجاعها `int`، ولا تقبل معاملات إدخال `()`، ويكون `return` فيها اختيارياً.
توافق المعاملات: يجب أن يتطابق النوع والعدد والترتيب للوسائط الممررة مع المعاملات في إعلان الدالة.
نوع الإرجاع void: تستخدم عندما لا ترجع الدالة أي قيمة.
دالتا Setup() و Loop(): دوال خاصة ببرمجة دوائر إنترنت الأشياء (مثل الأردوينو)، تُستدعى تلقائياً.
خريطة المفاهيم
```markmap
برمجة إنترنت الأشياء باستخدام C++
أساسيات لغة C++
التعليقات (Comments)
#### التعليق في سطر واحد
- يستخدم الرمزين: //
- مثال: // this is a comment
#### التعليق متعدد الأسطر
- يستخدم الرمزين: / /
- مثال: / ... /
#### استخدامات التعليقات
- تحسين قابلية قراءة البرنامج
- تسهيل فهم وظائف البرنامج للمبرمجين والمراجعين
- جعل أجزاء من الكود غير نشطة أثناء الاختبار
المعاملات الأساسية
#### المعاملات الرياضية
- الجمع (+)
- الطرح (-)
- الضرب (*)
- القسمة (/)
- باقي القسمة (%)
##### ملاحظة
- في الأعداد الصحيحة (int): "/" لحاصل القسمة، "%" لباقي القسمة
- في الأعداد العشرية (float/double): "/" فقط لحاصل القسمة
#### معاملات الإسناد
- الإسناد (=)
- الجمع والإسناد (+=)
- الطرح والإسناد (-=)
- الضرب والإسناد (*=)
- القسمة والإسناد (/=)
- باقي القسمة والإسناد (%=)
#### المعاملات العلائقية
- يساوي (==)
- لا يساوي (!=)
- أكبر من (>)
- أصغر من (<)
- أكبر أو يساوي (>=)
- أصغر أو يساوي (<=)
#### المعاملات المنطقية
- AND المنطقية (&&)
- OR المنطقية (||)
- NOT المنطقية (!)
الطباعة والإخراج
العبارات الشرطية
#### أنواع العبارات الشرطية
- عبارة `if`
- عبارة `if... else if... else`
- عبارة `if... else if... else if...`
#### عبارة `if` البسيطة
- الصيغة: `if (condition) { // body }`
- آلية العمل:
- يتم فحص الشرط بين القوسين.
- إذا كان الشرط صائباً (True)، تُنفَّذ التعليمات داخل الأقواس `{}`.
- إذا كان الشرط خاطئاً (False)، تُتخطَّى التعليمات داخل الأقواس.
#### عبارة `if...else`
##### التركيب
if (condition) {
// block of code 1 if condition is true
}
else {
// block of code 2 if condition is false
}
##### آلية العمل
- يتم أولاً تقييم الشرط.
- إذا كان الشرط صائباً (True)، تُنفَّذ التعليمات داخل `if` وتُتخطَّى التعليمات داخل `else`.
- إذا كان الشرط خاطئاً (False)، تُتخطَّى التعليمات داخل `if` وتُنفَّذ التعليمات داخل `else`.
#### عبارة `if..else if..else`
##### التركيب
if (condition1) {
// code block 1
}
else if (condition2) {
// code block 2
}
else {
// code block 3
}
##### آلية العمل (مخطط التدفق)
- إذا كان
صواب: تنفيذ
تعليمات برمجية 1 ثم الخروج.
- إذا كان خطأ: الانتقال لفحص الشرط الثاني.
- إذا كان صواب: تنفيذ تعليمات برمجية 2 ثم الخروج.
- إذا كان خطأ: تنفيذ تعليمات برمجية 3 ثم الخروج.
##### حالات التنفيذ
###### إذا كان الشرط الأول صائباً
- تُنفَّذ مجموعة التعليمات البرمجية الأولى.
- تُتخطَّى مجموعتي التعليمات الثانية والثالثة.
###### إذا كان الشرط الأول خطأ والثاني صائباً
- تُنفَّذ مجموعة التعليمات البرمجية الثانية.
- تُتخطَّى مجموعة التعليمات البرمجية الثالثة.
###### إذا كانت كافة الشروط خطأ
- تُنفَّذ مجموعة التعليمات البرمجية الثالثة (الخاصة بـ `else`).
##### العبارات الشرطية المتداخلة
- يمكن تضمين عبارة `if` داخل مجموعة تعليمات برمجية لعبارة `if` أخرى.
- لا يُشترط أن تكون من نفس النوع.
التكرارات (Loops)
#### أنواع التكرارات
##### تكرار `for`
- الصيغة: `for (تهيئة المتغير; الشرط; معامل الزيادة) { // loop statements; }`
- آلية العمل:
1.
التهيئة: تنفذ مرة واحدة فقط قبل بدء التكرار.
2. فحص الشرط: إذا كان صواب، تُنفَّذ جمل التكرار.
3. الزيادة: تحديث قيم المتغيرات بعد تنفيذ الجمل.
4. التكرار: يستمر حتى يصبح الشرط خطأ.
##### تكرار `while`
- الصيغة: `while (condition) { // loop statements; }`
- آلية العمل:
1.
فحص الشرط أولاً.
2. إذا كان صواباً، تُنفَّذ عبارات التكرار.
3. إذا كان خطأ، يتوقف التكرار وتُتخطَّى العبارات.
##### تكرار `do...while`
- الصيغة: `do { // statement execution; } while (condition);`
- آلية العمل:
1.
تنفيذ التعليمات أولاً مرة واحدة على الأقل.
2. فحص الشرط بعد التنفيذ.
3. إذا كان الشرط صواباً، يعود لتنفيذ التعليمات مرة أخرى.
4. إذا كان خطأ، يتوقف التكرار.
#### عبارات التحكم في التكرار
##### عبارة `break`
- الوظيفة: تنهي التكرار حيث تكون موجودة.
- آلية العمل:
- عند استيفاء شرط معين داخل التكرار، يتم تنفيذ `break`.
- يخرج البرنامج فوراً من التكرار الحالي وينتقل إلى التعليمات التي تلي الحلقة.
for (init; condition; update) {
// code block 1
if (condition to break) {
break
}
// code block 2
}
// code after loop
while (condition) {
// code block 1
if (condition to break) {
break
}
// code block 2
}
// code after loop
- في التكرارات المتداخلة: إذا وُضعت داخل تكرار متداخل، فإنها تنهي التكرار الداخلي فقط.
##### عبارة `continue`
- الوظيفة: تتخطى بقية التعليمات البرمجية داخل التكرار وتنتقل إلى التكرار التالي.
- الاستخدام في `for`:
for (init; condition; update) {
// code block 1
if (condition to continue) {
continue
}
// code block 2
}
// code after loop
while (condition) {
// code block 1
if (condition to continue) {
continue
}
// code block 2
}
// code after loop
- في التكرارات المتداخلة: إذا وجدت داخل تكرار متداخل، يتم تخطي التكرار الحالي في التكرار الداخلي فقط.
الدوال (Functions)
#### تعريف الدالة
- تجميع تعليمات برمجية تؤدي مهمة محددة.
- يمكن استدعاؤها عدة مرات.
- توجد دوال قياسية ودوال خاصة بالمبرمج.
#### تركيب الدالة
return\_type\ functionName\ ( parameter1,\ parameter2,\ ...\ )\ \{ \ //\ function\ body \ \}
##### أجزاء التركيب
- return type: نوع البيانات التي ترجعها الدالة.
- functionName: اسم الدالة.
- parameter1, parameter2: وسيطات الإدخال (إن وجدت).
#### مثال
// function declaration
int adding (int a, int b) {
s = a+b;
return s
}
#### استخدام الدوال
##### استدعاء الدالة
- يتم من خلال اسمها وتمرير المعاملات.
- مثال: `c = adding(a,b);`
##### الدالة الرئيسية `main()`
- نوع خاص في C++.
- نوع إرجاعها `int`.
- لا تقبل معاملات: `()`.
- `return 0;` فيها اختياري.
##### توافق المعاملات
- يجب أن يتطابق النوع والعدد والترتيب للوسائط مع المعاملات في إعلان الدالة.
##### نوع الإرجاع `void`
- يستخدم عندما لا ترجع الدالة أي قيمة.
- مثال: `void displayNumber() { // code }`
#### دوال إنترنت الأشياء (الأردوينو)
##### الدوال الخاصة
- `setup()` و `loop()`: تُستدعى تلقائياً عند بدء تنفيذ البرنامج (عكس باقي الدوال التي تستدعى يدوياً).
##### دالة `setup()`
- تنفذ مرة واحدة فقط في البداية.
- المسؤولية: تكوين أجزاء الدائرة (مثل ضبط أطراف الأردوينو، إنشاء اتصال تسلسلي).
##### دالة `loop()`
- تُستدعى بشكل متكرر بعد `setup()`.
- الوظيفة: هي الوظيفة الرئيسية والتشغيلية المستمرة للدائرة.
```
نقاط مهمة
- `main()` هي الدالة الرئيسية في أي برنامج C++، ويكون `return` فيها اختيارياً.
- عند استدعاء أي دالة، يجب أن تتطابق الوسائط الممررة مع معاملاتها في النوع والعدد والترتيب.
- الدالة التي لا ترجع قيمة يجب أن يكون نوع إرجاعها `void`.
- في برمجة دوائر إنترنت الأشياء (كالأردوينو)، توجد دالتان أساسيتان تُستدعيان تلقائياً: `setup()` للإعداد مرة واحدة، و`loop()` للتكرار المستمر.