RPN Scripts
RPN Documentation
Submit Script
Conversion
Conversions
Convert
Euro
Euro_Calculator
Soundex
Engineering
Feet_&_Inch
Units
Water
Entertainment
Master_Mind
Sticks!
Finance
Annuity
Euro_Calculator
TVM_Financial_Functions
Math
3D_Vectors_v1.2
Base
Base_Conversions
Complex_Arithmetic
Complex_Math
Discrete_Math
EBBases
Fractions
Fractions
Least
Logs_&_Powers
Misc
Regressions
Scientific
Scientific_Functions
Scientific_Programmable
Simple_Complex_Math
Standard_Normal_Distribution
Trig
Misc
Health
Husband's_Calculator
Physics
Angle_of_View
Depth_of_Field
Physics_Functions
Time
Clock
Julian
Multiple_Timer
Stop5Watch
Stopwatch
Timer
Utility
Board_Foot_Calculator
Calendar_Functions
Checkbook_II
MiniG
Stack_Handling_and_Saving
WindChill
| |
Indent(30, [[
Husband's Calculator
summary
 |
Two suggestions for infix calculators, a simple and an advanced one
|
instructions
 |
Infix calculators
Two suggestions for infix calculators.
There is not a lot to say about them. Infix notation is silly and contra-intuitive, but programming is fun. Therefore I made them.
The simple one behaves like your husband's average 2$ calculator, evaluating expressions without consideration to operator hierarchies, etc. The enter key corresponds to the '=' key.
The advanced one uses an operator hierarchy when evaluating expressions. It maintains two stacks: The numbers in input expressions are put on the RPN stack. The operators (and parentheses) are put on a stack consisting of the RPN variables (i.e. xa through xy, xz is used as a stack index).
The operator hierarchy is: P > *,/ > +,-. This means that
3 + 3 * 2 = 9 (and not 8) 4 + 3 * 2 ^ 2 = 16 (and not 196, ^ meaning power)
An input string like 3 + 3 is not evaluated before enter is pressed or an additional operator at the same or lower level in the heirarchy is typed in. Try it, and you'll see what I mean.
It features parentheses too. You can have about 12 open left parentheses in your expression before the application gets dizzy. Parentheses syntax and some operator syntax is checked.
Warning: The advanced calculator deletes the RPN stack at the beginning of each calculation. So do not start the function set with an RPN stack you want to keep.
If the advanced calculator malfunctions (I do not know why it should, it is pretty robust, but anyway...) you may try the reset button. It empties both stacks. (Press "infix", then "reset".)
|
code
 |
RPN.2.a \ Infix simple
[r]xac(/:*:-:+:P);
[s]UhUeh1>(Cr);
{b}Vv4=0(Cs0Xa)
v#'10'=0(Cs1Xa)
v#'16'=0(Cs2Xa)
v#'22'=0(Cs3Xa)
v#'11'=0(Cs4Xa)
v#'12'=0(Cs)Ud;
"Infix"
"Infix"D'Square calculator|Ok|'d1;
RPN.2.z \ Infix advanced
{o}0Xz;
[p]c(0:1:1:2:2);
[r]c(P:/:*:-:+);
[u]xz1+XzxzX@;
[o]xzx@xz1-Xz;
[t]xz(xzx@:1n);
[l]xz0V{Ct0<Ct4>|(B:v1+Vxz1-Xz)}Xzv;
[k]xz0V{Ct0<(B:Co8<(v1+V)}Xzv;
[e]{CtCpCoVCtCpvCu<!Cl1>&(CoVCoCrvCu:B)};
[E]Ce{Cl(CoCr:B)};
[f]CuUeUhCkh1->(3Cm.)Ce;
[m]c(D'Right parenthesis excpected!|Ok|':D'Misplaced parenthesis!|Ok|':
D'No matching left parenthesis!|Ok|':D'Misplaced operator!|Ok|')CcUd;
[M]D'Square calculator|?|Reset|Ok|'c(D'Operator hierarchy: P>*/>+-
\and parentheses!|Ok|'d1:Cc:);
[a]c(0:4:5:#'10':#'11':#'12':#'16':#'17':#'21':#'22':#'23':44P);
[b]V0Xz{xzCag1v=0(d10B:v>(1B)xz1+Xz}0Xz;
[c]hV{_vd1}0Xz;
{b}Vh(xz!(vCb(Cc)))
v4=0(1Cf:
v#'10'=0(2Cf:
v#'16'=0(3Cf:
v#'22'=0(4Cf:
v#'11'=0(0Cf:
v#'12'=0(UeUh
xzCk-(0Cm.)hCk=0(3Cm.)
xz(CE)))))))Ud;
"Infix"
"("hCk=0(8Cu:1Cm);
"Infix"CM;
")"hCk=0(1Cm.)xzCk>!(2Cm.)CECod1;
|
]])
|