كورس 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;
}
التفكير المتوسط الحقيقي
عندما ترى مشكلة اسأل نفسك:
- هل أحتاج مصفوفة؟
- هل أحتاج String؟
- هل أحتاج Loop؟
- هل أحتاج دالة؟
- ما هي خطوات الحل؟
إذا أجبت على هذه الأسئلة ستستطيع حل أغلب المسائل المتوسطة.
أخطاء شائعة
❌ تجاوز حجم المصفوفة
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++ الحديثة. 🚀

تعليقات
إرسال تعليق