(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
🔹 ما هي أنظمة العد؟

هي طرق مختلفة لتمثيل الأعداد حسب الأساس (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
فرق بين parameters and arguments
Procedure VS Function
#include <iostream>
using namespace std;


void SumNumbers(int a, int b) {
int sum = a + b;
cout << "The sum is: "<<sum<< endl ;
}

int main() {
int x = 5, y = 7;

SumNumbers(x, y);

return 0;
}
#include <iostream>
using namespace std;


int SumNumbers(int a, int b) {
int sum = a + b;
return sum;
}

int main() {
int x = 5, y = 7;
int result = SumNumbers(x, y);

cout << "The sum is: " << result << endl;

cout << "The sum + 10 = " << SumNumbers(x, y) + 10 << endl;

return 0;
}
الحمد لله
3❤‍🔥1🔥1👏1
int arr[]{ 1,2,3 };

cout << arr << endl;

char Name[] = "ali";

cout << Name; النتيجة 000000C520AFFC18

ali طيب انا في الحالة الاول كتبت اسم الدالة فاعطاني العنوان ام في الحالة الثانية طبع القيم لماذا

الي عنده اي معلومه عن موضوع ده ياريت يبعت
علي الخاص
@Ay01014469594
✦ إنَّ انشغالك بالتوافه يسرق منك أجمل ما في وقتك، ويبعدك عن النافعات. أرأيتَ لو أن الجوف امتلأ بالطعام الفاسد، فلن يجد مكانًا للطعام النافع إلا قليلًا؟ وكذلك القلب والعقل، إذا امتلآ بما لا ينفع، ضاع فيهما ما هو أنفع وأبقى.

✦ فابتعد يا صديقي عن كل ما يُضيّع عمرك؛ فإن العمر قصير، والعلم والعمل كثير، فلا تفرّط في أيامك بين لهوٍ وعبثٍ، بل اجعلها زادًا ينفعك في دنياك وآخرتك.

✦ واعلم أن الأيام تمضي، والليالي تنقضي، وفي نهاية المطاف لا مفرّ من الموت. فاختر لنفسك ما يستحق أن تبذل فيه وقتك وجهدك، فما أجمل أن تزرع لنفسك أثرًا يبقى بعد الرحيل.
👍2🔥1🕊1💯1
🔹 ما هو الـ Namespace؟

الـ namespace في C# هو حاوية (Container) منطقية تجمع الكلاسات (Classes)، الإنترفيس (Interfaces)، الإنم (Enums)، إلخ…

الهدف منها تنظيم الكود وليس تخزينه فعليًا (يعني مش زي المجلدات في الهارد، بل تقسيم منطقي داخل الكود).



---

🔹 هل هو Container؟

نعم

ممكن نعتبره Container منطقي لأنه يحتوي على أنواع (Types) مثل:

namespace MyApp.Utilities
{
class MathHelper { }
class StringHelper { }
}

هنا الـ MyApp.Utilities هو "وعاء" أو "مساحة أسماء" تحتوي على الكلاسات MathHelper و StringHelper.



---

🔹 لماذا نستخدمه؟ (أهميته)

1. تنظيم الكود: تخلي المشروع مرتب بدل ما تكون كل الكلاسات في نفس المستوى.


2. تجنب التضارب (Name Conflicts):

ممكن يكون عندك Class باسم Logger في أكثر من مكتبة.

بالـ namespace تفرق بينهم:

ProjectA.Logger

ProjectB.Logger




3. تسهيل القراءة والصيانة: تقسيم الكود لمجموعات منطقية.




---

🔹 هل هو زي الـ Folder (مجلد)؟

نوعًا ما نعم من ناحية التنظيم.

لكن الفرق:

المجلد → تنظيم على مستوى الملفات في النظام.

الـ namespace → تنظيم على مستوى الكود داخل المشروع.


وغالبًا VS (Visual Studio) يحاول يخلي أسماء الـ namespaces مطابقة لمسار المجلدات، لكن مو شرط 100%.



---

🔹 مثال عملي:

namespace Company.Project.Data
{
public class DatabaseManager { }
}

namespace Company.Project.Services
{
public class UserService { }
}

هنا نظّمنا الكود:

كل ما يخص الـ Data → في Company.Project.Data

كل ما يخص الـ Services → في Company.Project.Services




---

الخلاصة:

نعم هو Container منطقي للأنواع.

نستخدمه أساسًا لتنظيم الكود وتجنب التعارض بين الأسماء.



---

🔹 هل الـ namespace له نفس المعنى في لغات أخرى؟

الإجابة: المفهوم واحد تقريبًا لكن طريقة التنفيذ تختلف من لغة لأخرى.
الفكرة العامة دائمًا: تنظيم الكود + تجنب تضارب الأسماء (Name Conflicts).


---

📌 أمثلة حسب اللغات:

1. C++

عندها namespace بنفس المعنى تقريبًا.

مثال:

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

int main() {
int x = Math::Add(2, 3);
}

تستخدم :: للوصول للأنواع داخل namespace.



---

2. Java

ما عندها كلمة namespace، لكن تستخدم الـ packages لنفس الفكرة.

مثال:

package com.company.utils;

public class StringHelper { }

هنا package = namespace في C#.

للوصول تستعمل:

import com.company.utils.StringHelper;



---

3. Python

ما عندها كلمة namespace واضحة، لكن كل ملف (module) يعتبر namespace بحد ذاته.

وأيضًا الـ packages (مجلد يحتوي ملف init.py) تنظم الكود مثل namespaces.

مثال:

import math
print(math.sqrt(16))

هنا math يعتبر namespace يحتوي دوال كثيرة.



---

4. JavaScript / TypeScript

JavaScript ما كان فيها namespace تقليدي، الناس كانت تنظم الكود باستخدام objects.

TypeScript أضافت namespace يشبه C#:

namespace Utils {
export function add(a: number, b: number) {
return a + b;
}
}

console.log(Utils.add(2, 3));



---

الخلاصة:

C#, C++ → عندهم namespace صريح.

Java → تستعمل package.

Python → تستعمل modules/packages.

JS/TS → تعتمد على objects أو namespaces (في TypeScript).
4
تحسين الكود


🎯 الفكرة العامة

تحسين الكود (Code Optimization) معناه إنك تخلي برنامجك:

1. أسرع في التنفيذ.


2. يستهلك ذاكرة أقل.


3. أسهل في القراءة والفهم (قابلية الصيانة).




---

🪜 الخطوات مع الشرح

1. فهم المشكلة قبل كتابة الكود

قبل ما تبدأ تكتب، لازم تفكر: إيه اللي البرنامج هيعمله بالظبط؟

لو فهمت كويس، هتكتب كود مختصر وواضح.


🔹 مثال:
بدل ما تعمل برنامج يضرب رقمين بطريقة معقدة، تقدر تكتبها في سطر واحد.

#include <iostream>
using namespace std;

int main() {
int a, b;
cin >> a >> b;
cout << "الناتج = " << a * b << endl;
return 0;
}


---

2. استخدام المتغيرات بشكل مناسب

متخزنش بيانات مش محتاجها.

استخدم النوع المناسب:

int للأعداد الصحيحة.

double للأعداد العشرية.

char للحروف.



🔹 مثال (غير محسن):

double x = 5; // مش لازم double هنا

🔹 مثال (محسن):

int x = 5; // كافي ويوفر ذاكرة


---

3. تجنب التكرار في الكود

لو عندك كود بيتكرر، حوله إلى دالة (function).

🔹 مثال (غير محسن):

#include <iostream>
using namespace std;

int main() {
int a = 5, b = 3;
cout << "مجموعهم = " << a + b << endl;

int c = 10, d = 7;
cout << "مجموعهم = " << c + d << endl;
return 0;
}

🔹 مثال (محسن باستخدام دالة):

#include <iostream>
using namespace std;

int sum(int x, int y) {
return x + y;
}

int main() {
cout << "مجموعهم = " << sum(5, 3) << endl;
cout << "مجموعهم = " << sum(10, 7) << endl;
return 0;
}


---

4. استخدام الحلقات بدل التكرار اليدوي

لو محتاج تنفذ نفس العملية عدة مرات، استعمل loop.

🔹 مثال (غير محسن):

cout << "مرحبا" << endl;
cout << "مرحبا" << endl;
cout << "مرحبا" << endl;

🔹 مثال (محسن باستخدام for loop):

for (int i = 0; i < 3; i++) {
cout << "مرحبا" << endl;
}


---

5. التفكير في الخوارزميات

الكود مش بس كتابة أوامر، لازم تختار الطريقة (الخوارزمية) الأفضل.

مثال: عايز تدور على رقم في مصفوفة:

البحث الخطي (linear search): يمر على كل عنصر (أبطأ).

البحث الثنائي (binary search): أسرع بكثير، لكن يحتاج المصفوفة تكون مرتبة.



🔹 مثال للبحث الخطي:

#include <iostream>
using namespace std;

int main() {
int arr[] = {1, 4, 7, 9, 12};
int size = 5, target = 9;
bool found = false;

for (int i = 0; i < size; i++) {
if (arr[i] == target) {
cout << "الرقم موجود في الفهرس: " << i << endl;
found = true;
break;
}
}
if (!found) cout << "الرقم غير موجود" << endl;

return 0;
}


---

6. تنسيق الكود ليكون مقروء

سيب مسافات بين الأسطر.

سمي المتغيرات بأسماء واضحة:

sum أفضل من s

numberOfStudents أفضل من n




---

7. التجربة والتحسين

بعد ما تكتب الكود، جربه وشوف الأداء.

لو بطيء أو معقد، فكر إزاي تختصر أو تغير الخوارزمية.



---

الخلاصة

تحسين الكود بيكون في 3 مستويات:

1. الكتابة البسيطة والواضحة.


2. استخدام الموارد بشكل مناسب (ذاكرة + وقت).


3. اختيار الخوارزمية الأفضل.
👍1
🎯 يعني إيه Big O ؟

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


---

🪜 المستويات الأساسية اللي لازم المبتدئ يعرفها

1. O(1) — ثابت

التنفيذ بياخد نفس الوقت مهما كان حجم البيانات.

مثال: الوصول لعنصر في المصفوفة.


int arr[5] = {1,2,3,4,5};
cout << arr[2]; // دايما سريع


---

2. O(n) — خطي

الوقت بيزيد مع زيادة حجم البيانات.

مثال: المرور على كل عناصر المصفوفة.


for (int i = 0; i < n; i++) {
cout << arr[i];
}


---

3. O(n²) — تربيعي

كل ما البيانات تكبر، الوقت يكبر بسرعة كبيرة جدًا.

بيظهر غالبًا مع الحلقات المتداخلة.


for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << i << "," << j << endl;
}
}


---

4. O(log n) — لوغاريتمي

وقت التنفيذ بيزيد ببطء شديد مع كبر البيانات.

مثال: البحث الثنائي (Binary Search).


// لازم المصفوفة تكون مرتبة
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}


---

📌 الخلاصة للمبتدئ

O(1): سريع جدًا (زي فتح درج معين في دولاب).

O(n): تمشي على كل العناصر (زي تعد الطلاب واحد واحد).

O(n²): كل طالب يقارن مع كل طالب (عدد العمليات ينفجر بسرعة).

O(log n): تقسم وتدور (زي البحث في كتاب بفتح النص كل مرة).
👍1
🔹 في الغالب نعرّف المتغيرات زي العمر (age) باستخدام int بدل short، حتى لو العمر ما يحتاج رقم كبير.

السبب:

المعالجات الحديثة (32-بت و 64-بت) مصممة تشتغل أسرع مع int (4 بايت) مقارنة بـ short (2 بايت).

حتى لو كتبت short، المعالج بيرفعه داخليًا إلى int عشان يعمل العمليات الحسابية → وبالتالي short مش أسرع، بل أحيانًا أبطأ.

فرق الحجم (2 بايت vs 4 بايت) مش مهم حاليًا إلا لو بتتعامل مع ملايين القيم وعايز توفر ذاكرة.


الخلاصة:

نستخدم int كخيار افتراضي لأنه أوضح وأسرع.

نحتاج short أو unsigned short فقط لما يكون عندنا سبب محدد (زي ضغط في الذاكرة أو عمل برمجة مدمجة Embedded).
المعلومة دي ذكرها
@Abdou_1428
واول مرة اسمعها وبرده أظن في ناس زي
بجد ربنا يكرمك ويوفقك ❤️☺️
❤‍🔥3👍1