محاسبات
اکثر برنامهها محاسبات ریاضی انجام میدهند. عملگرهای ریاضی در جدول شکل ۹-۲ لیست شدهاند. توجه کنید که تمام نمادهای بکار رفته در جبر در C++ بکار گرفته نمیشوند. علامت ستاره (*) نشاندهنده ضرب و علامت درصد (%) نشاندهنده باقیمانده است. اکثر عملگرهای حسابی (در جدول ۹-۲) از نوع عملگرهای باینری هستند چرا که هر عملگر مابین دو عملوند قرار میگیرد. برای مثال، عبارت حسابی number1 + number2 شامل عملگر باینری + و دو عملوند number1 و number2 میباشد.
عملیات C++ | عملگر محاسباتی | عبارت جبری | عبارتC++ |
جمع | + | f + 7 | f + 7 |
تفریق | – | p – c | p – c |
ضرب | * | bm | b * m |
تقسیم | / | x / y یا یا | x / y |
باقیمانده | % | r mod s | r % s |
شکل ۹-۲ | عملگرهای محاسباتی.
قوانین تقدم عملگر
C++ عملگرها را در عبارات محاسباتی با توالی که قانون تقدم عملگرها تعیین میکند بکار میبرد. این قوانین شبیه قوانین موجود در جبر هستند:
۱- عملگرهایی که در درون جفت پرانتز قرار دارند دارای اولویت اول هستند. بنابر این برنامهنویس با استفاده از پرانتز میتواند ترتیب اجرای محاسبات را در دست بگیرد. پرانتزها دارای بالاترین سطح تقدم میباشند. در مواردی که پرانتزها به صورت تودرتو (آشیانهای) قرار گرفتهباشند، عملگر پرانتزی که در داخلیترین سطح قرار دارد ابتدا انجام میگیرد، همانند
((a + b) + C)
عملگر قرار گرفته در جفت پرانتز داخلی ابتدا بکار گرفته میشود.
۲- عملگرهای ضرب و تقسیم و باقیمانده در مرحله بعدی بکار گرفته میشوند. اگر عبارتی شامل چندین عملگر ضرب، تقسیم و باقیمانده باشد، عملگرها از سمت چپ به راست اجرا خواهند شد. ضرب، تقسیم و باقیمانده دارای اولویت هم سطح یا برابر هستند.
۳- عملگرهای جمع و تفریق در آخرین مرحله به کار میروند. اگر عبارتی شامل چندین عملگر تفریق و جمع باشد، عملگرها به ترتیب از سمت چپ به راست اجرا خواهند شد. عملگرهای جمع و تفریق دارای اولویت هم سطح هستند.
وجود قوانین تقدم عملگرها، زبان C++ قادر میسازد تا عملگرها را با ترتیب صحیح بکار گیرد. در جدول شکل ۱۰-۲ خلاصهای از قوانین تقدم عملگرها آورده شده است. این جدول با معرفی عملگرهای دیگر C++ در فصلهای بعدی تکمیلتر خواهد شد. جدول کامل تقدم عملگرها در پیوست کتاب موجود است.
عملگر(ها) | عملیات | ترتیب ارزیابی (تقدم) |
( ) | پرانتز | اولویت اول. اگر پرانتزها به صورت تودرتو باشند، عبارتی که در درون داخلیترین پرانتز قرار دارد ابتدا محاسبه میشود. اگر چندین جفت پرانتز در یک خط قرار گرفته باشند (تودرتو نباشند) ترتیب اجرا از سمت چپ به راست خواهد بود. |
*, / , % | ضرب و تقسیم و باقیمانده | اولویت دوم. اگر چند مورد از چنین عملگرهای وجود داشته باشد، ترتیب اجرا از سمت چپ به راست خواهد بود. |
+, – | جمع و تفریق | اولویت آخر. اگر چندین عملگر جمع و تفریق وجود داشته باشد ترتیب اجرا از سمت چپ به سمت راست خواهد بود. |
شکل ۱۰-۲ | تقدم عملگرهای محاسباتی.
عبارات ساده جبری و C++
حال اجازه دهید تا به چند عبارت محاسباتی نگاهی بیاندازیم تا بخوبی با قوانین تقدم عملگرهای محاسباتی آشنا شوید. در هر مثالی که ذکر میشود عبارت جبری و معادل C++ آن عبارت نیز آورده شده است. مثال زیر یک عبارت ریاضی را نشان میدهد که منظور از آن به دست آوردن میانگین پنج عدد است:
:جبری
m = (a + b + c + d + e) / 5;: C++
وجود پرانتز در این عبارت ضروری است چرا که عملگر تقسیم تقدم بالاتری نسبت به عملگر جمع دارد، در نتیجه مقدار داخلی پرانتز بر ۵ تقسیم میشود. اگر پرانتز در این عبارت حذف شود، منظور محاسبه a + b + c + d + e / 5 خواهد بود که معادل عبارت زیر است:
عبارت زیر نشاندهنده یک معادله است:
y = mx + b :جبری
y = m * x + b; : C++
وجود پرانتز در این عبارت نیاز نیست، چرا که عملگر ضرب تقدم بالاتری نسبت به عملگر جمع دارد و در ابتدا انجام میشود. عمل تخصیص در آخرین مرحله صورت میگیرد چرا که به نسبت عمل ضرب و جمع از اولویت پایینتری برخوردار است.
مثالی که در زیر آورده شده حاوی عملگرهای توان، ضرب، تقسیم اعشاری، جمع و تفریق است:
z = pr%q + w / x – y : جبری
: C++
دایرههای حاوی اعداد نشاندهنده ترتیب اجرای عملگرها هستند. عملگر ضرب در اولویت اول قرار دارد و عملگرهای باقیمانده و تقسیم در اولویتهای بعدی و به ترتیب از سمت چپ به راست اجرا میشوند و پس از آنها عملگرهای جمع و تفریق به ترتیب اجرا شده و در پایان عمل تخصیص صورت میگیرد.
توجه کنید که در این جدول در مورد پرانتزهای تودرتو مطالبی بیان شده است، اما تمام عبارات محاسباتی که دارای چندین جفت پرانتز هستند، ممکن است حاوی پرانتزهای تودرتو نباشد. برای مثال، اگر چه عبارت زیر
a * (b + c) + c * (d + e)
شامل دو جفت پرانتز است، اما هیچ کدامیک از آنها پرانتز تودرتو نمیباشند. در چنین حالتی هر دو آنها دارای سطح یکسان میباشند.
ارزیابی معادله درجه دوم
برای درک بهتر قوانین تقدم عملگرها به مثال زیر که یک چند جملهای درجه دوم است توجه کنید:
دایرههای حاوی اعداد نشاندهنده ترتیب اجرای عملگرها هستند. در C++ عملگر محاسباتی برای انجام عمل توان وجود ندارد، از اینرو عبارت x۲ را بصورت x * x نشان دادهایم. بزودی در مورد تابع استاندارد کتابخانهای pow (توان) صحبت خواهیم کرد.
۷-۲ تصمیمگیری: عملگرهای مقایسهای و رابطهای
در این قسمت به معرفی ساختارif در C++ میپردازیم که بر مبنای برقرار بودن یا نبودن برخی از شرطها اقدام به تصمیمگیری میکند. عبارت موجود در یک ساختارif ، شرط نامیده میشود. اگر شرط مورد قبول واقع شود (شرط true باشد) عباراتی که در داخل بدنه ساختار if قرار گرفتهاند اجرا میشوند و اگر شرط مورد قبول واقع نشود عبارات داخل بدنه اجرا نخواهند شد. برای آشنائی شما با چنین ساختاری به بررسی یک مثال خواهیم پرداخت.
شرطهای که در ساختار if بکار میروند میتوانند از عملگرهای مقایسهای و رابطهای که در جدول شکل ۱۲-۲ آورده شدهاند، استفاده کنند. تمام عملگرهای رابطهای دارای اولویت یکسان بوده و از سمت چپ به راست ارزیابی میشوند. عملگرهای مقایسهای به نسبت عملگرهای رابطهای از اولویت پایینتری برخوردار هستند و آنها هم از سمت چپ به راست ارزیابی میشوند.
Y = 2 * 5 * 5 + 3 * 5 + 7; گام اول
سمت چپترین ضرب ۲ * ۵= ۱۰
Y = ۱۰ * ۵ + ۳ * ۵ + ۷; گام دوم
سمت چپترین ضرب ۱۰ * ۵ = ۵۰
Y = 50 + 3 * 5 + 7; گام سوم
ضرب قبل از جمع ۳ * ۵ = ۱۵
Y = 50 + 15 + 7; گام چهارم
سمت چپترین جمع ۵۰ + ۱۵ = ۶۵
Y = 65 + 7; گام پنجم
آخرین جمع ۶۵ + ۷ = ۷۲
Y = 72; گام ششم
شکل ۱۱-۲ | ترتیب اجرای عملگرهای محاسباتی در یک چند جملهای درجه دوم.
عملگرهای مقایسهای یا رابطهای استاندارد در جبر | عملگرهای مقایسهای یا رابطهای درC++ | مثال در C++ | مفهوم شرط |
عملگرهای مقایسهای | |||
= | == | x ==y | x با y برابر است. |
!= | x!=y | x با y برابر نیست. | |
عملگرهای رابطهای | |||
> | > | x>y | x از y بزرگتر است. |
< | < | x<y | x از y کوچکتر است. |
>= | x>=y | x بزرگتر یا مساوی y است. | |
<= | x<=y | x کوچکتر یا مساوی y است. |
شکل ۱۲-۲ | عملگرهای مقایسهای و رابطهای.
برنامه زیر از شش عبارت if برای مقایسه بین دو عدد ورودی از سوی کاربر استفاده میکند. اگر شرط موجود در هر کدامیک از عبارات if برقرار باشد (true)، خروجی مرتبط با آن عبارت به اجرا درخواهد آمد. برنامه شکل ۱۳-۲ نشاندهنده برنامه و کادرهای ورودی و خروجی از اجرای نمونه برنامه است.
شکل ۱۳-۲ | عملگرهای رابطهای و مقایسهای.
در خطوط ۶-۸
using std::cout; // program uses cout
using std::cin; // program uses cin
using std::endl; // program uses endl
از عبارات using استفاده شده است که نیاز به تکرار پیشوند std:: را برطرف میکند. پس از بکارگیری عبارات using، میتوانیم cout را بجای std::cout، cin را بجای std::cin و endl را بجای std::endl در مابقی برنامه بنویسیم.]توجه: از این نقطه به بعد در کتاب، در هر مثال از یک یا چند عبارت using استفاده شده است.[
در خطوط ۱۳-۱۴
int number1; // first integer to compare
int number2; // second integer to compare
متغیرهای مورد نیاز برنامه اعلان شدهاند. بخاطر دارید که متغیرها میتوانند در یک خط یا چند خط اعلان شوند.
برنامه در خط ۱۷ از روش آبشاری برای دریافت داده به منظور دریافت دو عدد صحیح استفاده کرده است. بخاطر دارید که امکان نوشتن cin را به توجه به خط ۷ فراهم آوردهایم (بجای std::cin). اولین مقدار قرائت شده و در متغیر number1 قرار داده میشود و سپس مقدار دوم قرائت شده و در متغیر number2 ذخیره میگردد.
ساختار if در خطوط ۱۹-۲۰
if ( number1 == number2 )
cout << number1 << ” == ” << number2 << endl;
مبادرت به مقایسه متغیرهای number1 و number2 برای تست برابر بودن میکند. اگر مقادیر برابر باشند، عبارت موجود در خط ۲۰ جمله مبنی بر اینکه اعداد با هم برابر هستند به نمایش در میآورد. اگر شرطی در یک یا چند ساختار if که در خطوط ۲۳, ۲۶, ۲۹,۳۲ و ۳۶ قرار دارند برقرار شود، عبارت متناظر توسط cout در خروجی به نمایش در میآید.
دقت کنید که هر ساختار if در برنامه شکل ۱۳-۲ دارای یک عبارت در بدنه خود بوده و بدنه تمام ساختارها بفرم دندانهدار نوشته شدهاند. با دندانهدار نوشتن ساختار هر if وضوح و خوانائی برنامه را افزایش دادهایم. در فصل چهارم نشان خواهیم داد که چگونه میتوان در ساختارهای if از چند عبارت استفاده کرد ( به کمک جفت کاراکتر { } ).
به نحوه استفاده از فاصلهها در برنامه شکل ۱۳-۲ دقت کنید. در عبارات C++، کاراکترهای white-space همانند تبها، خطوط جدید توسط کامپایلر در نظر گرفته نمیشوند. (اگر در درون رشته بکار گرفته شوند در نظر گرفته خواهند شد.) از اینرو، امکان دارد عبارات بر روی چند خط تقسیم شده و برطبق نظر برنامهنویس از هم فاصله پیدا کنند. جدا کردن هویتها یا مشخصهها، رشتهها (همانند “hello” ) و ثابتها (همانند عدد ۱۰۰۰ ) بر روی چند خط خطای نحوی خواهد بود.
در جدول شکل ۱۴-۲ تقدم عملگرهای معرفی شده در این فصل بطور یکجا آورده شدهاند. اولویت عملگرها از بالا به پایین کاهش مییابد. دقت کنید که تمام این عملگرها بجر از عملگر تخصیص =، از سمت چپ به راست ارزیابی میشوند.
عملگر | شرکتپذیری | نوع |
( ) | چپ به راست | پرانتز |
* / % | چپ به راست | ضرب، تقسیم،باقیمانده |
+ – | چپ به راست | جمع، تفریق |
<< >> | چپ به راست | ورود و خروج داده |
< <= > >= | چپ به راست | رابطهای |
== != | چپ به راست | مقایسهای |
= | راست به چپ | تخصیصی |
شکل ۱۴-۲ تقدم عملگرهای معرفی شده تا بدین مرحله.
با سلام من میخاستم یه برنامه بنویسم که یک عبارت جبری رو ساده کنه ممنون میشم اگه کمکم کنید.
مثال: 2ab+3ad-ab+4ad=ab+7ad