OLIMPIADA DE INFORMATICA

Etapa municipala IASI, 20 ianuarie 2007

Clasa a X a

Problema 2- Evaluare expresie

100 puncte

Să considerăm o expresie aritmetică care conține ca operanzi numai variabile al căror nume este format dintr-o singură literă mică a alfabetului englez. Valorile inițiale ale variabilelor ce pot interveni în expresie sunt:
a = 1, b = 2, ..., z = 26.
În expresie pot fi utilizați 2 operatori binari (+ și -, reprezentând adunarea și respectiv scăderea) și 2 operatori unari (++ și --, reprezentând operatorul de incrementare și respectiv operatorul de decrementare). Operatorii unari ++ și -- pot fi plasați numai înainte sau după o variabilă. Dacă operatorul unar ++ apare înaintea unei variabile, atunci valoarea variabilei este mărită cu 1 (unu) înainte ca valoarea variabilei să fie luată în calculul expresiei. De exemplu, valoarea expresiei ++c-b este 2, iar valoarea variabilei c după evaluarea expresiei va fi 4. Când operatorul unar ++ apare după variabilă, valoarea variabilei este mărită cu 1 (unu) după ce valoarea acelei variabile este folosită la calculul expresiei. De exemplu, valoarea expresiei c++-b este 1, iar valoarea variabilei c după evaluarea expresiei va fi 4. Operatorul -- se comportă la fel, cu observația că valoarea variabilei se va micșora cu 1 (unu).
Operatorii unari au prioritate mai mare decât cei binari (mai exact, se execută mai întâi incrementările/decrementările, apoi adunările și scăderile). În cazul în care există mai multe operații cu aceeași prioritate, acestea vor fi executate în ordine, de la stânga la dreapta.

Cerinta
Scrieti un program care sa determine valoarea unei expresii, precum si valorile finale ale variabilelor folosite in expresie.

Date de intrare
Fisierul de intrare eval.in contine pe prima linie expresia. Aceasta poate contine si spatii.

Date de iesire
Fisierul de iesire eval.out contine pe prima linie un numar intreg care reprezinta valoarea expresiei, iar pe urmatoarele linii valorile variabilelor folosite in expresie, cate o valoare pe fiecare linie, in ordinea alfabetica a variabilelor.

Restrictii

Exemple

eval.in eval.out Explicații (valoarea finală a expresiei și a variabilelor utilizate)
d -- + a - b 3
1
2
3
Valoarea expresiei = 3
a = 1
b = 2
d = 3
     
eval.in eval.out Explicații (valoarea finală a expresiei și a variabilelor utilizate)
q- u -+       +a-c+     + - + + t -30
2
4
17
21
21
Valoarea expresiei = -30
a = 2
c = 4
q = 17
t = 21
u = 21

Timp maxim de executie/test: 1 secunda