» »

[C#] izračun enačbe

[C#] izračun enačbe

zigi ::

imam 9 labelov, v lihe lable uporabnik vnese številke, v sode pa znake.
Recimo: 7 + 10 * 9 + 6 - 10 / 6
Kako to enačbo izračunati?

jeti51 ::

Iz enačbe zgradi drevo... v korenu posameznega (pod)drevesa je operator, njegova dva sinova sta pa operanda. In potem rekurzivno računaš vrednost drevesa.

private double Calculate(TreeRoot) {
double leftValue = Calculate(TreeRoot.LeftSubtree);
double rightValue = Calculate(TreeRoot.RighSubtree);
return Evaluate(leftValue, rightValue, TreeRoot.operation);
}

(Funkcija Evaluate iz podanih dveh vrednosti ter podane operacije izračuna in vrne vrednost tega izraza.)

V tem smislu nekako...

jeti51 ::

Še to, če funkcija Calculate prejme kot argument vozlišče, ki je list drevesa (nima sinov), potem vrneš kar vrednost tega lista, sicer pa poračunaš vrednost poddrevesa, kot je nakazano zgoraj.

zigi ::

Hvala Jeti.

Če prav razumem mora biti v korenu drevesa operator ki veže najšibkeje. Se ti da napisati psevdokodo za zgeneriranje drevesa? :)

Drugače pa se mi tud to zdi obetavno: An Eval Function for C# using JScript.NET (JavaScript)

MaCoFaCo ::

Tisti primer zgoraj, ko dinamično kompajlaš expression, se mi zdi rahlo overkill...
Drugače pa imaš še tukaj eno implementirano rešitev.

Najbolj pa boš odnesu od vsega skupi, če sam implementiraš rešitev po jetijevem receptu.

zigi ::

z drevesi se nisem ubadal :), pač pa sem implementiral kar tisto rešitev, ki je na mojem linku.

Imam pa naslednji problem:
Aplikacija je ASP.NET Web Application. Ko se zažene, se določene stvari inicializirajo. Imam nekaj hastablov, ki se napolnijo. Včasih mi aplikacija normalno dela, včasih pa mi javi napako, da je hastable že napolnjen. Torej nekatere spremenljivke/hashtable ohrani podatke še od prejšnjega zagona aplikacije. A obstaja kakšna koda da bi se ob zagonu aplikacije celoten projekt resetiral, oz. da bi se vse spremenljivke izpraznile?

Javi mi pa to napako: Item has already been added. Key in dictionary: "1" Key being added: "1"
pri kodi: hModri.Add(1,1);
hModri je hashtable.

Tudi če se nekdo od zunaj poveže na mojo stran, se mu pokaže ista napaka. Če pa računalnik ponovno zaženem in se potem kdo poveže, pa aplikacija normalno deluje.

delfy ::

preden napolneš hashtable, jih sprazni, pa je.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Iskalno Drevo

Oddelek: Programiranje
131943 (1509) Ciklamen
»

Predstavitev dvojiškega drevesa z seznamom

Oddelek: Programiranje
141767 (1367) ktka
»

Za programerske teoretike

Oddelek: Programiranje
478534 (5336) Jerry000
»

C# HashSet<T>, HashTable kako deluje iskanje v ozadju? a lahko faila?

Oddelek: Programiranje
121481 (1262) detroit
»

Naloga v C-ju pomoč

Oddelek: Programiranje
112299 (1899) keworkian

Več podobnih tem