./hou 'a calculator expression -- see the C Code for details'
./hou 11/26+222/31 ./hou 'log((21701-19937)-(23209-21701))/log(2)' ./hou 'sin(1.5708)+0.04321+log(sqrt(exp(1*1*1)))+(1+2*3)-0.4-0.6+(4+6)*(2-1+2*3)-tan(0.785398)+2*10/3*6*sqrt(16/2/2)*10+10000-1000'
This self-documenting scientific calculator compiles clean with no warnings under the most strict pedantic mode of gcc and clang.
The first example, along with the correct result appears in the source code. What does it mean?
The calculator obeys the precendence rules and allows parenthesis,
./hou '1+2*3' ./hou '(1+2)*3'
What exactly does the text formatting do?
What does this evaluate to in C?
Comments would almost be redundant. :-}
Not just fancy formatted comment removed by the C Pre-processor
The code does not contain some simple string-encoded lookup table for calculator operations.
The example input and output in the C code is significant. Can you find out why?
The button layout in the C code is significant … not just a nice looking layout.
The parser is functionally equivalent to a normal arithmetic parser for all valid inputs. For another fun challenge: try to determine how it parses the command line argument.
This program is designed to be self-documenting. It doesn’t just provide an example command line. It also provides the expected output and illustrates all supported functionality using embedded ASCII art.
The parser parses function names, substraction, and division as single-letter unary operators. A bitmask encoded hash table is used to check no-ops/digits and another hash function maps the ASCII to a function ordinal, which is then executed by the button panel.
Both hash functions are found using a separate search program. Another program is used to find a way to format one hash function as example input such that it produces something resembling the bitmask hash table as part of its output.
© Copyright 1984-2012,
Leo Broukhis, Simon Cooper, Landon Curt Noll
- All rights reserved