+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
+ سوال پیادهسازی
----------
رضا که بهتازگی بهعنوان حسابدار، در یک قنادی شروع بهکار کردهاست؛او متوجه شدهاست بسیاری از محاسباتی که انجام میدهد تکراری بوده و زمان زیادی از او میگیرد. به همین دلیل دنبال ماشینحسابی است که علاوه بر اعمال اصلی، بتواند از دستور های پیشرفته پشتیبانی کند و امکان شخصیسازی داشتهباشد.
اعمال اصلی که این ماشینحساب آنها را پشتیبانی میکند شامل
جمع (`+`)، تفریق (`-`)، ضرب (`*`)، تقسیم (`/`)، توان (`^`) میباشد. اولویت این اعمال مشابه اولویت آنها در ریاضی است.(به ترتیب پرانتز ، توان ، ضرب و تقسیم از چپ به راست ، جمع و تفریق از چپ به راست)
در این سوال قصد داریم ماشینحساب موردنیاز رضا را پیادهسازی کنیم.
دستوراتی که توسط رضا به شما داده میشوند به صورت زیر هستند:
```
operand1 operator operand2 = definition
```
+ `operand1` و `operand2` ترکیبی از حداکثر ۵۰ حرف کوچک و بزرگ انگلیسی است.
+ `operator` ترکیبی از حداکثر ۵۰ حرف کوچک و بزرگ انگلیسی و ارقام است و تضمین میشود کاراکتر اول حرف است.
+ تضمین میشود که در هر دستور، مقادیر وارد شده بهجای `operand1` ،`operator` و `operand2` همگی متمایز باشند.
+ همچنین هیچ دو دستوری، دارای `operator` یکسان نمیباشند.
+ عبارت جبری که به جای `definition` وارد میشود؛ یک عبارت جبری است که متغیر های آن `operand1` و `operand2` میباشد. جزئیات مربوط به `definition` در قسمت امتیازدهی توضیح داده شدهاست.
نمونه ای از این دستورات را به صورت زیر هستند:
```
a sum b = 2*a+b
a trick b = a^b/b
a square b = a^2+b^2
```
این دستورات تعریفشده هنگام استفاده از ماشینحساب به صورت زیر استفاده میشوند:
```
2 sum 3
```
که بهصورت
$2*2+3$
محاسبهشده و خروجی زیر را میدهد.
```
7
```
و برای دستور `square` داریم:
```
3 square 3 = 3^2+3^2
```
که بهصورت $3^2+3^2$ محاسبهشده و خروجی زیر را میدهد.
```
18
```
**دقت کنید** این ماشینحساب از بقیه ماشینحسابها مستثنی نیست و از **پرانتزگذاری** پشتیبانی میکند و شما باید بیشترین اولویت محاسباتی را به پرانتز اختصاص دهید.
# دستورات
```
Add Command
```
با آمدن این دستور، در خط بعد از آن دستوری که مدیر قنادی میخواهد به ماشین حسابش اضافه کند میآید. (مانند شبه دستورات بالا که آورده شده است.)
```
Calculate
```
با آمدن این دستور، در خط بعد از این دستور شما باید عبارتی که برای محاسبه در خط بعد از این میآید را حساب کنید و جواب را در خروجی چاپ کنید.
```
End
```
با آمدن این دستور نیز برنامه به پایان میرسد.
<details class="blue">
<summary>زیر مسئله اول
(**۱۲۰ امتیاز**)
</summary>
در این قسمت، ماشینحساب از دستورات شخصیسازی شده پشتیبانی نمیکند و همانند ماشینحساب ساده فقط عبارتهای جبری شامل اعمال اصلی را محاسبه میکند.
+ ممکن است در ورودی برنامه با عبارت `Add Command ` دستوری تعریف شود؛ اما تضمین میشود در قسمت `Calculate` فقط از اعمال اصلی استفاده میشود.
</details>
<details class="pink">
<summary>زیر مسئله دوم
(**۱۸۰ امتیاز**)
</summary>
+ در این قسمت، ماشینحساب از دستورات شخصیسازی شده پشتیبانی میکند و عبارت تعریف شده در قسمت `definition` فقط شامل اعمال اصلی میباشد.
+ تضمین میشود ورودی ها به نحوی پرانتزگذاری شود تا نیازی به دانستن اولویت دستور های تعریفشده نباشد.
</details>
**تضمین میشود** همه اعداد صحیح هستند.
**تضمین میشود** در تقسیمها اعداد بخشپذیر هستند و هیچگاه تقسیم بر صفر انجام نمیشود.
**تضمین میشود** مقدار خروجی به صورت
$-10^6 \le value \le 10^6$
است.
# مثال
## ورودی نمونه ۱
```
Add Command
a Comp b = 2*a+b
Add Command
a trick b = a^b/b
Add Command
a square b = a^2+b^2
Calculate
(2 trick 4)+3
Calculate
(4 square 1)*(1 Comp 1)
End
```
## خروجی نمونه ۱
```
7
51
```
## ورودی نمونه ۲
```
Add Command
a row b = (a)^b
Add Command
a beEqual b = b
Add Command
a col b = (a+b)/(a*b)
Calculate
((3 row 2)+3*(0*(2+1)+(1 beEqual 3)))/(2 col 2)
End
```
## خروجی نمونه ۲
```
18
```
پیادهسازی - ماشینحساب پیشرفته!
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.