الوحدة الأولى: مراجعة أساسيات البرمجة بلغة C++

عنوان الوحدة

مراجعة أساسيات البرمجة بلغة C++

مراجعة المفاهيم البرمجية الأساسية اللازمة للانتقال إلى برمجة Arduino.

أهداف الوحدة

بنهاية الوحدة، يُتوقع القدرة على:

  • كتابة برنامج C++ بسيط.
  • استخدام المتغيرات والعمليات.
  • استخدام الشروط وحلقات التكرار.
  • التعامل مع المصفوفات والدوال.
  • فهم Scope و #define.
  • إجراء التحويل بين أنواع البيانات.

بنية برنامج C++

الشكل الأساسي للبرنامج
#include <iostream>
using namespace std;

int main()
{
    cout << "Hello";
    return 0;
}

يبدأ تنفيذ برنامج C++ من الدالة:

main()
أجزاء البرنامج
#include <iostream>

إضافة مكتبة الإدخال والإخراج.

using namespace std;

يسمح باستخدام cout و cin.

return 0;

إنهاء البرنامج بصورة طبيعية.

مثال 1

اكتب برنامجًا يعرض:

Welcome to C++
#include <iostream>
using namespace std;

int main()
{
    cout << "Welcome to C++";
    return 0;
}
تدريب عملي 1

اكتب برنامجًا يعرض:

Arduino Programming
C++ Review

بحيث يظهر كل نص في سطر مستقل.

الإدخال والإخراج

الإخراج باستخدام cout

لطباعة نص:

cout << "Hello";

لطباعة متغير:

int age = 20;

cout << age;

لدمج النص مع المتغير:

cout << "Age = " << age;
الانتقال إلى سطر جديد
cout << "Hello" << endl;
cout << "C++";

الناتج:

Hello
C++
الإدخال باستخدام cin
int age;

cout << "Enter age: ";
cin >> age;

cout << "Age = " << age;

لقراءة أكثر من قيمة:

cin >> x >> y;
مثال 2
int number;

cout << "Enter number: ";
cin >> number;

cout << "Number = " << number;
تدريب عملي 2

اكتب برنامجًا يقرأ:

  • سنة الميلاد.
  • السنة الحالية.

ثم يعرض القيمتين.

المتغيرات وأنواع البيانات

المتغيرات

المتغير مكان في الذاكرة لتخزين قيمة.

int age = 20;

يمكن تغيير القيمة:

age = 25;
أنواع البيانات الأساسية
int     // عدد صحيح

float   // عدد عشري

double  // عدد عشري بدقة أكبر

char    // حرف

bool    // true أو false
أمثلة على أنواع البيانات
int age = 20;

float temperature = 25.5;

char grade = 'A';

bool isActive = true;
الثوابت const

يستخدم const عندما لا نريد تغيير القيمة.

const int MAX_SCORE = 100;

لا يمكن لاحقًا كتابة:

MAX_SCORE = 200;
مثال 3
const float PI = 3.14;

float radius = 5;

float area = PI * radius * radius;

cout << area;
تدريب عملي 3

عرّف ثابتًا:

const int DAYS_IN_WEEK = 7;

ثم احسب عدد الأيام في 4 أسابيع.

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

العمليات الأساسية
+    جمع
-    طرح
*    ضرب
/    قسمة
%    باقي القسمة

مثال:

int x = 10;
int y = 3;
أمثلة العمليات الحسابية
x + y   // 13

x - y   // 7

x * y   // 30

x / y   // 3

x % y   // 1
معاملات الإسناد

بدلًا من:

x = x + 5;

يمكن كتابة:

x += 5;

ومن المعاملات:

+=
-=
*=
/=
الزيادة والنقصان

لزيادة المتغير بمقدار واحد:

x++;

لإنقاصه بمقدار واحد:

x--;

مثال:

int counter = 0;

counter++;
counter++;

تصبح القيمة:

2
مثال 4

اقرأ رقمين واحسب مجموعهما:

int x;
int y;

cin >> x >> y;

cout << x + y;
تدريب عملي 4

اكتب برنامجًا يقرأ:

length
width

ثم يحسب مساحة المستطيل.

المقارنة والعمليات المنطقية

عمليات المقارنة
==    يساوي

!=    لا يساوي

>     أكبر من

<     أصغر من

>=    أكبر من أو يساوي

<=    أصغر من أو يساوي

نتيجة المقارنة تكون true أو false.

العمليات المنطقية
&&

يجب تحقق الشرطين.

||

يكفي تحقق أحد الشرطين.

!

عكس النتيجة.

مثال 5
int age = 25;

if (age >= 18 && age <= 60)
{
    cout << "Accepted";
}
تدريب عملي 5

اقرأ درجة طالب.

إذا كانت الدرجة بين 0 و 100 اعرض:

Valid Grade

الجمل الشرطية

الجملة if
if (temperature > 30)
{
    cout << "Hot";
}

تنفذ التعليمات إذا تحقق الشرط.

if و else
if (grade >= 60)
{
    cout << "Passed";
}
else
{
    cout << "Failed";
}
else if
if (grade >= 90)
{
    cout << "Excellent";
}
else if (grade >= 80)
{
    cout << "Very Good";
}
else
{
    cout << "Good";
}
switch

تستخدم عند مقارنة متغير بعدة قيم محددة.

switch (option)
{
    case 1:
        cout << "Start";
        break;

    case 2:
        cout << "Stop";
        break;

    default:
        cout << "Invalid";
}
مثال 6

اقرأ رقمًا.

إذا كان الرقم أكبر من أو يساوي صفرًا اعرض:

Positive

وإلا اعرض:

Negative
تدريب عملي 6

اكتب برنامجًا يقرأ رقمًا من 1 إلى 3.

باستخدام switch يعرض:

1 → Red
2 → Green
3 → Blue

حلقات التكرار

حلقة for

تستخدم غالبًا عندما يكون عدد مرات التكرار معروفًا.

for (int i = 1; i <= 5; i++)
{
    cout << i << endl;
}
أجزاء for
for (int i = 0; i < 5; i++)

تتكون من:

int i = 0

القيمة الابتدائية.

i < 5

شرط الاستمرار.

i++

تغيير العداد.

حلقة while
int i = 1;

while (i <= 5)
{
    cout << i << endl;
    i++;
}

تستمر ما دام الشرط صحيحًا.

حلقة do while

تنفذ التعليمات مرة واحدة على الأقل.

do
{
    cin >> number;
}
while (number <= 0);
مثال 7

اعرض الأرقام من 1 إلى 10 باستخدام for.

for (int i = 1; i <= 10; i++)
{
    cout << i << endl;
}
تدريب عملي 7

استخدم حلقة تكرار لعرض:

2
4
6
8
10

المصفوفات Arrays

مفهوم المصفوفة

المصفوفة تخزن عدة قيم من النوع نفسه.

بدلًا من:

int score1 = 80;
int score2 = 90;
int score3 = 70;

نستخدم:

int scores[3] = {80, 90, 70};
فهرس المصفوفة

يبدأ الفهرس من الصفر.

int numbers[3] = {10, 20, 30};
numbers[0]   // 10
numbers[1]   // 20
numbers[2]   // 30
المصفوفة مع for
int numbers[5] = {10, 20, 30, 40, 50};

for (int i = 0; i < 5; i++)
{
    cout << numbers[i] << endl;
}
حدود المصفوفة

إذا كانت:

int numbers[5];

فالفهارس الصحيحة:

0  1  2  3  4

استخدام:

numbers[5]

يتجاوز حدود المصفوفة.

مثال 8

حساب مجموع عناصر المصفوفة:

int numbers[4] = {10, 20, 30, 40};
int sum = 0;

for (int i = 0; i < 4; i++)
{
    sum += numbers[i];
}

cout << sum;
تدريب عملي 8

لديك:

int values[5] = {5, 10, 15, 20, 25};

استخدم for من أجل:

  • عرض العناصر.
  • حساب مجموعها.

الدوال Functions

مفهوم الدالة

تساعد الدوال على:

  • تقسيم البرنامج.
  • تقليل تكرار الكود.
  • إعادة استخدام التعليمات.

مثال:

void showMessage()
{
    cout << "Welcome";
}
تمرير القيم إلى الدالة
void printNumber(int number)
{
    cout << number;
}

الاستدعاء:

printNumber(10);
إرجاع قيمة من الدالة
int add(int x, int y)
{
    return x + y;
}

الاستخدام:

int result = add(5, 3);
مثال 9

دالة تعيد مربع الرقم:

int square(int number)
{
    return number * number;
}

الاستخدام:

cout << square(5);

الناتج:

25
تدريب عملي 9

اكتب دالة باسم:

multiply

تستقبل رقمين وتعيد حاصل ضربهما.

نطاق المتغيرات Scope

المتغير المحلي والعام

متغير محلي:

void test()
{
    int x = 10;
}

يمكن استخدامه داخل الدالة فقط.

متغير عام:

int counter = 0;

يُعرّف خارج الدوال ويمكن الوصول إليه من عدة دوال.

نطاق الكتلة
if (true)
{
    int value = 10;
}

لا يمكن استخدام value بعد نهاية { }.

مثال 10

ما الخطأ؟

if (true)
{
    int value = 100;
}

cout << value;

value خارج نطاقها عند استخدامها.

تدريب عملي 10

أنشئ:

  • متغيرًا عامًا باسم counter.
  • دالة تزيد قيمته بمقدار واحد.
  • استدعِ الدالة ثلاث مرات.
  • اعرض القيمة النهائية.

التوجيه #define

استخدام #define
#define LED_PIN 13
#define MAX_VALUE 100

يتم استبدال الاسم بالقيمة قبل عملية الترجمة.

لا نضع:

;

في نهاية #define.

const و #define
const int LED_PIN = 13;

لها نوع بيانات.

بينما:

#define LED_PIN 13

يعالجها الـ Preprocessor.

في C++ يفضل غالبًا استخدام const للقيم الثابتة، لكن #define يظهر كثيرًا في أكواد Arduino.

مثال 11
#define MAX_SCORE 100

int score = 75;

cout << score << " / " << MAX_SCORE;

الناتج:

75 / 100
تدريب عملي 11

عرّف:

#define MIN_VALUE 0
#define MAX_VALUE 255

ثم اعرض القيمتين.

المحارف والنصوص

النوع char

لتخزين حرف واحد:

char grade = 'A';

الفرق بين:

'A'

حرف.

وبين:

"A"

نص.

النص كمصفوفة محارف
char name[] = "Ahmed";

cout << name;

يمكن استخدام مصفوفة من char لتخزين نص بسيط.

مثال 12
char command = 'A';

if (command == 'A')
{
    cout << "Command A";
}
تدريب عملي 12

اقرأ حرفًا من المستخدم.

إذا كانت القيمة:

Y

اعرض:

Yes

وإلا اعرض:

No

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

القسمة الصحيحة
int x = 5;
int y = 2;

float result = x / y;

الناتج:

2

لأن العملية تمت بين عددين صحيحين.

Type Casting

يمكن تحويل النوع:

float result = (float)x / y;

الناتج:

2.5
مثال 13
int a = 80;
int b = 90;
int c = 85;

float average =
    (float)(a + b + c) / 3;

cout << average;
تدريب عملي 13

اقرأ رقمين صحيحين.

احسب ناتج قسمتهما بحيث تظهر النتيجة العشرية.

مثال:

5 / 2 = 2.5

مقدمة إلى struct

مفهوم struct

تستخدم لتجميع بيانات مرتبطة معًا.

struct Student
{
    int id;
    float grade;
};
استخدام struct
Student student1;

student1.id = 1;
student1.grade = 95.5;

نستخدم النقطة . للوصول إلى العناصر.

مثال 14
struct Sensor
{
    int pin;
    float value;
};

Sensor sensor1;

sensor1.pin = 2;
sensor1.value = 25.5;
تدريب عملي 14

أنشئ struct باسم:

Product

وتحتوي على:

id
price

ثم أنشئ متغيرًا منها واعرض بياناته.

تطبيق شامل

مثال 15 – المطلوب

اكتب برنامجًا:

  • يخزن خمس درجات في مصفوفة.
  • يحسب المتوسط باستخدام دالة.
  • يعرض المتوسط.
  • يحدد النجاح أو الرسوب.

درجة النجاح:

60
مثال 15 – الدالة
float calculateAverage(int grades[], int size)
{
    int sum = 0;

    for (int i = 0; i < size; i++)
    {
        sum += grades[i];
    }

    return (float)sum / size;
}
مثال 15 – الاستخدام
int grades[5] = {80, 70, 90, 60, 75};

float average =
    calculateAverage(grades, 5);

cout << "Average = " << average << endl;

if (average >= 60)
{
    cout << "Passed";
}
else
{
    cout << "Failed";
}

التدريبات الختامية

تدريب عملي 15

اكتب برنامجًا يقرأ 5 أرقام ويخزنها في مصفوفة.

ثم يعرض:

  • مجموع الأرقام.
  • أكبر رقم.
  • أصغر رقم.
تدريب عملي 16

اكتب دالة باسم:

isEven

تستقبل عددًا صحيحًا وتعيد:

true

إذا كان زوجيًا، وإلا تعيد:

false
تدريب عملي 17

اكتب برنامج آلة حاسبة بسيطة:

1- Add
2- Subtract
3- Multiply
4- Divide

اقرأ اختيار المستخدم ورقمين، ثم نفّذ العملية باستخدام switch.

الأخطاء الشائعة
  • نسيان ;.
  • استخدام = بدل ==.
  • نسيان تغيير عداد الحلقة.
  • تجاوز حدود المصفوفة.
  • استخدام متغير خارج نطاقه.
  • القسمة الصحيحة عند الحاجة إلى نتيجة عشرية.
  • نسيان break في switch.
  • وضع ; بعد #define.
مراجعة الوحدة

راجعنا:

  • بنية برنامج C++.
  • الإدخال والإخراج.
  • المتغيرات وأنواع البيانات.
  • العمليات والشروط.
  • حلقات التكرار.
  • المصفوفات.
  • الدوال.
  • Scope.
  • #define.
  • char.
  • Type Casting.
  • struct.
100%
الصورة المكبّرة