summaryrefslogtreecommitdiff
path: root/python/problems/lists_and_for/calculator_polish/sl.py
blob: eb47c94c8e5d0bab78f87612d03e031d1e7e84d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# coding=utf-8
import server
mod = server.problems.load_language('python', 'sl')


id = 224
name = 'Kalkulator v inverzni poljski notaciji'
slug = 'Kalkulator v inverzni poljski notaciji'


description = '''\
<p>
V <a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation">inverzni poljski ali postfiksni notaciji</a> ne potrebujemo oklepajev:
računska operacija sledi številoma in se vedno izvede takoj ter zamenja predhodni števili in operacijo z rezultatom operacije.

Poglejmo si računanje <code>(3 + 5) * 2 - 10 * (2 - 1)</code> ali postfiksno <code>3 5 + 2 * 10 2 1 - * -</code>:

<ul>
<li> Beremo vhod do prve operacije. </li>
<li> <code>3 5 + </code>; izvede se seštevanje, tri elemente zamenja rezultat 8, beremo dalje. </li>
<li> <code>8 2 * </code>; rezultat je 16, beremo dalje.</li>
<li> <code>16 10 2 1 -</code>; rezultat 1, beremo dalje.</li>
<li> <code>16 10 1 *</code>; rezultat 10, beremo dalje.</li>
<li> <code>16 10 -</code>; rezultat 6, beremo dalje.</li>
<li> <code>6</code>; vhoda je konec zato se se računanje ustavi.</li>
</ul>
Napišite kalkulator s celoštevilskimi operacijami seštevanja, odštevanja, množenja, deljenja in izračunom ostanka,
ki prejme vhod v inverzni poljski notaciji. Ko uporabnik ne poda ničesar (pritisne le enter), naj se program zaključi.
Števila ter operande ločujte s presledkom.
<pre>
Izraz: 3 5 +
Rezultat: 8

Izraz: 16 5 %
Rezultat: 1

Izraz: 16 5 /
Rezultat: 3

Izraz: 3 3 3 + +
Rezultat: 9

Izraz: 3 5 + 2 * 10 2 1 - * -
Rezultat: 6

Izraz:
</pre>
</p>'''

stack = ['''\
<p>
Uporabi sklad, saj prebrano operacijo vedno izvajamo na zadnjih dveh številih. 
</p>''', 
        '''\
<p>
Sklad je seznam, kjer se elementi vedno dodajajo in brišejo na koncu seznama. 
V Pythonovih seznamih imamo za ta namen metodi <code>append</code> in 
<code>pop</code>.
</p>'''
]

split = ['''\
<p> 
Niz razbijemo na besede z metodo <code>split</code>
</p>''',
        '''\
<pre>
>>> izraz = '3 5 + 2 * 10 2'
>>> izraz.split()
['3', '5', '+', '2', '*', '10', '2']
</pre>''',
        '''\
<p>Zanimivost, ki je ne potrebujete za to nalogo: 
če splitu damo znak v argument, bo razbil niz po tem znaku:</p>
<pre>
>>> b = 'brina,burja,miha;maja,maks'
>>> b.split(",")
>>> ['brina', 'burja', 'miha;maja', 'maks']
</pre>''']

plan = [stack,
        '''\
<pre>
for zanka čez vse elemente (števila, operacije):
    če je element operacija:
        Iz sklada preberi zadnji dve vrednosti, izračunaj in postavi nazaj na sklad
    drugače postavi število na sklad
</pre>
''',
        split]

hint = {
    'final_hint': ['''\
<p>Program je pravilen! <br>
</p>
'''],
}