zde - Univerzita Karlova
zde - Univerzita Karlova zde - Univerzita Karlova
1. Je-li čtený symbol operandem, pak ulož operand na zásobník. 2. Je-li čtený symbol operátorem, pak vyber ze zásobníku posledních n operandů (kde n je arita operátoru; např. pro + je n = 2). Proveď operaci dle operátoru s vybranými operandy a výsledek ulož na zásobník. Infixová Aktuální Aktuální Návrat notace znak procedura do procedury 5+3*2 5 Výraz 5+3*2 5 Term +3*2 + Faktor Term +3*2 + Term Výraz 3*2 3 Výraz (+) 3*2 3 Term *2 * Faktor Term 2 2 Term (*) Faktor Term (*) Term (*) Výraz (+) Výraz (+) Tab.1: Průběh rekurzivního sestupu Nepřečtená Aktuální Zásobník Vybírané Operace část znak symboly 532*+ 5 32*+ 3 5 2*+ 2 35 *+ * 235 23 2 ∗ 3=6 + + 65 65 6+5=11 11 Tab. 2: Vyhodnocení výrazu s pomocí zásobníku Pro výraz 5 + 3 ∗ 2 vezměme jeho postfixovou notaci 5 3 2 * + a vyhodnoťme ho s pomocí zásobníku. Obsah zásobníku po přečtení slova je roven hodnotě výrazu. Postup by samozřejmě bylo možno zobecnit na složitější čísla nebo proměnné, ale vyžadovalo by to složitější struktury zásobníku. 114
Náš kód už tedy zbývá jen obohatit o proceduru provádějící vyhodnocení výrazu v postfixové notaci: function VyhodnotPostfix(var postfix:string):integer; {vyhodnotí postfixovou formu výrazu zásobníkem / vrátí číslo} var Stack:array[1..1000] of integer; {zásobník čísel jako statické pole} headindex, i, val1, val2 :integer; {index vrcholu zásobníku, val1, val2 - operandy z vrcholu zás.} begin headindex := 0; {nastav vrchol zásobníku na nulu} for i:= 1 to length(postfix) do {projdi celý postfix} begin ch := postfix[i]; {do pomocné proměnné dej aktuální znak} if (ch in [’0’..’9’]) then {je-li to číslice} begin Inc(headindex); {vlož do zásobníku} Stack[headindex]:= ord(ch) - 48; {příslušné číslo} end else {je-li to operátor} begin case ch of ’+’: begin val2 := Stack[headindex]; {vrchol - druhý operand} val1 := Stack[headindex - 1]; {o pozici níže - první op.} Dec(headindex); {odeber operandy a vlož místo nich výsledek} Stack[headindex] := val1 + val2; end; ’*’: begin val2 := Stack[headindex]; val1 := Stack[headindex - 1]; Dec(headindex); Stack[headindex] := val1 * val2; end; end; end; end; VyhodnotPostfix := Stack[headindex]; {na konci je na vrcholu výsledek} end; 115
- Page 63 and 64: Řešení 8 (bez komentáře, chyb
- Page 65 and 66: 1 Vztah matematiky a fyziky Fyzika
- Page 67 and 68: řujeme platnost navržených hypot
- Page 69 and 70: 6,8 cm, pohybující se ve vzdálen
- Page 71 and 72: 5 Matematika a problémy astronomic
- Page 73 and 74: Úloha 6.2 Lyžař sjíždí po dlo
- Page 75 and 76: graficky. Z grafu 1 vidíme, že p
- Page 77 and 78: změn síly F = F (x), kde x je dé
- Page 79 and 80: Pokud jde o obor racionálních č
- Page 81 and 82: Dedekindova poznámka o tom, že al
- Page 83 and 84: taková úplná korespondence mezi
- Page 85 and 86: Nemoha se dočkat odpovědi, píše
- Page 87 and 88: soutěžích, vyjádřené 11 zlat
- Page 89 and 90: koslovenska nejprve do válkou rozb
- Page 91 and 92: Výpočetní technika dovoluje prov
- Page 93 and 94: obtížnosti, problém je proto vho
- Page 95 and 96: tohoto zařízení, ta jím prochá
- Page 97 and 98: v pracovních sešitech a knížká
- Page 99 and 100: Z výše uvedeného dělení lidsk
- Page 101 and 102: žáky nechat zakreslovat pohled do
- Page 103 and 104: http://hlavolamy.zde.cz (odtud je p
- Page 105 and 106: aby byl pro člověka příjemný.
- Page 107 and 108: matika (BKG) je jedním z možných
- Page 109 and 110: Velice oblíbenou, jednoduchou a p
- Page 111 and 112: if not((ch in [’0’..’9’])or
- Page 113: egin err:=0; {inicializace prom.} i
- Page 117 and 118: Literatura [1] Češka, M., Rábov
- Page 119 and 120: Nejčastěji respondenti uváděli,
- Page 121 and 122: v jakémkoliv oboru - umění, spor
- Page 123 and 124: • rozšiřování učiva (0/0)
- Page 125 and 126: Algoritmy a RVP Autoři článku pr
- Page 127 and 128: postupy, se kterými se v matematic
- Page 129 and 130: však právě srovnávat rychlost a
- Page 131 and 132: • Významný model pro hledání
- Page 133 and 134: 2. vnější - využití funkcí k
- Page 135 and 136: Dále je zde také uvedena historie
- Page 137 and 138: zkumu se v tomto případě ukázal
- Page 139 and 140: si lépe zapamatovat, snadněji neg
- Page 141 and 142: D5: „Už to zkouším počtvrté!
- Page 143 and 144: 2.5 Ukázky dialogů E: „Rozumít
- Page 145 and 146: pomocných záznamů, jen s dotýk
- Page 147 and 148: Vývoj nových forem péče o talen
- Page 149 and 150: 10. Která odpověď na otázku „
- Page 151 and 152: 18. Kolik litrů horké vody o tepl
- Page 153 and 154: Jeden žák naší školy stráví
- Page 155 and 156: v rovnici lze pouze veličiny stejn
- Page 157 and 158: oven −1, 0, +1. Můžeme si před
- Page 159 and 160: veličin, vystupujících v Maxwell
- Page 161 and 162: „sklepení odpustit. Obětujeme t
- Page 163 and 164: Tab. 2: Tabulka LTM 163
1. Je-li čtený symbol operandem, pak ulož operand na zásobník.<br />
2. Je-li čtený symbol operátorem, pak vyber ze zásobníku posledních<br />
n operandů (kde n je arita operátoru; např. pro + je n = 2).<br />
Proveď operaci dle operátoru s vybranými operandy a výsledek<br />
ulož na zásobník.<br />
Infixová Aktuální Aktuální Návrat<br />
notace znak procedura do procedury<br />
5+3*2 5 Výraz<br />
5+3*2 5 Term<br />
+3*2 + Faktor Term<br />
+3*2 + Term Výraz<br />
3*2 3 Výraz (+)<br />
3*2 3 Term<br />
*2 * Faktor Term<br />
2 2 Term (*)<br />
Faktor Term (*)<br />
Term (*) Výraz (+)<br />
Výraz (+)<br />
Tab.1: Průběh rekurzivního sestupu<br />
Nepřečtená Aktuální Zásobník Vybírané Operace<br />
část znak symboly<br />
532*+ 5<br />
32*+ 3 5<br />
2*+ 2 35<br />
*+ * 235 23 2 ∗ 3=6<br />
+ + 65 65 6+5=11<br />
11<br />
Tab. 2: Vyhodnocení výrazu s pomocí zásobníku<br />
Pro výraz 5 + 3 ∗ 2 vezměme jeho postfixovou notaci 5 3 2 * + a<br />
vyhodnoťme ho s pomocí zásobníku.<br />
Obsah zásobníku po přečtení slova je roven hodnotě výrazu. Postup<br />
by samozřejmě bylo možno zobecnit na složitější čísla nebo proměnné,<br />
ale vyžadovalo by to složitější struktury zásobníku.<br />
114