Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1575/14246
1 #!/usr/bin/python
2 # -*- coding: utf8 -*-
3 # Soubor: 20120320-Tue-reverzni.py
4 # Datum: 20.03.2012 08:22
5 # Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
6 # Licence: GNU/GPL
7 # Úloha: kalkulátor s poslkou reverzní notací
8 #########################################
9
10 import math, readline
11
12 zasobnik = [] # globální proměnná
13
14 def Push(cislo):
15 zasobnik.append(cislo)
16
17 def Pop():
18 if len(zasobnik)>0:
19 return zasobnik.pop()
20 else:
21 return None
22
23 def vypisZasobnik():
24 print zasobnik
25
26 #################################################################
27 funkce2operandy = None
28 funkce1operand = None
29
30 def plusObal(a,b):
31 return a+b
32 def minusObal(a,b):
33 return b-a
34
35 def druhaMocninaObal(a):
36 return a*a
37
38 def vypocet1operand():
39 operandA = Pop()
40 if operandA != None:
41 vysledek = funkce1operand(operandA)
42 Push(vysledek)
43 print vysledek
44 else:
45 print 'CHYNA: nelze provést',polozka,'-- zásoník je prázdný'
46
47 def vypocet2operandy():
48 operandA = Pop()
49 operandB = Pop()
50 if operandA != None and operandB != None:
51 vysledek = funkce2operandy(operandA,operandB)
52 Push(vysledek)
53 print vysledek
54 else:
55 print 'CHYNA: nelze provést',polozka,'-- zásoník je prázdný'
56 if operandA != None: # poslední číslo v zásobníku tam vrátím
57 Push(operandA)
58
59 def zpracujRadek(radek):
60 global funkce2operandy
61 global funkce1operand
62 vstupy = radek.split() # získám pole vstupů
63 for polozka in vstupy: # procházím vstupy
64 if polozka == '+':
65 funkce2operandy = plusObal
66 vypocet2operandy()
67 elif polozka == '-':
68 funkce2operandy = minusObal
69 vypocet2operandy()
70 elif polozka == '^2':
71 funkce1operand = druhaMocninaObal
72 vypocet1operand()
73 elif polozka == 'p':
74 vypisZasobnik()
75 else:
76 try:
77 cislo = float(polozka) # převedu řetězec na číslo
78 Push(cislo)
79 except:
80 print 'CHYBA: neznámý operand:', polozka
81
82
83 ########################################################
84 # hlavní programová smyčka
85 while True:
86 try:
87 radek = raw_input('kalkulacka ->> ')
88 zpracujRadek(radek)
89 except EOFError:
90 exit(0)
91