Infix Expressions VS Postfix Expressions, og hvordan man opbygger en bedre JavaScript-regnemaskine

Hvis du vil gøre din Simple Calculator meget smartere, er dette indlæg noget for dig.

Du spørger måske: "Hvad er der galt med min enkle lommeregner." Nå, det kan muligvis udføre alle operationer korrekt, men den rækkefølge, som det gør dem, er sandsynligvis forkert.

Den enkle regnemaskine indeholder kun fire operationer: addition, subtraktion, division og multiplikation. Mange af os kunne have studeret i gymnasiet om operatørernes forrang: division og multiplikation har samme prioritet og har højere prioritet end addition og subtraktion, som har samme prioritet.

En hurtig oversigt over operatørens forrang kan findes her: //www.math.utah.edu/online/1010/precedence/.

Årsagen til, at jeg understreger operatørens forrang, er, at en simpel lommeregner udfører de fleste beregninger forkert. For eksempel skal 1 + 2x3 være lig med 7 ifølge en normal lommeregner, men den enkle lommeregner giver et resultat på 9.

Årsagen til, at simpel lommeregner gør det hele forkert, er, at den bare multiplicerer de to operander med operatøren imellem og producerer resultatet.

Vi kan bare ikke bebrejde den enkle regnemaskine. Det var trods alt meningen at være simpelt. Så nu begynder du måske at tænke på, hvordan du omorganiserer operatørerne for at få det korrekte resultat. Ja, du er på rette vej. Til det har vi brug for at vide om to yderligere begreber inden for datalogi: Infix-udtryk og Postfix-udtryk.

I enkle ord er de aritmetiske udtryk, vi forstår, Infix-udtryk, og det aritmetiske udtryk, som computeren forstår, er Postfix-udtryk.

Både infix- og postfix-udtryk skaber de samme resultater. Det er bare mennesker er vant til at løse infix-udtryk, og computere er vant til at løse postfix-udtryk.

Et andet nøglefunktion i postfix-udtrykket er, at det indeholder operatorer, der efterfølger operanderne i henhold til forrang, hvilket gør det let for computeren at evaluere dem ved hjælp af stakke og producere det korrekte resultat.

Nu skal du overveje, hvordan du konverterer det infix-udtryk, som din bruger har indtastet, til et postfix-udtryk. Der er en algoritme, der konverterer et infix-udtryk til et postfix-udtryk, der kan findes her .

Sådan ser denne proces ud:

Postfix-udtrykket skal evalueres af en algoritme, som kan findes her . Det svarer til evalueringen foretaget af en simpel regnemaskine, bortset fra at operatørerne efterfølger operanderne i postfix-udtryk.

Til sidst er det primære motiv ved at konvertere et infix-udtryk til et postfix-udtryk at bevare operatørenes forrang, mens computeren evaluerer udtrykket.

Tjek min fuldt funktionelle lommeregner, der indeholder disse principper her .