المؤثرات الحسابية في C++
المؤثرات الحسابية في C++
تستخدم السي++ المؤثرات الحسابية arithmetic operators الأربعة المعروفة , مؤثر الجمع والطرح والضرب والقسمة . وهي تعمل علي كل أنواع المتغيرات وبنفس الطريقة في كافة اللغات .
علي أن هناك بعض المؤثرات التي تختص بها لغة السي , واستخدامها ليس واضحا تماما .
مؤثر باقي القسمة
المؤثر الحسابي الخامس هو " مؤثر باقي القسمة or ) , the remainder operator modulus operator ) " , وهو يعمل فقط علي المؤثرات char , int, long , وهي المؤثرات التي مداها أعداد صحيحة . هذا المؤثر صورته "%" , وهي علامة النسبة المئوية . ويبين البرنامج التالي استخدام هذا النوع من المؤثرات .
Remaind.cpp
remaind.cpp
// remaind.cpp
// demonstrates remainder operator
#include <iostream.h>
void main()
{
cout << 6 % 8 << endl // 6
<< 7 % 8 << endl // 7
<< 8 % 8 << endl // 0
<< 9 % 8 << endl // 1
<< 10 % 8 << endl; // 2
}
والبرنامج كما تري يجري عمليات قسمة للأعداد بين 6 و 10 علي العدد 8 , ولكن بواسطة مؤثر باقي القسمة وليس مؤثر القسمة المعتاد (/) , والنتيجة المستخرجة من هذه العمليات هي باقي القسمة , وليس خارج القسمة . ولسوف نري فيما بعد التطبيقات العملية لهذه الإمكانية .
ملحوظة حول الأولوية :
في التعبير :
Cout << 6%8
يقيم المؤثر % قبل المؤثر << لكونه أعلي ترتيب الأولويات , ولو لم يكن الأمر كذلك , لاضطررنا إلي وضع العملية بين قوسين علي النحو التالي : (8%6) حتي تقيم قبل تطبيق المؤثر << عليها .
مؤثر التخصيص الحسابي
تتيح لغة السي عموما إمكانيات لجعل صياغة البرامج أكثر رشاقة وإيجازا , ويضفي عليها نكهة لغة السي المشتهرة بها , من ذلك " مؤثر التخصيص الحسابي '' arithmetic assignment operator '' , والذي يشتهر استخدامه في برامج السي . فالصيغة التالية مألوفة في كل اللغات :
Total = total + item; // add ''item '' to ''total''
وفيها تضيف شيئا ما إلي قيمة موجودة , لتحصل علي المجموع التراكمي . ولكن تكرار نفس الاسم في سطر واحد قد لا يحبذه عشاق الجمال , ولذا فإن الصيغة المبينة يمكن أن تستبدل بالتالية :
Total += item: // add ''item'' to '' total''
ويبين الشكل التكافؤ بين الصيغتين
ويوجد مؤثر تخصيص من هذا القبيل لكافة المؤثرات الحسابية : =/ ,= - ,=+ ( وبعض المؤثرات الأخري ) , ويبين المثال التالي استخدام مؤثر التخصيص الحسابي .
Assign.cpp
assign.cpp
// assign.cpp
// demonstrates arithmetic assignment operators
#include <iostream.h>
void main()
{
int ans = 27;
ans += 10; // same as: ans = ans + 10;
cout << endl << ans;
ans -= 7; // same as: ans = ans - 7;
cout << endl << ans;
ans *= 2; // same as: ans = ans * 2;
cout << endl << ans;
ans /= 3; // same as: ans = ans / 3;
cout << endl << ans;
ans %= 3; // same as: ans = ans % 3;
cout << endl << ans;
}
وليس استخدام مؤثرات التخصيص الحسابية أمرا إجباريا , ولكنها وسيلة شائعة ستقابلها في العديد من أمثلة هذا الكتاب .
مؤثري التزايد والتناقص
كثيرا ما يراد زيادة مقدار ما تدريجيا بمقدار الوحدة , ] تسمي عملية الزيادة المطردة بمقدار الوحدة "تزايد" , وهي مقابل اللفظ Increment , كما تسمي عملية التناقص بمقدار الوحدة "تناقص dectement" [ وهو ما يمكن تحقيقه بالصيغة التالية :
Count = count + 1; // add 1 to ''count''
أو بالصيغة التي عرفناها مؤخرا :
Count +=1; // add 1 to ''count''
علي أنه زيادة في الاختصار , أمدتنا لغة السي بصيغة أكثر رشاقة :
++count; add 1 to ''count''
ويسمي المؤثر ++ " مؤثر التزايد increment operator " .
ولهذا المؤثر صورتان للاستخدام , أما سابق للمتغير أو لاحق له . ففي الصورة :
Total Weight = avg Weight * ++count;
وضع المؤثر سابق للمتغير , وهو ما يعني أن التزايد سابق علي عملية الضرب , وبعبارة أخري , تزداد قيمة المتغير بمقدار الوحدة , ثم تجري عملية الضرب . وكما توقعت , لو أننا ألحقنا المؤثر بالمتغير , علي الصورة count++ , لنفذت عملية الضرب أولا , ثم أجريت عملية التزايد . ويبين الشكل العمليتين والنتيجة من كلب منهما .
شكل مؤثر التزايد السابق واللاحق
وإليك برنامجا يبين أثر كلا التأثيرين :
Increm.cpp
increm.cpp
// increm.cpp
// demonstrates the increment operator
#include <iostream.h>
void main()
{
int count = 10;
cout << "count=" << count << endl; // displays 10
cout << "count=" << ++count << endl; // displays 11 (prefix)
cout << "count=" << count << endl; // displays 11
cout << "count=" << count++ << endl; // displays 11 (postfix)
cout << "count=" << count << endl; // displays 12
}
وكما تمدنا اللغة بأداة للتزايد بمقدار الوحدة , تمدنا بالأداة العكسية , التناقص بمقدار الوحدة , وصورتها -- , وتكون سابقة أو لاحقة كالمعتاد .
تعليقات
إرسال تعليق