الفريق العربي للهندسة العكسية
2.4 العمليات Operations والمشغلات operators - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بلغة السى و السى بلس بلس ++C & C (https://www.at4re.net/f/forum-17.html)
+--- الموضوع : 2.4 العمليات Operations والمشغلات operators (/thread-3899.html)



2.4 العمليات Operations والمشغلات operators - R333T - 04-05-2024

[صورة مرفقة: 128383135-210777607283724-8238622407463275907-n.jpg]
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++
 
https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq





# الفصل 0 : تمهيد # الفصل 1 : # الفصل 2 :   
[صورة مرفقة: mqdefault.jpg]
 
https://www.youtube.com/watch?v=D07jMlhc-5Y




2.4 العمليات Operations والمشغلات operators

بالإضافة إلى تحديد القيم values التي يمكن تخزينها في variable، فإن نوع المتغير type of a variable يحدد أيضًا العمليات التي يمكن تطبيقها عليه وما معانيها.
على سبيل المثال:

int age = -1;
c in في (أكبر من مرتن) age;
(أكبر من مرتن) يقرأ عددًا صحيحًا في age.
string name;
c في (أكبر من مرتن) name;
(أكبر من مرتن) يقرأ الstring في name
int a2 = age+2;
الجمع يضيف أعداد صحيحة int
string n2 = name + " Jr. ";
الconcatenates بين الstrings
int a3 = age-2;
الطرح يطرح أعداد صحيحة int
string n3 = name - " Jr. ";
خطأ: - ليس معرفًا defined لstrings
بواسطة "خطأ" نعني أن الcompiler سيُرفض برنامجًا يحاول طرح الstrings.
الcompiler يعرف بدقة أي الoperations يمكن تطبيقها على كل variable وبالتالي يمكنه منع العديد من الأخطاء.


ومع ذلك، لا يعرف الcompiler أي العمليات تعتبر منطقية بالنسبة لك لأي قيمة، لذا سيقبل بسرور العمليات التي تنتج نتائج قد تبدو سخيفة بالنسبة لك. على سبيل المثال:
age = −100؛
قد يكون من الواضح بالنسبة لك أنه لا يمكن أن يكون لديك عمر سالب (لماذا لا؟) ولكن لم يخبر أحد المترجم، لذا سينتج الكود لتلك التعريفة.
فيما يلي جدول للعوامل المفيدة لبعض الأنواع الشائعة والمفيدة:

[صورة مرفقة: t1.png]

ها هي أمثلة الشفرة لكل عملية مذكورة في الجدول:

التخصيص (=):

int x = 5;
char ch = 'A';
bool flag = true;
double pi = 3.14;
std::string str = "مرحبًا";


الجمع (+):
int sum = 5 + 3;
double result = 3.5 + 2.7;


الدمج (للسلاسل) (+):
std::string str1 = "مرحبًا";
std::string str2 = "العالم";
std::string combined = str1 + str2;


الطرح (-):
int difference = 10 - 4;
double result = 5.6 - 2.3;


الضرب (*):
int product = 3 * 4;
double result = 2.5 * 1.5;


القسمة (/):
int quotient = 10 / 2;
double result = 5.0 / 2.0;


الباقي (المودولو) (%):
int remainder = 10 % 3;


هذه الأمثلة توضح استخدام المشغلات المختلفة مع أنواع بيانات مختلفة في لغة البرمجة C++.


[صورة مرفقة: t2.png]


زيادة بواحد:
int x = 5;
x++; // زيادة قيمة x بواحد


نقص بواحد:
int x = 5;
x--; // نقص قيمة x بواحد


زيادة بمقدار n:
int x = 5;
int n = 3;
x += n; // زيادة قيمة x بمقدار n


إضافة إلى النهاية (للنصوص):
std::string s = "مرحبا";
s += " العالم"; // إضافة " العالم" إلى نهاية s


نقص بمقدار n:
int x = 5;
int n = 3;
x -= n; // نقص قيمة x بمقدار n


ضرب وتعيين:
int x = 5;
x *= 2; // ضرب x في 2


قسمة وتعيين:
int x = 10;
x /= 2; // قسمة x على 2


الباقي وتعيين:
int x = 10;
x %= 3; // الباقي من قسمة x على 3


قراءة من التيار إلى متغير:
int x;
std::cin >> x; // قراءة عدد صحيح من مدخل البيانات القياسي إلى x


كتابة متغير إلى التيار:
int x = 5;
std::cout << x; // كتابة قيمة x إلى مخرج البيانات القياسي


يساوي:
int x = 5, y = 7;
if (x == y) {
// x يساوي y
}


غير متساوي:
int x = 5, y = 7;
if (x != y) {
// x لا يساوي y
}


أكبر من:
int x = 5, y = 7;
if (x > y) {
// x أكبر من y
}


أكبر من أو يساوي:
int x = 5, y = 7;
if (x >= y) {
// x أكبر من أو يساوي y
}


أصغر من:
int x = 5, y = 7;
if (x < y) {
// x أصغر من y
}


أصغر من أو يساوي:
int x = 5, y = 7;
if (x <= y) {
// x أصغر من أو يساوي y
}





جرّب هذا
قم بتشغيل هذا البرنامج الصغير. ثم، قم بتعديله ليقرأ قيمة صحيحة بدلاً من قيمة عشرية.
كما يمكنك "تمرين" بعض العمليات الأخرى، مثل عامل الباقي (%). لاحظ أنه للأعداد الصحيحة، القسمة العادية تقوم بالتقسيم الصحيح والباقي يعطي الباقي (المودولو)، لذا 5/2 يعطي 2 (وليس 2.5 أو 3) و 5%2 يعطي 1. تضمن تعريفات الضرب، القسمة والباقي للأعداد الصحيحة أنه لنا للأعداد الصحيحة الموجبة a و b، a/b * b + a%b == a.

#include <iostream>

int main() {
int num1, num2;

// Prompting the user to enter two integers
std::cout << "Enter the first integer: ";
std::cin >> num1;

std::cout << "Enter the second integer: ";
std::cin >> num2;

// Performing arithmetic operations
int sum = num1 + num2;
int difference = num1 - num2;
int product = num1 * num2;
int quotient = num1 / num2;
int remainder = num1 % num2; // Modulo operator %

// Displaying the results
std::cout << "Sum: " << sum << std::endl;
std::cout << "Difference: " << difference << std::endl;
std::cout << "Product: " << product << std::endl;
std::cout << "Quotient: " << quotient << std::endl;
std::cout << "Remainder: " << remainder << std::endl;

return 0;
}




السلاسل لديها عدد أقل من العمليات، لكن لديها الكثير من العمليات المسماة. ومع ذلك، العمليات التي تمتلكها يمكن استخدامها بشكل تقليدي. على سبيل المثال:
int main() // اقرأ الاسم الأول والثاني
{
cout << "الرجاء إدخال الاسم الأول والثاني\n";
string first;
string second;
cin >> first >> second; // اقرأ سلسلتين
string name = first + ' ' + second; // ارتبط السلاسل
cout << "مرحبًا، " << name << '\n';
}


بالنسبة للسلاسل، + يعني الاتصال؛ أي أنه عندما تكون s1 وs2 سلاسل، s1+s2 هو سلسلة يتم فيها اتباع الأحرف من s1 بالأحرف من s2. على سبيل المثال، إذا كان لدى s1 القيمة "مرحبا" وكانت لدى s2 القيمة "العالم"، فسيكون لدى s1+s2 القيمة "مرحباالعالم". المقارنة بين السلاسل مفيدة بشكل خاص:
int main() // اقرأ وقارن الأسماء
{
cout << "الرجاء إدخال اسمين\n";
string first;
string second;
cin >> first >> second; // اقرأ سلسلتين
if (first == second)
cout << "هذا هو نفس الاسم مرتين\n";
if (first < second)
cout << first << " قبل ألفبائيًا " << second <<'\n';
if (first > second)
cout << first << " بعد ألفبائيًا " << second <<'\n';
}


هنا، استخدمنا جملة شرطية if، التي سيتم شرحها بالتفصيل في الدروس القادمة، لتحديد الإجراءات استنادًا إلى الشروط.


 
dance