I have a problem performing simple arithmetic operations. I need it to perform a
ID: 3641534 • Letter: I
Question
I have a problem performing simple arithmetic operations. I need it to
perform addition, subtraction, multiplication, division, and exponentiation.
The program should read operations from standard input and/or from a file. If it reads from a file then the file will contain all of the operations and data. If the program reads from standard input then the program is interactive. It should be able to do both.
The program is to be called xcalc. It is to be run from the UNIX command line prompt. A sample execution is below.
$calc file l file 2
$calc < file 1
$calc
It will read from the standard input and write to the standard output with the capability of i/o redirection. I also want the program to have the command line option capability to specify an output file
Scale -O outputfilename inputfilenamel
The numbers read are to be unsigned integers and the operations are to be in prefix form. The operations are addition, subtraction, multiplication, division, and exponentiation.
The control d character (the UNIX end of file character) will end the program if it is interactive. The following sample list of operations should help clear up any confusion.
"+11 11"
"-22 11"
"*22 2"
"/22 2"
"e 2 3"
The operation must be the very first character on the input line followed by 1 or more blanks. Any number of blanks can be before or after each operand. No blanks can be embedded into a number. Sample execution and operation follows that illustrate interactive mode
$xcalc
>>+ 11 22
>>11 + 22 =33
>>*22 2
>>22 * 2 = 44
>>
There is one arithmetic operation that can be used to implement all others. Determine which one and use it to implement all of the operations: "+, -, *, /, and e." If you cannot determine which operation is the "one magical all powerful operation" then try using addition "+".
You should check for invalid operations and for division by zero.
This program is to be developed using the principles discussed in class
Each operation should be implemented as a function. See the example below.
int add (int augend, int addend)
{
int sum;
sum = augend + addend;
return sum;
}
If you cannot figure out how to use addition "+" then use the : "+, -, *, /, and e." in a straight forward manner.
int multiply (int multiplicand, int multiplier)
{
int product;
product = multiplicand * multiplier;
return product;
}
Explanation / Answer
class Calc extends JFrame { //================================================================ constants private static final Font BIGGER_FONT = new Font("monspaced", Font.PLAIN, 20); //=================================================================== fields //... Component referenced during execution private JTextField _displayField; // display result / input. //... Variables representing state of the calculator private boolean _startNumber = true; // true: num key next private String _previousOp = "="; // previous operation private CalcLogic _logic = new CalcLogic(); // The internal calculator. //============================================================== method main public static void main(String[] args) { //... Set the Look and Feel to that of system we're running on. try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception unused) { ; // Ignore exception because we can't do anything. Will use default. } //... Create the window. Calc window = new Calc(); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setVisible(true); } //============================================================== constructor public Calc() { //... Set attributes of the display field _displayField = new JTextField("0", 12); _displayField.setHorizontalAlignment(JTextField.RIGHT); _displayField.setFont(BIGGER_FONT); //... Create and set attributes of clear button JButton clearButton = new JButton("Clear"); clearButton.setFont(BIGGER_FONT); clearButton.addActionListener(new ClearListener()); //... Use one listener for all numeric keys. ActionListener numListener = new NumListener(); //... Layout numeric keys in a grid. Generate the buttons // in a loop from the chars in a string. String buttonOrder = "789456123 0 "; JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(5, 3, 2, 2)); for (int i = 0; iRelated Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.