المؤثر الشرطي في C++

المؤثر الشرطي

إليك مؤثرا يستخدم في اتخاذ القرارات , غريب الشكل إلي حد ما , وقد وضع للإستخدام في موقف كثير التكرار في البرمجة , متغير له قيمة ما في حالة تحقق شرط ما , وقيمة أخري في حالة عدم تحقق ذلك الشرط . وإليك البرنامج التالي , وهو يطبع لك حرف x علي مسافات ثمانية , أي كل ثمانية مسافات . وقبل أن تكتب البرنامج , سنوضح لك الفكرة التي يقوم عليها .

المفروض أن يطبع حرف x علي الشاشة في كل موضع يكون فيه رقم العمود من مضاعفات الرقم 8 , وأن يترك مسافة في غير ذلك من المواضع ( الشاشة مقسمة إلي 80 عمودا كما تعلم ) . والفكرة أن نتصور متغيرا وليكن j يعبر عن رقم العمود علي الشاشة , أي تتغير قيمته من 0 إلي 79 , ونضع شرطا يقول :

في الأعمدة التي يكون فيها قسمة j علي 8 بدون باق , أطبع الحرف x وإذا كان لهذه المسافة باق , خذ مسافة .

كيف تصوغ هذا الشرط في لغة السي ؟ تمدنا لغة السي بمؤثر أسميناه " مؤثر باقي القسمة " وهو علي الصورة % , وهو يستخدم لاختبار كون القسمة لها باق أم لا , معني ذلك أن الشرط يكون علي الصيغة : j%8 , ويمكن أن نتخيل البرنامج محتويا علي الشرط التالي :

If (j%8)

Ch= ' ' ;

Else

Ch='x';

وهو ما يعني : إذا كان للقسمة باق ( نتيجة الاختبار متحققة ) , خذ مسافة , وإلا فأطبع حرف x .

للنظر الأن كيف صيغ هذا الشرط في البرنامج :

Char ch = (j%8) ? ' ' ; 'x'

Cout << ch;

استخدمنا هنا مؤثرا جديدا مركب من محرفين هما ''? : '' , يسمي " المؤثر الشرطي conditional operator " كتبت العبارة الشرطية (ch=(j%8) علي يساره , وبعده الاحتمالان , بينما العلاقة ":" وعلي ذلك فهذا المؤثر يقول :إذا كان الشرط المعطي متحققا , فإن المتغير ch يأخذ القيمة يسار الرمز ":" , وإذا لم يكن متحققا , يأخذ القيمة التي علي يمينها . ويبين الشكل صياغة المؤثر وشكل طريقة عمله .

Object-Oriented Programming in C   _Page_0138_Image_0001

شكل صياغة المؤثر الشرطي

Object-Oriented Programming in C   _Page_0139_Image_0001

شكل طريقة عمل المؤثر الشرطي

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

Condi.cpp

condi.cpp


 


// condi.cpp


// prints 'x' every 8 columns


// demonstrates conditional operator


#include <iostream.h>


 


void main()


   {


   for(int j=0; j<80; j++)          // for every column,


      {                             // ch is 'x' if column is


      char ch = (j%8) ? ' ' : 'x';  // multiple of 8, and


      cout << ch;                   // ' ' (space) otherwise


      }


   }




وكما قدمنا , يأخذ المتغير j قيما من 0 إلي 79 , وكلما كان باقي القسمة صفرا , اعتبر التعبير (j%8) غير متحقق , وطبع حرف x .



وفي إمكانيات دمج التعابير واختصار سطور البرنامج يجد أحباء لغة السي متعة كبيرة , ولكن في المقابل قد تجعل هذه الإمكانيات صياغة البرامج مبهمة الشكل غير يسيرة التتبع , والمسألة في النهاية مسألة مواءمة .

التسميات: