Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Analýza matematické funkce

Ahoj,

potřeboval bych od Vás poradit.

Řeším program, který bude vykreslovat matematickou funkci o jedné proměnné.

Nevím si rady s tím, jak analyzovat vstupní výraz co se týče závorek.

Např. vstupní fuknce bude f(x) = (sin(1+x)/(2+3))

Jak bych měl programově poznat, že je to něco jako

((a)/(b)), kdy a = sin(1+x), b = (2+3).

Jak by jste postupovali? Díky za diskuzi.

Předmět Autor Datum
urobis si v pamati nejaky strom vyrazu, googli strom vyrazu. Alebo vzdy jak najdes lavu zatvorku tak…
MM.. 22.11.2013 16:08
MM..
Ano, stromem to mám v plánu taky řešit, ale jak mám najít koncovou závorku. Např: (pokud je číslama…
MašinkaTomáš 22.11.2013 16:09
MašinkaTomáš
if(znak=='(') level++; else if(znak==')') level--; ak je level==0 tak mas co si chcel
MM.. 22.11.2013 16:11
MM..
Aha, tak jednoduché. Děkuji za pomoc :puff:
MašinkaTomáš 22.11.2013 16:15
MašinkaTomáš
To je zakladny princip. Ja by som zacal za zatvrkou s levelom 0, a potom ked najdem pravu zatvorku a…
MM.. 22.11.2013 17:26
MM..
Nevím jak je to v praxi časté, ale nedávno nás učili, že existuje postfixová notace výrazu a ta je ú…
Niko Bellic 22.11.2013 17:31
Niko Bellic
Díky za info, zrovna o tom čtu, pokud si chcete také počíst, nějaké informace by měli být tady: ODKA…
MašinkaTomáš 22.11.2013 17:42
MašinkaTomáš
Po tom, čo si napíšeš tokenizér, si pozri algoritmus shunting-yard, pomocou ktorého sa dá vytvoriť a… poslední
los 23.11.2013 19:56
los
neviem zhlavy ani ja vyrazy som nikdy neparsoval, ale myslim ze tieto veci su rozobrate v kdejakych…
MM.. 22.11.2013 17:43
MM..

urobis si v pamati nejaky strom vyrazu, googli strom vyrazu. Alebo vzdy jak najdes lavu zatvorku tak najdes aj konciacu zatvorku a rekurziou zavolas vyhodnocovaciu fciu pre podvyraz. Ale pozor na prednost u znamienok (to sice nema nic so zatvorkami, ale musis to tam tiez implementovat, v rieseni (pod)vyrazu)

Po tom, čo si napíšeš tokenizér, si pozri algoritmus shunting-yard, pomocou ktorého sa dá vytvoriť aj tá reverzná poľská notácia. V podstate ide o to, že si vytvoríš 2 zásobníky. Jeden je pre operandy a druhý pre operátory. Operátor podľa priority operátorov buď rovno vyhodnotíš nad zásobníkom operandov (v tvojom prípade vytvoríš uzol abstraktného syntaktického stromu), alebo len odložíš na zásobník operátorov. Plus špeciálne ošetríš prioritu zátvoriek a máš to.

Zpět do poradny Odpovědět na původní otázku Nahoru