Submit | All submissions | Best solutions | Back to list |
IITKESO207A_2P - Calculator |
The input is an arithmetic expression in infix notation, for example, 24 * (3 + 5)/7%3. The problem is to write a program that reads the expression given over multiple lines, parses it, evaluates it and gives the output value as a floating point integer or prints the string “Malformed expression” if the input is malformed. The numbers in the expression are integers but the ouput can be floating point. The operators come from the set {+, −, *, /, %, (, )}. The operators act as per their usual definitions. We assume the usual precedence among operators, that is, from lowest to highest, {+, −}, then, *, followed by {/, %} and parenthesis, where, + and binary − are at the same level of precedence and have left to right associativity, so do {/, %}.
Note
The three problems given in the assignment have been merged. 75% of the test cases will check if your code works for problem 1 and 2 and 25% of the test cases will check for problem 3. The result that you will get will be between 0 and 100, denoting the number of testcases that your code passed. We will consider your maximum score while grading.
Update 1: (7 Sep, 2017)
For negative numbers, the '-' and the number will be in separate lines. It is your job to figure out whether it is a unary minus or binary.
Update 2: (13 Sep, 2017 3:15PM)
Earlier you were supposed to print string "Malformed expression" without new line at the end. Sorry, for not being explicit about this fact. But from now onwards, new line at the end of "Malformed expression" won't matter.
Input
The first line contains 'n', the number of tokens in the expression. 'n' lines follow each containing a either a number or an operator.
Output
This should be a single real number. Errors less than 10^-2 will be ignored.
Constraints
1<= n <= 20
Inputs will be between -1000 to 1000.
Examples
Input 1: 4 4 - - 3 Output 1: 7
Input 2: 7 3 / ( 2 + 1 ) output 2: 1
Input 3: 3 1 + ( Output 3: Malformed expression
Added by: | Programming Club, IITK |
Date: | 2017-09-07 |
Time limit: | 1s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | All |
hide comments
|
|||||||
2017-09-14 14:54:02
is -(-2) a valid expression |
|||||||
2017-09-14 10:27:58
is 4+(2) a valid expression? |
|||||||
2017-09-13 17:50:47 Programming Club, IITK
@hitesh1001: Unary minus's precedence does not affect the result here. (-4)%5 == -4 . Here you should consider value of a%b that satisfies the equation (a/b)*b + a%b == a . Do the math and you will know why the answer is -4. This is according to rules followed by C/C++. It may differ from language to language. But, we would like you to stick to this rule. |
|||||||
2017-09-13 13:54:12
Shouldn't -4%5 be 1 considering precedence of unary - operator over % operator? Last edit: 2017-09-13 15:17:44 |
|||||||
2017-09-13 11:43:50 Programming Club, IITK
@bhavy: There won't be any cases like that. You can safely ignore them. @shshnk: All operators associate left to right 6/7%4 == 0.85714 @amanyu: -4 @ashutoshs25: Doesn't matter @akshar: No @singhdnj: It is valid expression. You can take modulo with real values. |
|||||||
2017-09-13 00:50:42 KAUSHAL AGRAWAL
@bhavy and your second question? |
|||||||
2017-09-12 23:23:51
@kaushal Actually, there are no test cases related to unary +. I got 100 without considering unary +. |
|||||||
2017-09-12 11:37:43 KAUSHAL AGRAWAL
@bhavy did you get answers to your questions? I am looking for the same. |
|||||||
2017-09-11 18:23:18
do I need to print "Malformed expression " if a case comes up where I have to take modulus of an integer with respect to a floating point number eg -5%(4.3) |
|||||||
2017-09-11 00:22:01
Can we expect unary + operator in some test case? Edit: nvm, i got correct without considering unary + Last edit: 2017-09-11 09:58:47 |