![]() |
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