| | |
Pascal calculator program
![]() |
•
•
Join Date: Nov 2007
Posts: 44
Reputation:
Solved Threads: 0
Hey guys, I am a new programmer just starting. The assignment my prof gave us has to deal with taking a file (the file is an equation, 5+2-3*2 for example) and calculating the result. The program also has to give appropriate errors when they arise. (missing operators, etc). I am a bit confused on how to do this, any help would be great thanks!
•
•
Join Date: Nov 2007
Posts: 44
Reputation:
Solved Threads: 0
•
•
•
•
The best place to start is to get out a piece of paper and a pencil and figure out how you do it yourself. Once you know how to do it, step by step, you can tell the computer how to do it.
When you have thought it out enough to write some code, post it here and we'll be happy to help further.
I think that is the part your professor is interested in.
A string is an array of characters. So, no matter how you get the equation (reading it from file or from user input) you still have a string:
What procedures and functions and techniques have you learned that can index and split a string? Turn a character digit into an integer?
A string is an array of characters. So, no matter how you get the equation (reading it from file or from user input) you still have a string:
var equation_string = '1+2+3';What procedures and functions and techniques have you learned that can index and split a string? Turn a character digit into an integer?
•
•
Join Date: Nov 2007
Posts: 44
Reputation:
Solved Threads: 0
•
•
•
•
I think that is the part your professor is interested in.
A string is an array of characters. So, no matter how you get the equation (reading it from file or from user input) you still have a string:
var equation_string = '1+2+3';
What procedures and functions and techniques have you learned that can index and split a string? Turn a character digit into an integer?
5 + 3 * 5 -2
51 - 14/5 + 1 *5
Operator precedence must be taken into account as well as the bracketing of expressions. The first equation will be completely evaluated and the final answer determined before the next equation is read and evaluated. "Every time an intermediate result is calculated the corresponding components of that calculation are removed from the array(s) and replaced with the correct answer". This is my first project using arrays, so I will have to get use to it
•
•
Join Date: Nov 2007
Posts: 44
Reputation:
Solved Threads: 0
Program Lesson9_Program(input, output);
Var file1 : Text;
eq1 : String;
eq2 : string;
Begin
Assign(file1,'input.txt');
Reset(file1);
If (IOResult <> 0) then
Begin
Writeln('The file required to be opened is not found!');
Readln;
End Else
Begin
readln(file1, eq1);
Writeln('The first line of the file reads: ',eq1);
readln(file1, eq2);
writeln('The second line of the file reads: ',eq2);
End;
End.
This is basically what I just have so far, it prints out both the equations that are in the file. Now, I need to somehow put those equations into an array I think.
Var file1 : Text;
eq1 : String;
eq2 : string;
Begin
Assign(file1,'input.txt');
Reset(file1);
If (IOResult <> 0) then
Begin
Writeln('The file required to be opened is not found!');
Readln;
End Else
Begin
readln(file1, eq1);
Writeln('The first line of the file reads: ',eq1);
readln(file1, eq2);
writeln('The second line of the file reads: ',eq2);
End;
End.
This is basically what I just have so far, it prints out both the equations that are in the file. Now, I need to somehow put those equations into an array I think.
Last edited by Gotovina7; Nov 16th, 2007 at 10:59 pm.
So, according to your assignment description, you account for operator precedence by evaluating the same expression over and over until there is only a number (or error):
Now, you are supposed to store the expression in an array. So you could have an array of string, where each element is either a number or an operator:
Or you could have an array of some record type that tells you whether it is a number or an operator, say:
This is how I would do it (if forced to use an array), but if it is beyond you just stick to an array of strings. I assume the latter in what follows, but the concepts work either way.
So, even a bracketed expression is easily stuck in an array:
becomes
This makes it easy to find operators. The brackets are special, in that they work on a sub-array. Hence:
Your professor wants you to use an array, alas. You can move stuff around every time, or you can just transform unused parts (which have been "removed") into, say, the empty string, which means just to ignore it. For example, taking:
and transforming it into
can have two affects on your array. Starting with:
you can transform it to:
or
Both ways have caveats you must be aware of. The first means you must shift elements downward. If you are allowed to use dynamic arrays you can get rid of extra elements at the end, otherwise you must set them to ''. The second way requires your code to skip '' when finding elements adjacent to an operator.
Well, that's enough to think about. Consider how you want to make it work and get started. Remember, it is perfectly OK to use functions and procedures to do something. For example, you might have a function to search your array for the operator with the highest precedence and return its index. Another might modify take the array and an index to an operator and do the operation.
Oh yeah, almost forgot. Convert between numbers and strings with strToInt() and intToStr().
Hope this helps.
•
•
•
•
I start with
5 + 3 * 5 -2
The most precedent operator is *, so:
5 + 3 * 5 -2
5 + 15 -2
The remaining operators have equal precedence, so I'll just take them left to right:
5 + 15 -2
20 -2
and
20 -2
18
There are no more operators, so the answer is 18.
'5', '+', '3', '*', '5', '-', '2'Or you could have an array of some record type that tells you whether it is a number or an operator, say:
type tType = (number, add, subtract, multiply, ...);type tElement = record element_type: tType; number: integer end;This is how I would do it (if forced to use an array), but if it is beyond you just stick to an array of strings. I assume the latter in what follows, but the concepts work either way.
So, even a bracketed expression is easily stuck in an array:
5 * (2 + (3 + 1))becomes
'5', '*', '(', '2', '+', '(', '3', '+', '1', ')', ')'This makes it easy to find operators. The brackets are special, in that they work on a sub-array. Hence:
•
•
•
•
5 * (2 + 3)
has the () operator, which means to evaluate a subexpression. We'll do that first:
2 + 3
becomes
5
Now we can stick it back into the original expression and remove the ():
5 * 5
Evaluating further:
25
1 + 2 + 3and transforming it into
3 + 3can have two affects on your array. Starting with:
'1', '+', '2', '+', '3'you can transform it to:
'3', '+', '3' (or '3', '+', '3', '', '')or
'3', '', '', '+', '3'Both ways have caveats you must be aware of. The first means you must shift elements downward. If you are allowed to use dynamic arrays you can get rid of extra elements at the end, otherwise you must set them to ''. The second way requires your code to skip '' when finding elements adjacent to an operator.
Well, that's enough to think about. Consider how you want to make it work and get started. Remember, it is perfectly OK to use functions and procedures to do something. For example, you might have a function to search your array for the operator with the highest precedence and return its index. Another might modify take the array and an index to an operator and do the operation.
Oh yeah, almost forgot. Convert between numbers and strings with strToInt() and intToStr().
Hope this helps.
![]() |
Similar Threads
- C++ Calculator Program (C++)
- Really need help with the interactive Calculator program, or will be dead (C++)
- pascal triangle program (C++)
- starting a calculator program in C (C)
- Java Swing Calculator program not running. It has 0 errors (Java)
- Wierd error messages with calculator program (C++)
- need help with calculator program in C (C)
Other Threads in the Pascal and Delphi Forum
- Previous Thread: RES file creaton under Vista
- Next Thread: Deleting components in D2007
| Thread Tools | Search this Thread |






