(Ahmed Yasser)MY Code
660 subscribers
54 photos
6 videos
25 files
83 links
لو معاك أي سؤال يا صديقي
ابعت أن شاء الله اقدر افيدك
@A_H_M_E_DY_A_S_S_E_R

حساب لنكيد إن
https://www.linkedin.com/in/ahmed-yasser-358536297?utm_source=share_via&utm_content=profile&utm_medium=member_android
Download Telegram
سلام عليكم ورحمه الله وبركاته
شرح
New
Delete
أن شاء الله تفهمه يا شباب
موفقين ان شاء الله ❤️
فرق بين
Pass by Reference
Pass by value
تخيل معاك كتاب أصلي في المكتبة 📖

لما تيجي تقول لصاحبك: "استلف نسخة مصورة من الكتاب" → هو خد صورة طبق الأصل بس مش الأصل.

دلوقتي صاحبك كتب ملاحظات على النسخة اللي معاه، هل الكتاب الأصلي اللي في المكتبة اتغير؟ 🤔
→ لأ طبعًا، لأن اللي معاه مجرد نسخة (وده يشبه بالظبط Pass by Value).



---

طيب لو صاحبك مسك الكتاب الأصلي من المكتبة ✍️

وابتدى يكتب فيه ملاحظات أو يمسح سطور… هل المكتبة هتفضل زي ما هي؟
→ لأ طبعًا، هيتأثر الكتاب الأصلي، لأن التعديل كان على النسخة الأصلية نفسها (وده يشبه بالظبط Pass by Reference).


---

إذن:

Pass by Value = خد نسخة مصورة من الكتاب، أي تعديل مش هيوصل للأصل.

Pass by Reference = بتكتب في الكتاب الأصلي، فأي تعديل هيبان فورًا.



---
1
Ahmed Yasser
c++.pdf
ملف كنت كاتبه به معلومات
عن الكورس 1 و2و 3 مع البشمهندس ابو هدهود
🔹 ما هي Dark Reader؟

هي إضافة (Extension) للمتصفح (زي Chrome أو Firefox أو Edge) وظيفتها إنها تحول أي موقع إلى الوضع الداكن (Dark Mode) حتى لو الموقع ما بيدعمش الوضع داكن رسميًا.

بتغير الألوان (خلفية غامقة + نص فاتح).

ممكن تتحكم في السطوع (Brightness) والتباين (Contrast) ودرجات الرمادي.

تقدر تعمل استثناءات لمواقع معينة.

مفيدة للعين بالليل وبتقلل من إجهاد النظر.



---

🔹 كيف تضيفها؟

الطريقة تعتمد على نوع المتصفح عندك:

📌 Google Chrome:

1. افتح Chrome Web Store.


2. في البحث اكتب Dark Reader.


3. اضغط Add to Chrome (إضافة إلى Chrome).


4. هيطلب تأكيد → اضغط Add Extension.
بعد كده هتلاقي أيقونة Dark Reader جنب شريط العنوان.



📌 Firefox:

1. افتح Firefox Add-ons.


2. اكتب في البحث Dark Reader.


3. اضغط Add to Firefox (إضافة إلى فايرفوكس).


4. وافق على الأذونات.



📌 Microsoft Edge:

1. افتح Edge Add-ons Store.


2. دور على Dark Reader.


3. اضغط Get → Add Extension.




---

🔹 الاستخدام:

بعد التثبيت هيظهرلك أيقونة 🌓 بجانب شريط العنوان.

اضغط عليها تقدر:

تشغل/توقف الوضع الداكن.

تتحكم في السطوع والتباين.

تضيف مواقع في قائمة الاستثناءات (مثلاً تخلي فيسبوك غامق لكن جوجل عادي).
🚀 رحلتك مع أول برنامج في ++C

هل تتخيل أنك بسطور قليلة فقط تقدر تكتب برنامج كامل يظهر رسالة على الشاشة؟
هذا هو سحر لغة ++C!
خلينا ندخل معًا ونفهم البرنامج الأساسي خطوة بخطوة 👇


---

تركيب البرنامج الأساسي في ++C

#include <iostream>
using namespace std;

int main()
{
cout << "Hello, World!" << endl;
return 0;
}


---

📝 شرح مكونات الكود

1️⃣ #include <iostream>

🔹 معناها: نخبر المترجم أن يضمّن مكتبة iostream الخاصة بالإدخال والإخراج.
🔹 التفاصيل:

#include → تعليمة للـ Preprocessor (المعالج المسبق).

<iostream> → تحتوي على أدوات الإدخال (cin) والإخراج (cout).



---

2️⃣ using namespace std;

🔹 وظيفتها: عشان ما نكتبش std::cout كل مرة، نستعملها مباشرة كـ cout.
🔹 التفاصيل:

namespace: مساحة اسم تحتوي على دوال ومتغيرات.

std: هي المساحة القياسية التي تضم كل أدوات ++C الأساسية.



---

3️⃣ int main()

🔹 الدالة الرئيسية التي يبدأ منها تنفيذ البرنامج.
🔹 التفاصيل:

int → نوع الإرجاع (عدد صحيح).

main() → لا يوجد برنامج ++C بدونها.



---

4️⃣ { }

🔹 الأقواس تحدد بداية ونهاية الكود الخاص بالدالة main.
🔹 أي شيء بداخلها يتم تنفيذه عند تشغيل البرنامج.


---

5️⃣ cout << "Hello, World!" << endl;

🔹 السطر الذي يطبع رسالة على الشاشة.
🔹 التفاصيل:

cout → كائن الإخراج (يُرسل البيانات للشاشة).

<< → عامل الإرسال.

"Hello, World!" → النص المراد طباعته.

endl → ينقل المؤشر لسطر جديد.



---

6️⃣ return 0;

🔹 معناها: البرنامج انتهى بنجاح.
🔹 القيمة 0 = لا توجد أخطاء.


---

⚙️ خطوات كتابة وتشغيل البرنامج

1️⃣ افتح بيئة التطوير (IDE) مثل Visual Studio أو Code::Blocks.
2️⃣ أنشئ مشروع جديد (Console Application).
3️⃣ اكتب الكود السابق داخل ملف main.cpp.
4️⃣ احفظ الملف.
5️⃣ قم بالـ Build & Run:

في Visual Studio → Ctrl + F5

في Code::Blocks → F9


النتيجة المتوقعة على الشاشة:

Hello, World!


---

ماذا يحدث عند التشغيل؟

1- يبدأ التنفيذ من main().
2- يتم إرسال الرسالة إلى cout وتظهر على الشاشة.
3- endl ينقلك لسطر جديد.
4- return 0; يخبر النظام أن البرنامج انتهى بسلام.


---

🛠️ تعديلات بسيطة ممتعة!

بدل النص:


cout << "Welcome to C++ Programming!" << endl;

اطبع أكثر من جملة:


cout << "Hello, World!" << endl;
cout << "This is my first C++ program." << endl;


---

📌 الخلاصة

البرنامج الأساسي في ++C يتكون من:

المكتبات (#include).

مساحة الاسم (using namespace std;).

الدالة الرئيسية (int main()).

أوامر الإخراج (cout).

إنهاء البرنامج (return 0;).
📌 أولًا: ما هو الـ Stack؟

الـ Stack (المكدس) هو بنية بيانات (Data Structure) بتشتغل بنظام:
Last In, First Out (LIFO) = "اللي يدخل آخر يخرج أول".
📦 زي كومة أطباق، آخر طبق تحطه فوق هو أول طبق تاخده.


---

📌 ثانيًا: ما هو الـ Call Stack؟

الـ Call Stack هو مكان في الذاكرة بيحتفظ فيه البرنامج بكل الاستدعاءات (calls) للدوال (functions) اللي شغالة في اللحظة دي.
يعني:

كل ما تنادي على دالة → بيتضاف "إطار" (Stack Frame) في الـ call stack.

لما تخلص الدالة → بيتشال الإطار من الـ stack.



---

📌 ثالثًا: ما هو Stack Frame؟

كل دالة بتستدعيها ليها "صندوق خاص" (Stack Frame) بيتخزن فيه:

1. عنوان العودة (Return Address): عشان لما تخلص الدالة يعرف يرجع فين.


2. المتغيرات المحلية (Local Variables) داخل الدالة.


3. البراميترز (Parameters) اللي اتبعتت للدالة.




---

📌 رابعًا: مثال عملي في C++

#include <iostream>
using namespace std;

void funcC() {
int c = 30;
cout << "Inside funcC, c = " << c << endl;
}

void funcB() {
int b = 20;
cout << "Inside funcB, b = " << b << endl;
funcC(); // استدعاء funcC
}

void funcA() {
int a = 10;
cout << "Inside funcA, a = " << a << endl;
funcB(); // استدعاء funcB
}

int main() {
cout << "Program start" << endl;
funcA(); // استدعاء funcA
cout << "Program end" << endl;
return 0;
}


---

🧠 إيه اللي بيحصل في الـ Call Stack؟

1. يبدأ البرنامج في main() → يتضاف Stack Frame خاص بـ main.


2. main استدعى funcA → يتضاف Stack Frame لـ funcA.


3. funcA استدعى funcB → يتضاف Stack Frame لـ funcB.


4. funcB استدعى funcC → يتضاف Stack Frame لـ funcC.


5. funcC خلصت → بيتشال Stack Frame بتاعها.


6. يرجع لـ funcB → يكمل وينتهي → يتم حذفه.


7. يرجع لـ funcA → يكمل وينتهي → يتم حذفه.


8. في الآخر يرجع لـ main → يكمل وينتهي → يتم حذفه.




---

📌 خامسًا: أهمية الـ Call Stack

تتبع الاستدعاءات: يعرف البرنامج أي دالة بتشتغل حاليًا.

إدارة الذاكرة: يخزن المتغيرات المحلية مؤقتًا.

التصحيح (Debugging): لما يحصل خطأ (مثلاً Stack Overflow) المترجم بيطبع "Stack Trace" يوضح سلسلة الاستدعاءات.



---

🎯 الخلاصة:

الـ Call Stack = دفتر متابعة الاستدعاءات للدوال.

كل دالة بتتنادى → ليها صندوق خاص (Stack Frame).

بيتشال الصندوق أول ما الدالة تخلص.

شبيه بكومة أطباق → "آخر دالة تدخل هي أول دالة تخرج".
من اين يبدأ تنفيذ البرنامج
من الدول الأساسية
Int main وتعتبر
نقطة الانطلاق entry point
طيب
📌 ما معنى Entry Point؟

Entry Point = هو المكان الأول اللي يبدأ منه تنفيذ البرنامج.

زي "باب البداية" أو "نقطة البداية" اللي المترجم (Compiler) بيخش منها عشان يشغل الكود.



---

📌 في C++

في لغة C++، الـ Entry Point الافتراضية هي الدالة main().
يعني مهما كان عندك دوال أو كلاسات أو ملفات... التنفيذ لازم يبدأ من main.

#include <iostream>
using namespace std;

int main() {
cout << "Program started here!" << endl;
return 0;
}

🔹 هنا:

main هي Entry Point.

المترجم بيروح مباشرةً ليها ويبدأ يقرأ التعليمات منها خطوة بخطوة.



---

📌 طيب إزاي البرنامج يعرف يرجع بعد ما يخلص؟

الدالة main() لازم ترجع قيمة عددية (int).

القيمة دي بتروح لنظام التشغيل (OS) وتوضح إذا كان البرنامج خلص بنجاح ولا حصل خطأ.

return 0; → البرنامج خلص بنجاح.

أي رقم آخر → فيه خطأ أو حالة خاصة.




---

📌 أمثلة واقعية:

1. برنامج بسيط:



int main() {
return 0; // نقطة البداية ونهاية التنفيذ
}

2. مع دوال أخرى:



#include <iostream>
using namespace std;

void sayHello() {
cout << "Hello!" << endl;
}

int main() {
sayHello(); // التنفيذ يبدأ هنا
return 0;
}

🔹 مهما كان فيه دوال ثانية (sayHello) التنفيذ مش هيبدأ بيها، لازم يمر بـ main() الأول.


---

📌 الخلاصة:

Entry Point = المكان اللي يبدأ منه تشغيل البرنامج.

في C++، الـ Entry Point دائمًا هي main().

من خلالها تقدر تستدعي باقي الدوال والكلاسات.
📌 ما هي أنواع البيانات؟

أنواع البيانات هي الطريقة اللي من خلالها المترجم (Compiler) يعرف حجم البيانات وكيف يخزنها في الذاكرة (RAM)، وأيضًا العمليات المسموح تنفيذها عليها.


---

🟢 1. الأنواع الأساسية (Basic Data Types)

🔹 الأعداد الصحيحة (Integers)

int: يخزن أعداد صحيحة (موجبة أو سالبة).

int age = 20; // مثال: عمر

short int أو short: أصغر من int (يستهلك ذاكرة أقل).

long int أو long: أكبر من int (سعة أكبر).

long long int: أكبر من long.



---

🔹 الأعداد العشرية (Floating Point)

float: أعداد عشرية بدقة متوسطة.

float gpa = 3.5; // مثال: تقدير

double: أعداد عشرية بدقة أعلى.

double pi = 3.14159;

long double: دقة أعلى من double (نادر الاستخدام).



---

🔹 الحروف (Characters)

char: يخزن حرف واحد فقط.

char grade = 'A'; // مثال: تقدير مادة



---

🔹 القيم المنطقية (Boolean)

bool: يخزن قيمة true أو false.

bool isStudent = true;



---

🟢 2. الأنواع المشتقة (Derived Data Types)

هذه أنواع مبنية على الأنواع الأساسية:

Arrays (المصفوفات): مجموعة عناصر من نفس النوع.

int numbers[5] = {1, 2, 3, 4, 5};

Pointers (المؤشرات): تخزن عناوين الذاكرة.

int x = 10;
int* ptr = &x; // المؤشر يخزن عنوان x

Functions (الدوال): ممكن تكون نوع بيانات ترجع قيمة.



---

🟢 3. الأنواع المعرفة من المستخدم (User Defined Data Types)

struct: هيكل لتجميع بيانات مختلفة.

struct Student {
int id;
char name[20];
float gpa;
};

class: مثل struct لكنها أقوى (OOP).

enum: تعريف قيم ثابتة مسماة.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};



---

🟢 4. النوع الفارغ (Void)

void: يعني "لا شيء". غالبًا يستخدم في الدوال التي لا ترجع قيمة.

void sayHello() {
cout << "Hello!" << endl;
}



---

🎯 جدول مبسط للأنواع الأساسية

النوع مثال الحجم التقريبي

int 10 4 بايت
float 3.14 4 بايت
double 3.14159 8 بايت
char 'A' 1 بايت
bool true/false 1 بايت
void لا قيمة —



---

🔑 الخلاصة:

تستخدم int للأعداد الصحيحة.

تستخدم float/double للأعداد العشرية.

تستخدم char للحروف.

تستخدم bool للقيم المنطقية.

تستخدم void للدوال اللي ما بترجعش قيمة.

تقدر تبني أنواعك الخاصة باستخدام struct, class, enum.
🔹 ما هي أنظمة العد؟

هي طرق مختلفة لتمثيل الأعداد حسب الأساس (Base) المستخدم:

العشري (Decimal – Base 10): الأرقام من 0 → 9 (النظام اللي بنستخدمه في حياتنا).

الثنائي (Binary – Base 2): الأرقام 0 و 1 فقط (يستخدم في الحاسوب).

الثماني (Octal – Base 8): الأرقام من 0 → 7.

السادس عشر (Hexadecimal – Base 16): الأرقام من 0 → 9 والحروف A,B,C,D,E,F (تمثل 10–15).



---

🔹 التحويل بينهم

1. من أي نظام → عشري
اضرب كل رقم × (الأساس^ترتيبه) واجمع.

مثال: (1011)₂ =
1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11₁₀




---

2. من عشري → أي نظام

قسم العدد على الأساس.

خُذ البواقي من أسفل لأعلى.


مثال: (25)₁₀ إلى ثنائي:
25 ÷ 2 = 12 باقي 1
12 ÷ 2 = 6 باقي 0
6 ÷ 2 = 3 باقي 0
3 ÷ 2 = 1 باقي 1
1 ÷ 2 = 0 باقي 1
→ (11001)₂




---

3. بين ثنائي ثماني

اجمع كل 3 بتات (من اليمين).

101 110 = (56)₈





---

4. بين ثنائي سداسي عشر

اجمع كل 4 بتات (من اليمين).

1111 1010 = (FA)₁₆





---

🔹 الاستخدامات

الثنائي (Binary): أساس عمل الكمبيوتر (0/1 = OFF/ON).

العشري (Decimal): الإنسان يستخدمه يوميًا.

الثماني (Octal): كان يستخدم في الأنظمة القديمة وللتبسيط.

السادس عشر (Hexadecimal): شائع في البرمجة لتمثيل العناوين في الذاكرة والألوان في CSS (#FF0000 = أحمر).



---

الخلاصة:

العشري → حياتنا اليومية.

الثنائي → الكمبيوتر.

الثماني → أقدم وأحيانًا اختصار للثنائي.

السادس عشر → برمجة (ذاكرة، ألوان، قيم كبيرة).
👏1
🎯 ما هي الدالة (Function)؟

تخيل معايا إن عندك مصنع:

المصنع ده بياخد مواد خام (مدخلات)

جوه المصنع بيتم عمليات تصنيع (معالجة)

وفي الآخر بيطلعلك منتج جاهز (مخرجات)


نفس الفكرة بالضبط في الدوال في البرمجة.
الدالة عبارة عن جزء من الكود معمول مخصوص عشان يعمل مهمة معينة بدل ما تكرر الكود كتير.


---

🏭 مكونات الدالة (زي المصنع)

1. المدخلات (Parameters / Arguments):

زي المواد الخام اللي بتدخل المصنع.

هي القيم اللي بتبعتها للدالة عشان تشتغل عليها.



2. المعالجة (Process):

الخطوات أو العمليات اللي بتحصل جوه الدالة.



3. المخرجات (Return Value):

المنتج النهائي اللي المصنع بيرجعهولك بعد ما يخلص شغل.

ممكن يكون فيه مخرجات أو لا (في بعض المصانع بس بيعملوا الشغل من غير ما يرجعولك حاجة).





---

🧩 الشكل العام للدالة في C++

نوع_المخرجات اسم_الدالة(نوع_المدخلات1 اسم_المعامل1, نوع_المدخلات2 اسم_المعامل2, ...)
{
// العمليات اللي هتحصل (Body)
return القيمة; // المنتج النهائي
}


---

🎬 مثال بسيط

عايز دالة تجمع عددين:

#include <iostream>
using namespace std;

// دالة بتجمع عددين
int Add(int a, int b) // (int a, int b) دول المواد الخام (المدخلات)
{
int result = a + b; // دي العمليات داخل المصنع
return result; // ده المنتج النهائي اللي بيخرج من المصنع
}

int main()
{
int x = 5, y = 7;
int sum = Add(x, y); // بنبعت المواد الخام (5,7) للمصنع
cout << "The sum is: " << sum << endl; // المنتج النهائي = 12
return 0;
}

🔎 الشرح:

int Add(int a, int b):

int ← نوع المنتج النهائي (هيكون عدد صحيح).

Add ← اسم المصنع (الدالة).

(int a, int b) ← المدخلات (مواد خام).


int result = a + b; ← عملية التصنيع (جمع).

return result; ← بيرجع الناتج (المخرجات).



---

🎭 أنواع الدوال من حيث المدخلات والمخرجات

1. مدخلات + مخرجات:

مثال: دالة تجمع عددين وترجع الناتج.



2. مدخلات فقط (من غير مخرجات):

مثال: دالة تطبع اسمك بس.


void PrintName(string name) // void يعني مفيش مخرجات
{
cout << "Hello " << name << endl;
}


3. مخرجات فقط (من غير مدخلات):

مثال: دالة ترجعلك رقم ثابت أو التاريخ الحالي.


int GetNumber()
{
return 42;
}


4. لا مدخلات ولا مخرجات:

مثال: دالة بس تطبع رسالة.


void SayHello()
{
cout << "Hello, World!" << endl;
}




---

💡 تشبيه بسيط يفيدك كمبتدئ

الدالة = المصنع

Parameters = المواد الخام اللي بيدخلها المصنع

الكود جوه الدالة = خطوات التصنيع

Return value = المنتج النهائي

void = مصنع شغال لكن مش بيرجعلك منتج (مجرد بيعمل حاجة زي طباعة)

لنك فديوهات أن شاء الله تفيدك

https://youtu.be/t6qw8_G0JxA?si=cEMKU8Kqi5JymAYA

https://youtu.be/fdauhXJOuDE?si=sdHvbiMJi9LFf4iY

شويه معلومات
علي الفرق بين
Procedure VS Function

📌 الفرق بين Function و Procedure

1️⃣ التعريف

Function (دالة):
زي مصنع بيرجعلك منتج (قيمة) بعد ما يخلص شغله.

Procedure (إجراء):
زي مصنع خدمة، بيعمل المهمة (يطبع رسالة – يحفظ بيانات – يغير حاجة)، لكن مش بيرجعلك قيمة.



---

2️⃣ نوع الراجع (Return Type)

Function: لازم يكون له نوع راجع (int, float, string …).

Procedure: نوعه void يعني "لا يرجع شيء".



---

3️⃣ التخزين في متغير

Function: ممكن تخزن الناتج في متغير.

int Add(int a, int b) {
return a + b;
}

int main() {
int result = Add(5, 3); // هنا خزّنا الناتج في متغير
cout << result; // يطبع 8
return 0;
}

Procedure: ما ينفعش تخزن لأنها ما بترجعش حاجة.

void PrintSum(int a, int b) {
cout << a + b << endl;
}

int main() {
PrintSum(5, 3); // يطبع 8 لكن مش نقدر نخزنها في متغير
return 0;
}



---

4️⃣ العمليات الحسابية

Function: ينفع تستخدمها جوه عمليات حسابية.

int Square(int x) {
return x * x;
}

int main() {
int total = Square(3) + 5; // 9 + 5 = 14
cout << total;
return 0;
}

Procedure: ما ينفعش تدخلها في عمليات حسابية لأنها ما بترجعش حاجة.



---

🎯 الخلاصة في جملة للمبتدئ

Function = مصنع بيرجعلك منتج، تقدر تخزنه وتعمل عليه عمليات حسابية.

Procedure = مصنع بيعمل شغل بس من غير ما يديك منتج (يعني مش هتخزن حاجة).
👍1🆒1