المؤثرات الحسابية في 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''


ويبين الشكل التكافؤ بين الصيغتين


Object-Oriented Programming in C   _Page_0088_Image_0001 شكل مؤثر التخصيص الحسابي


ويوجد مؤثر تخصيص من هذا القبيل لكافة المؤثرات الحسابية : =/ ,= - ,=+ ( وبعض المؤثرات الأخري ) , ويبين المثال التالي استخدام مؤثر التخصيص الحسابي .


 


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++ , لنفذت عملية الضرب أولا , ثم أجريت عملية التزايد . ويبين الشكل العمليتين والنتيجة من كلب منهما .


Object-Oriented Programming in C   _Page_0090_Image_0001


شكل مؤثر التزايد السابق واللاحق


وإليك برنامجا يبين أثر كلا التأثيرين :


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
   }



وكما تمدنا اللغة بأداة للتزايد بمقدار الوحدة , تمدنا بالأداة العكسية , التناقص بمقدار الوحدة , وصورتها -- , وتكون سابقة أو لاحقة كالمعتاد .

التسميات: