eolymp
bolt
Try our new interface for solving problems
Məsələlər

İfadələrin hesablanması

İfadələrin hesablanması

Bu məsələ C proqramlaşdırma dili stilində yazılmış ifadələrin hesablanması haqqındadır. İfadələrdə yalnız sadə tam ədədi dəyişənlər və məhdud sayda operatorlar ola bilər; ifadələrdə sabitlər olmur. Proqramda \textbf{a}-dan \textbf{z}-dək kiçik hərflərlə adlandırılmış \textbf{26 }dəyişəndən istifadə olunur. Hesablamalardan əvvəl dəyişənlərin ilkin başlanğıc qiymətləri belədir\textbf{: a = 1, b = 2, ..., z = 26}. Mümkün əməllər standart semantik mənada toplama və çıxma (binar \textbf{+} və \textbf{--}) əməlləridir. Belə ki,\textit{ }\textbf{a + c -- d + b} ifadəsinin qiyməti \textbf{2} olacaq \textbf{(1 + 3 -- 4 + 2)}. Giriş ifadələrində həm dəyişənlərdən əvvəl, həm də sonra yerləşən unar \textbf{++} və \textbf{--} operatorları ola bilər. Əgər \textbf{++} operatoru dəyişəndən əvvəl yerləşirsə, onda dəyişənin qiyməti bütün ifadənin hesablanmasından əvvəl bir vahid artırılır. \textbf{++c -- b} ifadəsinin qiyməti \textbf{2} olacaq. Əgər \textbf{++} operatoru dəyişəndən sonra yerləşirsə, onda dəyişənin qiyməti ondan ifadədə istifadə olunduqdan sonra bir vahid artırılır. \textbf{c++ -- b} ifadəsinin qiyməti \textbf{1} olar, \textbf{c}-nin qiyməti bütün ifadənin qiymətinin hesablanmasından sonra artırılaraq 4-ə bərabər olur. \textbf{--} operatoru da özünü eyni qaydada aparır, lakin o, operandın qiymətini bir vahid azaldır. Formal baxımdan ifadə aşağıdakı şəkildə hesablanır: \begin{enumerate} \item Əvvəlində \textbf{++} operatoru olan bütün dəyişənləri tapırıq. Onların qiymətlərini artıran mənimsətmə operatorunu yazırıq. Bundan sonra ifadədəki bütün dəyişənlərin qarşısından \textbf{++} operatorlarını silirik. \item Dəyişənlərdən sonra gələn \textbf{++} operatorlarını da eyni qaydada emal edirik. \item İndi ifadədə \textbf{++} operatorları yoxdur. İfadənin \textbf{1}-ci addımdan sonra alınmış və \textbf{2}-ci addımın icrasından əvvəl qiymətlərini hesablayırıq. \item \textbf{1}-ci addımda, sonra \textbf{3}-cü addımda, daha sonra isə \textbf{2}-ci addımda verilmiş göstərişləri icra edirik. \end{enumerate} Beləliklə, \textbf{++a+b++} ifadəsinin hesablanması aşağıdakı əməllərin icrası ilə ekvivalentdir: \textbf{a = a + 1}, \textbf{result = a + b} və \textbf{b = b + 1}. \InputFile Birinci sətirdə testlərin \textbf{t }sayı yerləşir. Sonrakı \textbf{t} sayda sətrin hər birində bir ifadə yerləşir. Giriş ifadəsindəki boşluq simvollarını nəzərə almamaq lazımdır. Əmin olun ki, ifadələr birmənalıdır, yəni onlarda \textbf{a+++b}\textit{ }kimi hissələr yoxdur. İfadədə hər bir dəyişənə yalnız bir dəfə rast gəlinir. \OutputFile Hər bir test üçün ifadəni girişə verildiyi şəkildə çıxışa verin, sonra bütün ifadənin qiymətini verin. Daha sonra ifadənin qiymətinin hesablanmasından sonra bütün dəyişənlərin qiymətini (dəyişənlərin adlarını nizamlamaqla) çıxışa verin. Yalnız ifadədə istifadə olunan dəyişənlərin qiymətləri çıxışa verilir. Çıxışın formatı nümunədə verilmişdir.
Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
2
a+b
c+f--+--a
Çıxış verilənləri #1
Expression: a+b
value = 3
a = 1
b = 2
Expression: c+f--+--a
value = 9
a = 0
c = 3
f = 5