0

++C - بخش سوم

 
reza1371
reza1371
کاربر برنزی
تاریخ عضویت : مهر 1388 
تعداد پست ها : 168
محل سکونت : لرستان

++C - بخش سوم

مفاهيم حافظه

اسامي متغيرها، همانند number1 ، number2 و sum مطابق با مكان‌هاي واقعي در حافظه كامپيوتر هستند. هر متغير داراي يك نام، نوع، سايز و مقدار است. در برنامه جمع 5-2 زمانيكه عبارت

 


در خط 14 اجرا مي‌شود، كاراكترهاي تايپ شده توسط كاربر به يك عدد صحيح تبديل مي‌شود و در مكاني از حافظه با نام number1 و با كمك كامپايلر C++ قرار داده مي‌شود. فرض كنيد كه كاربر عدد 45 را به عنوان مقداري براي number1 وارد كند. كامپيوتر 45 را دريافت و در مكان number1 همانند شكل 6-2 قرار مي‌دهد.

زمانيكه مقداري در يك مكان حافظه قرار مي‌گيرد، مقدار جديد بر روي مقدار قبلي بازنويسي مي‌شود. مجدداٌ به سراغ برنامه جمع مي‌رويم، هنگامي كه عبارت


 
در خط 17 اجرا شود، فرض كنيد كاربر مقدار 72 را وارد سازد، اين مقدار وارد مكان number2 ، شده و تصوير حافظه همانند شكل 7-2 خواهد شد. دقت كنيد كه اين مكان‌هاي حافظه ضرورتا، نبايستي در كنار هم قرار داشته باشند.

پس از اينكه برنامه مقادير number1 و number2 را بدست آورد، اين مقادير را با هم جمع كرده و مجموع را در درون متغير sum قرار مي‌دهد. عبارت

 
علاوه بر آنكه عمل جمع را انجام مي‌دهد، مقدار حاصله را هم در sum ذخيره مي‌سازد. اين عمل زماني رخ مي‌دهد كه مجموع دو متغير number1 و number2 محاسبه شده‌اند و در مكان sum ذخيره مي‌شود. پس از اينكه sum محاسبه شد، حافظه بفرم شكل 8-2 تبديل خواهد شد. توجه نمائيد كه مقادير number1 و number2 پس از انجام محاسبه sum همچنان بدون تغيير باقي مي‌ماند. با اينكه از اين مقادير استفاده شده است، اما مقادير اوليه آنها با انجام عمل محاسباتي از بين نمي‌رود.
انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

شكل 6-2 | مكان حافظه در حال نمايش نام و مقدار متغير number1 .

 

 
انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

شكل 7-2 | مكان‌هاي حافظه پس از ذخيره‌سازي مقادير براي number1 و number2 .

 

 
انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

شكل 8-2| مكان‌هاي حافظه پس از محاسبه sum با استفاده از number1 و number2 .

6-2 محاسبات

اكثر برنامه‌ها محاسبات رياضي انجام مي‌دهند . عملگرهاي رياضي در جدول شكل 9-2 ليست شده‌اند. توجه كنيد كه تمام نمادهاي بكار رفته در جبر در C++ بكار گرفته نمي‌شوند. علامت  ستاره (*) نشاندهنده ضرب و علامت درصد (%) نشاندهنده باقيمانده است . اكثر عملگرهاي حسابي (در جدول 9-2 ) از نوع عملگرهاي باينري هستند چرا كه هر عملگر ما بين دو عملوند قرار مي‌گيرد. براي مثال، عبارت حسابي number1 + number2 شامل عملگر باينري + و دو عملوند number1 و number2 مي‌باشد.

 

 

انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net
 

 

 

شكل 9-2 | عملگرهاي محاسباتي.

 

 

قوانين تقدم عملگر

C++ عملگرها را در عبارات محاسباتي با توالي كه قانون تقدم عملگرها تعيين مي‌كند بكار مي‌برد. اين قوانين شبيه قوانين موجود در جبر هستند:

1-     عملگرهايي كه در درون جفت پرانتز قرار دارند داراي اولويت اول هستند. بنابر اين برنامه‌نويس با استفاده از پرانتز مي‌تواند ترتيب اجراي محاسبات را در دست بگيرد. پرانتزها داراي بالاترين سطح تقدم مي‌باشند . در مواردي كه پرانتزها به صورت تودرتو (آشيانه‌اي) قرار گرفته‌باشند، عملگر پرانتزي كه در داخلي‌ترين سطح قرار دارد ابتدا انجام مي‌گيرد، همانند
 
a((a + b) + C)

 عملگر قرار گرفته در جفت پرانتز داخلي ابتدا بكار گرفته مي‌شود.

2-  عملگرهاي ضرب و تقسيم و باقيمانده در مرحله بعدي بكار گرفته مي‌شوند. اگر عبارتي شامل چندين عملگر ضرب ، تقسيم و باقيمانده ب اشد، عملگرها از سمت چپ به راست اجرا خواهند شد. ضرب ، ت قسيم و باقيمانده داراي اولويت هم سطح يا برابر هستند.

3- عملگرهاي جمع و تفريق در آخرين مرحله به كار مي‌روند. اگر عبارتي شامل چندين عملگر تفريق و جمع باشد، عملگرها به ترتيب از سمت چپ به راست اجرا خواهند شد. عملگرهاي جمع و تفريق داراي اولويت هم سطح هستند.

وجود قوانين تقدم عملگرها ، زبان C++ قادر مي‌سازد تا عملگرها را با ترتيب صحيح بكار گيرد. در جدول شكل 10-2 خلاصه‌اي از قوانين تقدم عملگرها آورده شده است. اين جدول با معرفي عملگرهاي ديگر C++ در فصل‌هاي بعدي تكميل‌تر خواهد شد. جدول كامل تقدم عملگرها در پيوست كتاب موجود است.

 

 

انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

 

 

شكل 10-2 | تقدم عملگرهاي محاسباتي.

عبارات ساده جبري و C++

حال اجازه دهيد تا به چند عبارت محاسباتي نگاهي بياندازيم تا بخوبي با قوانين تقدم عملگرهاي محاسباتي آشنا شويد. در هر مثالي كه ذكر مي‌شود عبارت جبري و معادل C++ آن عبارت نيز آورده شده است. مثال زير يك عبارت رياضي را نشان مي‌دهد كه منظور از آن به دست آوردن ميانگين پنج عدد است:

 

 

 

انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

 
              

 m = (a + b + c + d + e) / 5;: C++

 



وجود پرانتز در اين عبارت ضروري است چرا كه عملگر تقسيم تقدم بالاتري نسبت به عملگر جمع دارد، در نتيجه مقدار داخلي پرانتز بر 5 تقسيم مي‌شود. اگر پرانتز در اين عبارت حذف شود، منظور محاسبه a + b + c + d + e / 5 خواهد بود كه معادل عبارت زير است:

 

 

 

عبارت زير نشاندهنده يك معادله است:

 
            

y = mx + b
y = m * x + b; : C++

 


وجود پرانتز در اين عبارت نياز نيست، چرا كه عملگر ضرب تقدم بالاتري نسبت به عملگر جمع دارد و در ابتدا انجام مي‌شود. عمل تخصيص در آخرين مرحله صورت مي‌گيرد چرا كه به نسبت عمل ضرب و جمع از اولويت پايين‌تري برخوردار است .

مثالي كه در زير آورده شده حاوي عملگرهاي توان، ضرب، تقسيم اعشاري، جمع و تفريق است:

z = pr%q + w / x - y : جبري
انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net

 

 

دايره‌هاي حاوي اعداد نشاندهنده ترتيب اجراي عملگرها هستند. عملگر ضرب در اولويت اول قرار دارد و عملگرهاي باقيمانده و تقسيم در اولويت‌هاي بعدي و به ترتيب از سمت چپ به راست اجرا مي‌شوند و پس از آنها عملگرهاي جمع و تفريق به ترتيب اجرا شده و در پايان عمل تخصيص صورت مي‌گيرد .

توجه كنيد كه در اين جدول در مورد پرانتزهاي تودرتو مطالبي بيان شده است، اما تمام عبارات محاسباتي كه داراي چندين جفت پرانتز هستند، ممكن است حاوي پرانتزهاي تودرتو نباشد. براي مثال، اگر چه عبارت زير

a * (b + c) + c * (d + e)

شامل دو جفت پرانتز است، اما هيچ كداميك از آنها پرانتز تودرتو نمي‌باشند. در چنين حالتي هر دو آنها داراي سطح يكسان مي‌باشند.

ارزيابي معادله درجه دوم

براي درك بهتر قوانين تقدم عملگرها به مثال زير كه يك چند جمله‌اي درجه دوم است توجه كنيد:

 

انجمن بزرگ راسخون |‌تالار برنامه نويسي |‌www.rasekhoon.net
 

 

دايره‌هاي حاوي اعداد نشاندهنده ترتيب اجراي عملگرها هستند . در C++ عملگر محاسباتي براي انجام عمل توان وجود ندارد، از اينرو عبارت x2   را بصورت x * x نشان داده‌ايم. بزودي در مورد تابع استاندارد كتابخانه‌اي pow (توان) صحبت خواهيم كرد.

خطاي برنامه‌نويسي

برخي از زبان‌هاي برنامه‌نويسي از عملگرهاي ** يا ^ براي نمايش توان استفاده مي‌كنند. در حاليكه زبان C++ از اين عملگرها پشتيباني نمي‌كند، و استفاده از آنها خطاي نحوي خواهد بود.

ح ال فرض كنيد كه a ، b ، c و x بصورت a = 2 ، b = 3 ، c = 7 و x = 5 مقداردهي شده باشند. با توجه به شكل 11-2 تقدم عملگرها در اين چند جمله‌اي درجه دوم و نتيجه اجراي آنرا تعقيب مي‌كنيم.

برنامه‌نويسي ايده‌ال

در عمليات جبري استفاده از پرانتزهاي اضافي موجب مي‌شود كه عبارات از وضوح كافي برخوردار شوند (پرانتز‌هاي غيرضروري redundant parentheses يا پرانتزهاي افزونگي نيز نام يده مي‌شوند ). به كمك اين پرانتزها مي‌توان عبارات بزرگ و پيچيده را دسته‌بندي كرده و سبب واضح شدن طريقه انجام محاسبات شد.

 

 

شنبه 28 فروردین 1389  9:34 AM
تشکرات از این پست
ravabet_rasekhoon
jazereyearam
jazereyearam
کاربر نقره ای
تاریخ عضویت : آذر 1387 
تعداد پست ها : 1313
محل سکونت : زنجان

پاسخ به:++C - بخش سوم

سلام من واقعا از شما بابت همه پستهاي كه اموزش داديد تشكر ميكنم چون خيلي از انها استفاده ميكنم ممنونم و موفق باشيد
 
سه شنبه 5 مرداد 1389  1:16 PM
تشکرات از این پست
دسترسی سریع به انجمن ها