تعلم البرمجة بلغة ++C
Kanalga Telegram’da o‘tish
💻 الى كل المبرمجين 🔴سوف تجد شرح لغة السي بلاس بلاس للمبتدئين حتى الاحتراف 📺فيدوهات شرح عديدة 🎥 برامج مجانية 🎁 مشاريع مجانيه 📚 كتب تصميم وبرمجة 📚 مراجع واسئلة محلولة 💻برامج واكواد كثيرة كل ذلك في قناتي 👇 https://t.me/LearnCPlus_Plus
Ko'proq ko'rsatish2 319
Obunachilar
-124 soatlar
+17 kunlar
-3230 kunlar
Postlar arxiv
+1
#تحدي اليوم.
المدخلات عبارة عن أرقام int.
والمخرجات تكون عبارة عن الرقم المدخل مكتوب لفظًا.
الشرح:
بيستمر تنفيذ الحلقة while إلى أن يُصبح x أصغر أو يساوي y.
وكيفية نقص القيمة x:
بسبب وجود عامل النقصان داخل الحلقة.
مخرجات الكود :
int x = 5;
int y = 2; int z = 0; while (x > y) { x--; z += x; } cout << z << endl;
أي سؤال أو استفسار
ارسل هنا :-
@Learncplus12
واللي عنده موقع يترجم الملفات للعربية ترجمه افضل من قوقل يرسله لي وله جزيل الشكر 🌹
#الدرس_السادس
المؤشرات او البينات (Pointers) هي مفهوم أساسي في لغة البرمجة C++ يسمح لك بتخزين وتعديل عناوين الذاكرة. توفر البينات طريقة للوصول إلى البيانات وتعديلها بشكل غير مباشر في الذاكرة. دعنا نستكشف تفاصيل البينات في C++.
1. تعريف البينات:
لتعريف البينات، نستخدم الرمز النجمي (*) في الإعلان. على سبيل المثال، لتعريف بينات لعدد صحيح، يمكنك كتابة:
int* ptr;
هنا، ptr هو بينة لعدد صحيح.
2. تهيئة البينات:
يمكن تهيئة البينات باستخدام عنوان متغير باستخدام عامل العنوان (&). على سبيل المثال:
int value = 42;
int* ptr = &value;
هنا، يتم تهيئة ptr بعنوان الذاكرة للمتغير value.
3. تحجيم البينات:
تحجيم البينات يعني الوصول إلى القيمة المخزنة في العنوان الذي تشير إليه البينة. يتم ذلك باستخدام عامل التحجيم (*) قبل متغير البينة. على سبيل المثال:
int value = 42;
int* ptr = &value;
std::cout << *ptr << std::endl; // الناتج: 42
التعبير *ptr يسترد القيمة المخزنة في العنوان الذي يشير إليه ptr.
4. تعديل القيم المشيرة إليها:
يمكن استخدام البينات لتعديل قيمة المتغير المشير إليها. على سبيل المثال:
int value = 42;
int* ptr = &value;
*ptr = 99;
std::cout << value << std::endl; // الناتج: 99
عن طريق تعيين قيمة جديدة لـ *ptr، نقوم بتعديل قيمة value بشكل غير مباشر.
5. البينات الفارغة:
يمكن للبينات أن تحتوي أيضًا على قيمة خاصة تسمى بينة فارغة (null pointer)، والتي تشير إلى أنها لا تشير إلى أي عنوان صالح في الذاكرة. يمكنك تعيين بينة فارغة باستخدام الكلمة الأساسية nullptr. على سبيل المثال:
int* ptr = nullptr;
6. الحساب على البينات:
يمكن زيادة وتنقيص البينات، مما يسمح لك بالتنقل في الذاكرة. عمليات الزيادة والتنقيص تعتمد على حجم نوع البيانات الذي تشير البينة إليه. على سبيل المثال:
int array[] = {1, 2, 3, 4, 5};
int* ptr = array;
std::cout << *ptr << std::endl; // الناتج: 1
ptr++; // التحرك إلى العنصر التالي
std::cout << *ptr << std::endl; // الناتج: 2
7. المصفوفات والبينات:
في لغة البرمجة C++، المصفوفات والبينات مرتبطة ارتباطًا وثيقًا. يمكن التعامل مع اسم المصفوفة كبينة تشير إلى العنصر الأول في المصفوفة. على سبيل المثال:
int array[] = {1, 2, 3};
int* ptr = array;
std::cout << *ptr << std::endl; // الناتج: 1
هنا، يشير ptr إلى العنصر الأول في المصفوفة array.
هذه بعض الجوانب الرئيسية للبينات في C++. توفر البينات قدرات قوية لتخصيص الذاكرة الديناميكية والعمل مع المصفوفات والوصول المباشر إلى الذاكرة. ومع ذلك، من المهم استخدام البينات بحذر لتجنب مشاكل شائعة مثل البينات المتدلية (dangling pointers) أو تسريب الذاكرة (memory leaks).#تابع
2.Passing Arguments by Reference in C++ (إمرار المعاملات بالقيمة المرجعية)
في طريقة الإمرار بالقيمة المرجعية، يتم تمرير عنوان المتغير إلى الدالة بدلاً من نسخة من قيمته. يتيح ذلك للدالة الوصول إلى المتغير الأصلي مباشرةً وإجراء التعديلات عليه.
مثال:
void swapNumbers(int& firstNumber, int& secondNumber) {
// تبديل قيمتي المتغيرين
int temp = firstNumber;
firstNumber = secondNumber;
secondNumber = temp;
}
int main() {
int x = 5;
int y = 10;
// استدعاء دالة swapNumbers مع تمرير عناوين المتغيرات
swapNumbers(x, y);
// عرض قيم المتغيرات بعد التبديل
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
return 0;
}
في هذا المثال، يتم تمرير عناوين المتغيرات x و y إلى دالة swapNumbers باستخدام & أمام اسم المتغير. داخل الدالة، يمكن للدالة الوصول إلى قيمتي المتغيرين مباشرةً وتبديلهما باستخدام متغير temp. بعد استدعاء الدالة، تصبح قيمة x 10 و y 5.
ملاحظات:
* تعديلات دائمة: تؤثر التعديلات التي يتم إجراؤها على المعاملات داخل جسم الدالة على القيمة الأصلية للمتغيرات.
* كفاءة: يعتبر الإمرار بالقيمة المرجعية أكثر كفاءة من الإمرار بالقيمة، حيث لا يلزم إنشاء نسخة من قيمة المعامل.
* استخدامات: تُستخدم طريقة الإمرار بالقيمة المرجعية بشكل شائع لتبديل قيم المتغيرات، ووظائف الإدخال والإخراج، وتمرير المصفوفات الكبيرة.
### أنواع أخرى من الدوال:
* دوال محلية (Local functions): يتم تعريفها داخل دالة أخرى ولا يمكن استدعائها من خارج الدالة التي تحتوي عليها.
* دوال خارجية (External functions): يتم تعريفها في ملف منفصل ويمكن استدعائها من أي مكان في البرنامج.
* دوال صديقة (Friend functions): يمكنها الوصول إلى العناصر الخاصة (private) للدالة التي تم تعريفها فيها.
* دوال ثابتة (Static functions): ترتبط بدالة أو فئة معينة ولا تعتمد على مثيل محدد من الفئة.
### خاتمة:
تعتبر الدوال من أهم أدوات البرمجة في C++. فهي تسمح بتقسيم البرامج إلى وحدات أصغر قابلة لإعادة الاستخدام، مما يجعل الكود أكثر وضوحًا وسهولةً في الصيانة. فهم أنواع الدوال وطرق بنائها واستدعائها ضروري لكتابة برامج C++ فعالة.
تفاعلكم مع المنشورات يزيد الشغف
لشرح المزيد والمزيد .. تفاعلوا 🔥#تابع
1. الإمرار بالقيمة (pass by value): يتم تمرير نسخة من قيمة المعامل إلى الدالة، ولا تؤثر التعديلات داخل الدالة على القيمة الأصلية. هذا يعني أن أي تغييرات يتم إجراؤها على المعاملات داخل جسم الدالة لا تنعكس على المتغيرات التي تم تمريرها في الأصل.
مثال دالة incrementByOne للإمرار بالقيمة في C++
void incrementByOne(int x) {
// زيادة قيمة نسخة المعامل بمقدار 1
x++;
// لا تؤثر هذه الزيادة على قيمة المتغير الأصلي
}
int main() {
int number = 5;
// استدعاء دالة incrementByOne مع تمرير قيمة المتغير number
incrementByOne(number);
// عرض قيمة المتغير number بعد استدعاء الدالة
std::cout << "number = " << number << std::endl; // ستظل قيمة number 5
return 0;
}
في هذا المثال، يتم تمرير قيمة المتغير number (5) إلى دالة incrementByOne. داخل الدالة، يتم زيادة نسخة من قيمة المعامل (x) بمقدار 1 (تصبح 6). ومع ذلك، لا تؤثر هذه الزيادة على قيمة المتغير الأصلي number. بعد استدعاء الدالة، ستظل قيمة number 5.
شرح:
* عند تمرير المعاملات بالقيمة، يتم إنشاء نسخة من قيمتها داخل الدالة. يتم إجراء أي عمليات على هذه النسخة ولا تؤثر على القيمة الأصلية للمتغير.
* في دالة incrementByOne، يتم تمرير قيمة number (5) إلى x. تُنشئ الدالة نسخة من x (أيضًا 5) وتزيدها بمقدار 1. تؤثر هذه الزيادة فقط على نسخة x داخل الدالة، ولا تؤثر على قيمة number في main.
ملاحظات:
* تعديلات دائمة: لا تؤثر طريقة الإمرار بالقيمة على القيمة الأصلية للمتغيرات.
* كفاءة: تُعتبر طريقة الإمرار بالقيمة أكثر كفاءة من الإمرار بالقيمة المرجعية، حيث لا يلزم إنشاء عنوان للمتغير.
* استخدامات: تُستخدم طريقة الإمرار بالقيمة بشكل شائع لعمليات الحساب البسيطة، ووظائف الإدخال والإخراج، وتمرير قيم صغيرة.
أمثلة أخرى على الإمرار بالقيمة:
* تمرير قيمة سلسلة إلى دالة لحساب طولها.
* تمرير قيمة عدد صحيح إلى دالة لحساب جذرها التربيعي.
* تمرير قيمة Boolean إلى دالة للتحقق من صحتها.
ملخص:
تُعد طريقة الإمرار بالقيمة مفهومًا أساسيًا في C++. فهي تسمح بتمرير قيم للمعاملات دون التأثير على القيمة الأصلية للمتغيرات. فهم كيفية عمل الإمرار بالقيمة ضروري لكتابة برامج C++ فعالة.#الدرس_الخامس
الدوال في لغة البرمجة C++
الدوال هي لبنات بناء أساسية في لغة البرمجة C++. تعتبر الدالة كتلة من الأوامر يتم تعريفها مرة واحدة ويمكن استدعائها في أي مكان في البرنامج. فهي تساعد على تقسيم البرنامج إلى وحدات منطقية أصغر، مما يجعل الكود أكثر قابلية للإدارة وإعادة الاستخدام.
### أنواع الدوال:
هناك نوعين رئيسيين من الدوال في C++:
1. دوال بدون إرجاع (void functions): لا تعيد هذه الدوال أي قيمة عند انتهائها. تستخدم هذه الدوال بشكل عام لإجراء عمليات معينة مثل الطباعة على الشاشة أو إجراء حسابات لا نحتاج إلى تخزين نتيجتها.
2. دوال بإرجاع (value-returning functions): تقوم هذه الدوال بإرجاع قيمة من نوع محدد عند انتهائها. على سبيل المثال، يمكن لدالة حساب مساحة المستطيل أن تأخذ طول وعرض المستطيل كمعاملات وتعيد مساحته كقيمة.
### بناء الدالة:
تتكون الدالة من عدة عناصر:
1. نوع الإرجاع (return type): يحدد نوع القيمة التي ستعيدها الدالة. بالنسبة للدوال بدون إرجاع، يكون نوع الإرجاع
void.
2. اسم الدالة (function name): الاسم الذي نستخدمه لاستدعاء الدالة. يجب أن يكون فريدا داخل نطاقها و يعكس غرض الدالة بشكل عام.
3. المعاملات (parameters): قيم اختيارية يتم تمريرها إلى الدالة عند استدعائها. يتم تعريف نوع ومتغير للمعامل داخل تعريف الدالة. يمكن للدالة أن تأخذ عددًا اختياريًا من المعاملات.
4. جسم الدالة (function body): الأوامر التي يتم تنفيذها عند استدعاء الدالة. تحتوي على التعليلات التي تحدد منطق عمل الدالة.
### أمثلة على الدوال:
دالة بدون إرجاع:
void printHello() {
// طباعة عبارة "Hello World"
std::cout << "Hello World" << std::endl;
}
هذه الدالة تسمى printHello ولا تعيد أي قيمة (void). عند استدعائها، تقوم بطباعة عبارة "Hello World" على الشاشة.
دالة بإرجاع:
int calculateArea(int length, int width) {
// حساب مساحة المستطيل
int area = length * width;
// إرجاع قيمة المساحة
return area;
}
هذه الدالة تسمى calculateArea وتأخذ طول وعرض المستطيل كمعاملات (int). تقوم الدالة بحساب مساحة المستطيل وتعيد قيمتها (int) باستخدام كلمة return.
### استدعاء الدالة:
لاستدعاء دالة، نكتب اسم الدالة بين قوسين ويمكننا تمرير قيم لها كمعاملات (إذا كانت الدالة تقبل معاملات). يتم استدعاء الدالة عادةً من داخل دالة main وهي نقطة دخول البرنامج.
int main() {
// استدعاء دالة printHello
printHello();
// استدعاء دالة calculateArea مع تمرير قيم للمعاملات
int length = 10;
int width = 5;
int area = calculateArea(length, width);
std::cout << "Area of rectangle: " << area << std::endl;
return 0;
}
ملحوظة: يجب التأكد من أن أنواع المعاملات التي يتم تمريرها عند استدعاء الدالة تتطابق مع أنواع المعاملات المعلنة داخل تعريف الدالة.
### المعاملات (arguments) والاقتران بالصيغة (parameter passing):
المعاملات هي قيم يتم تمريرها إلى الدالة عند استدعائها. يتم تعريف نوع ومتغير للمعامل داخل تعريف الدالة. هناك طريقتين رئيسيتين للاقتران بالصيغة في C++:
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
