🔥 أحدث الأخبار

موقع يهتم بكل ماهو جديد في عالم التكنولوجيا والرياضة

كورس C++ المتوسط – الحلقة الثانية: المصفوفات والسلاسل النصية بشكل متقدم


 

كورس C++ المتوسط – الحلقة الثانية: المصفوفات والسلاسل النصية بشكل متقدم

#برمجة

مقدمة

مرحباً بك في الحلقة الثانية من المستوى المتوسط في C++.

في الحلقة السابقة تعلمنا:

  • التفكير كمبرمج
  • تنظيم الكود
  • تقسيم البرنامج إلى دوال
  • إعادة استخدام الكود
  • بناء حلول أكثر احترافية

اليوم سننتقل إلى موضوع مهم جداً يستخدم في أغلب البرامج الحقيقية:

المصفوفات (Arrays) والسلاسل النصية (Strings) بشكل متقدم

إذا أتقنت هذا الدرس فستصبح قادراً على بناء:

  • أنظمة تسجيل دخول
  • أنظمة طلاب
  • أنظمة إدارة بيانات
  • ألعاب بسيطة
  • تطبيقات تعتمد على النصوص

أولاً: مراجعة سريعة على المصفوفات

المصفوفة هي مجموعة عناصر من نفس النوع.

مثال:

int numbers[5] = {10, 20, 30, 40, 50};

كل عنصر له رقم يسمى Index.

10 → index 0
20 → index 1
30 → index 2
40 → index 3
50 → index 4

المشكلة مع المصفوفات العادية

لنفترض أن لدينا:

int numbers[100];

كيف نحسب:

  • أكبر رقم؟
  • أصغر رقم؟
  • المتوسط؟
  • عدد الأرقام الزوجية؟

سنحتاج لاستخدام الخوارزميات مع المصفوفات.


مثال: حساب المتوسط

#include <iostream>
using namespace std;

float average(int arr[], int size)
{
    int sum = 0;

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

    return (float)sum / size;
}

int main()
{
    int marks[5] = {90,80,70,100,85};

    cout << average(marks, 5);

    return 0;
}

مثال: عد الأرقام الزوجية

#include <iostream>
using namespace std;

int countEven(int arr[], int size)
{
    int count = 0;

    for(int i = 0; i < size; i++)
    {
        if(arr[i] % 2 == 0)
        {
            count++;
        }
    }

    return count;
}

int main()
{
    int arr[5] = {1,2,3,4,6};

    cout << countEven(arr,5);

    return 0;
}

مثال: البحث عن عنصر

#include <iostream>
using namespace std;

bool search(int arr[], int size, int target)
{
    for(int i = 0; i < size; i++)
    {
        if(arr[i] == target)
        {
            return true;
        }
    }

    return false;
}

int main()
{
    int arr[5] = {10,20,30,40,50};

    if(search(arr,5,30))
        cout << "Found";
    else
        cout << "Not Found";
}

ثانياً: Strings بشكل متقدم

في المستوى الأساسي تعلمنا:

string name = "Ahmed";

لكن الآن سنستخدم النصوص بطريقة أقوى.


حساب عدد الأحرف

#include <iostream>
using namespace std;

int main()
{
    string text = "Programming";

    cout << text.length();

    return 0;
}

المرور على جميع الأحرف

#include <iostream>
using namespace std;

int main()
{
    string text = "Hello";

    for(int i = 0; i < text.length(); i++)
    {
        cout << text[i] << endl;
    }

    return 0;
}

عد عدد حرف معين

مثلاً عدد مرات ظهور الحرف a.

#include <iostream>
using namespace std;

int main()
{
    string text = "banana";

    int count = 0;

    for(int i = 0; i < text.length(); i++)
    {
        if(text[i] == 'a')
        {
            count++;
        }
    }

    cout << count;

    return 0;
}

عكس النص

#include <iostream>
using namespace std;

int main()
{
    string text = "Ahmed";

    for(int i = text.length()-1; i >= 0; i--)
    {
        cout << text[i];
    }

    return 0;
}

الناتج:

demhA

التحقق من كلمة المرور

#include <iostream>
using namespace std;

int main()
{
    string password;

    cin >> password;

    if(password == "123456")
    {
        cout << "Access Granted";
    }
    else
    {
        cout << "Wrong Password";
    }

    return 0;
}

مشروع مصغر: نظام تسجيل دخول

#include <iostream>
using namespace std;

int main()
{
    string username;
    string password;

    cout << "Username: ";
    cin >> username;

    cout << "Password: ";
    cin >> password;

    if(username == "admin" && password == "1234")
    {
        cout << "Welcome Admin";
    }
    else
    {
        cout << "Login Failed";
    }

    return 0;
}

مشروع مصغر: إحصائيات درجات الطلاب

#include <iostream>
using namespace std;

int main()
{
    int marks[5];
    int max;
    int min;
    int sum = 0;

    for(int i = 0; i < 5; i++)
    {
        cin >> marks[i];
    }

    max = marks[0];
    min = marks[0];

    for(int i = 0; i < 5; i++)
    {
        if(marks[i] > max)
            max = marks[i];

        if(marks[i] < min)
            min = marks[i];

        sum += marks[i];
    }

    cout << "Max = " << max << endl;
    cout << "Min = " << min << endl;
    cout << "Average = " << (float)sum / 5;

    return 0;
}

التفكير المتوسط الحقيقي

عندما ترى مشكلة اسأل نفسك:

  1. هل أحتاج مصفوفة؟
  2. هل أحتاج String؟
  3. هل أحتاج Loop؟
  4. هل أحتاج دالة؟
  5. ما هي خطوات الحل؟

إذا أجبت على هذه الأسئلة ستستطيع حل أغلب المسائل المتوسطة.


أخطاء شائعة

❌ تجاوز حجم المصفوفة

arr[10]

بينما آخر عنصر هو:

arr[9]

❌ استخدام cin مع جمل تحتوي مسافات

استخدم:

getline(cin, text);

❌ نسيان length()

for(int i=0;i<text.length();i++)

تمارين

التمرين 1

اكتب برنامج يحسب عدد الأرقام الفردية داخل مصفوفة.


التمرين 2

اكتب برنامج يعكس نصاً يدخله المستخدم.


التمرين 3

اكتب برنامج يحسب عدد حروف e داخل نص.


التمرين 4

اكتب برنامج يبحث عن رقم داخل مصفوفة ويطبع موقعه.


التمرين 5

اصنع نظام تسجيل دخول يسمح بثلاث محاولات فقط.


ملخص الحلقة الثانية

في هذه الحلقة تعلمنا:

  • التعامل المتقدم مع Arrays
  • حساب المتوسط
  • البحث داخل المصفوفات
  • Strings بشكل احترافي
  • عكس النصوص
  • عد الأحرف
  • مشاريع صغيرة عملية

في الحلقة الثالثة من المستوى المتوسط سنتعلم:

🔥 Vector بدل Arrays
🔥 Dynamic Arrays
🔥 STL الأساسية
🔥 كتابة كود احترافي مثل المبرمجين المحترفين

وهذه تعتبر بداية الانتقال من C++ التقليدية إلى C++ الحديثة. 🚀

تعليقات

💬 🙋🏻‍♂️