Pagini recente »
Diferențe pentru problema/inpostfix între reviziile 2 și 8
Nu există diferențe între titluri.
Diferențe între conținut:
== include(page="template/taskheader" task_id="inpostfix") ==
Poveste și cerință...
Se dă un șir de caractere ce reprezintă o expresie aritmetică. Să se afișeze scrierea postfix a acesteia ("Forma Inversă Poloneză":https://en.wikipedia.org/wiki/Reverse_Polish_notation).
h2. Descriere
Forma infix a unei expresii este forma cu care suntem cu toții obișnuiți:
* $operand1 OPERATOR operand2$
* $A + B$
* $A * B$
Forma postfix se obține prin scrierea operatorului în urma operanzilor:
* $operand1 operand2 OPERATOR$
* $AB+$
* $AB*$
h2. Exemplu pas cu pas
Avem forma infix:
* $A * (B + C / D)$
Construim forma postfix pas cu pas. Pentru simplitate, vom ignora spațiile: $A*(B+C/D)$.
* Pasul 1. Avem doi termeni: $A * (B+C/D)$. Operația de înmulțire se mută la final.
** $A(B+C/D)*$
* Pasul 2: În interiorul parantezei, avem doi termeni: $B + C/D$. Operația de adunare se mută la final.
** $A(BC/D+)*$
* Pasul 3: $C/D$ devine $CD/$
** $ABCD/+*$
h2. Alte exemple
* $A + B = AB+$
* $A + B - C = AB+C-$
* $A - B * C = ABC*-$
* $(A - B) / C = AB-C/$
* $(A + B) * (C + D) = AB+CD+*$
h2. Date de intrare
Fișierul de intrare $inpostfix.in$ ...
Fișierul de intrare $inpostfix.in$ conține pe o singură linie șirul de caractere ce reprezintă notația infix a unei expresii.
h2. Date de ieșire
În fișierul de ieșire $inpostfix.out$ ...
În fișierul de ieșire $inpostfix.out$ se va găsi un șir de caractere reprezentând notația postfix a expresiei.
h2. Restricții
* $... ≤ ... ≤ ...$
* $1 ≤ lungimea sirului ≤ 100.000$
* $Operanzii expresiei sunt formați dintr-o singură literă mare din alfabetul englez [A...Z]$
* $Operatorii aritmetici din expresie sunt + - * /$
* $Expresia conține doar paranteze rotunde ( )$
h2. Exemplu
table(example).
|_. inpostfix.in |_. inpostfix.out |
| This is some
text written on
multiple lines.
| This is another
text written on
multiple lines.
| A*A
| AA*
|
| A*B+C/D
| AB*CD/+
|
h3. Explicație
...
| A*(B+C)/D
| ABC+*D/
|
| A+B+C
| AB+C+
|
| A+(B+C)
| ABC++
|
| A+B*C
| ABC*+
|
== include(page="template/taskfooter" task_id="inpostfix") ==
Nu există diferențe între securitate.