++C - بخش سوم
مفاهيم حافظه
اسامي متغيرها، همانند number1 ، number2 و sum مطابق با مكانهاي واقعي در حافظه كامپيوتر هستند. هر متغير داراي يك نام، نوع، سايز و مقدار است. در برنامه جمع 5-2 زمانيكه عبارت
در خط 14 اجرا ميشود، كاراكترهاي تايپ شده توسط كاربر به يك عدد صحيح تبديل ميشود و در مكاني از حافظه با نام number1 و با كمك كامپايلر C++ قرار داده ميشود. فرض كنيد كه كاربر عدد 45 را به عنوان مقداري براي number1 وارد كند. كامپيوتر 45 را دريافت و در مكان number1 همانند شكل 6-2 قرار ميدهد.
زمانيكه مقداري در يك مكان حافظه قرار ميگيرد، مقدار جديد بر روي مقدار قبلي بازنويسي ميشود. مجدداٌ به سراغ برنامه جمع ميرويم، هنگامي كه عبارت
در خط 17 اجرا شود، فرض كنيد كاربر مقدار 72 را وارد سازد، اين مقدار وارد مكان number2 ، شده و تصوير حافظه همانند شكل 7-2 خواهد شد. دقت كنيد كه اين مكانهاي حافظه ضرورتا، نبايستي در كنار هم قرار داشته باشند.
پس از اينكه برنامه مقادير number1 و number2 را بدست آورد، اين مقادير را با هم جمع كرده و مجموع را در درون متغير sum قرار ميدهد. عبارت
شكل 6-2 | مكان حافظه در حال نمايش نام و مقدار متغير number1 .
شكل 7-2 | مكانهاي حافظه پس از ذخيرهسازي مقادير براي number1 و number2 .
شكل 8-2| مكانهاي حافظه پس از محاسبه sum با استفاده از number1 و number2 .
6-2 محاسبات
اكثر برنامهها محاسبات رياضي انجام ميدهند . عملگرهاي رياضي در جدول شكل 9-2 ليست شدهاند. توجه كنيد كه تمام نمادهاي بكار رفته در جبر در C++ بكار گرفته نميشوند. علامت ستاره (*) نشاندهنده ضرب و علامت درصد (%) نشاندهنده باقيمانده است . اكثر عملگرهاي حسابي (در جدول 9-2 ) از نوع عملگرهاي باينري هستند چرا كه هر عملگر ما بين دو عملوند قرار ميگيرد. براي مثال، عبارت حسابي number1 + number2 شامل عملگر باينري + و دو عملوند number1 و number2 ميباشد.
شكل 9-2 | عملگرهاي محاسباتي.
قوانين تقدم عملگر
C++ عملگرها را در عبارات محاسباتي با توالي كه قانون تقدم عملگرها تعيين ميكند بكار ميبرد. اين قوانين شبيه قوانين موجود در جبر هستند:
a((a + b) + C)
2- عملگرهاي ضرب و تقسيم و باقيمانده در مرحله بعدي بكار گرفته ميشوند. اگر عبارتي شامل چندين عملگر ضرب ، تقسيم و باقيمانده ب اشد، عملگرها از سمت چپ به راست اجرا خواهند شد. ضرب ، ت قسيم و باقيمانده داراي اولويت هم سطح يا برابر هستند.
3- عملگرهاي جمع و تفريق در آخرين مرحله به كار ميروند. اگر عبارتي شامل چندين عملگر تفريق و جمع باشد، عملگرها به ترتيب از سمت چپ به راست اجرا خواهند شد. عملگرهاي جمع و تفريق داراي اولويت هم سطح هستند.
وجود قوانين تقدم عملگرها ، زبان C++ قادر ميسازد تا عملگرها را با ترتيب صحيح بكار گيرد. در جدول شكل 10-2 خلاصهاي از قوانين تقدم عملگرها آورده شده است. اين جدول با معرفي عملگرهاي ديگر C++ در فصلهاي بعدي تكميلتر خواهد شد. جدول كامل تقدم عملگرها در پيوست كتاب موجود است.
شكل 10-2 | تقدم عملگرهاي محاسباتي.
عبارات ساده جبري و C++
حال اجازه دهيد تا به چند عبارت محاسباتي نگاهي بياندازيم تا بخوبي با قوانين تقدم عملگرهاي محاسباتي آشنا شويد. در هر مثالي كه ذكر ميشود عبارت جبري و معادل C++ آن عبارت نيز آورده شده است. مثال زير يك عبارت رياضي را نشان ميدهد كه منظور از آن به دست آوردن ميانگين پنج عدد است:
عبارت زير نشاندهنده يك معادله است:
y = mx + b
y = m * x + b; : C++
مثالي كه در زير آورده شده حاوي عملگرهاي توان، ضرب، تقسيم اعشاري، جمع و تفريق است:
دايرههاي حاوي اعداد نشاندهنده ترتيب اجراي عملگرها هستند. عملگر ضرب در اولويت اول قرار دارد و عملگرهاي باقيمانده و تقسيم در اولويتهاي بعدي و به ترتيب از سمت چپ به راست اجرا ميشوند و پس از آنها عملگرهاي جمع و تفريق به ترتيب اجرا شده و در پايان عمل تخصيص صورت ميگيرد .
توجه كنيد كه در اين جدول در مورد پرانتزهاي تودرتو مطالبي بيان شده است، اما تمام عبارات محاسباتي كه داراي چندين جفت پرانتز هستند، ممكن است حاوي پرانتزهاي تودرتو نباشد. براي مثال، اگر چه عبارت زير
a * (b + c) + c * (d + e)
شامل دو جفت پرانتز است، اما هيچ كداميك از آنها پرانتز تودرتو نميباشند. در چنين حالتي هر دو آنها داراي سطح يكسان ميباشند.
ارزيابي معادله درجه دوم
براي درك بهتر قوانين تقدم عملگرها به مثال زير كه يك چند جملهاي درجه دوم است توجه كنيد:
دايرههاي حاوي اعداد نشاندهنده ترتيب اجراي عملگرها هستند . در C++ عملگر محاسباتي براي انجام عمل توان وجود ندارد، از اينرو عبارت x را بصورت x * x نشان دادهايم. بزودي در مورد تابع استاندارد كتابخانهاي pow (توان) صحبت خواهيم كرد.
خطاي برنامهنويسي
برخي از زبانهاي برنامهنويسي از عملگرهاي ** يا ^ براي نمايش توان استفاده ميكنند. در حاليكه زبان C++ از اين عملگرها پشتيباني نميكند، و استفاده از آنها خطاي نحوي خواهد بود.
ح ال فرض كنيد كه a ، b ، c و x بصورت a = 2 ، b = 3 ، c = 7 و x = 5 مقداردهي شده باشند. با توجه به شكل 11-2 تقدم عملگرها در اين چند جملهاي درجه دوم و نتيجه اجراي آنرا تعقيب ميكنيم.
برنامهنويسي ايدهال
در عمليات جبري استفاده از پرانتزهاي اضافي موجب ميشود كه عبارات از وضوح كافي برخوردار شوند (پرانتزهاي غيرضروري redundant parentheses يا پرانتزهاي افزونگي نيز نام يده ميشوند ). به كمك اين پرانتزها ميتوان عبارات بزرگ و پيچيده را دستهبندي كرده و سبب واضح شدن طريقه انجام محاسبات شد.