Please support our C advertiser: Programming Forums
Views: 1425 | Replies: 4
![]() |
•
•
Join Date: Jan 2006
Location: Israel
Posts: 37
Reputation:
Rep Power: 3
Solved Threads: 0
Hello to you all ,
I am required to write a program which gets a Math Expression (without checking it is good) and put in Stack only the Brackets .
Implementation of Stack is One-Way Linked List Only.
Examples for Good/Bad Expressions :
(a*{b+c}-4/x +[e-5]) - GOOD
(5+} - BAD
(5+{6*)-2} - BAD
(5+z - BAD
I have build up a Mechanism which checks for each entered char (other than Enter Key and also using closing brackets such as ) or ] or } at the beginning of Expression) what type of bracket it is and pushes it into a stack (we must use LIFO technique for check legal Expression).
I thought of 2 cases :
first case : for each open bracket there is a closing one so i check top of stack to bottom of stack and carry on till i reach to middle .
second case : what happens if i have this sequence - ()[]{} - meaning i need to check top against the next , and so on (top of stack to bottom of stack will not help in this case)
I kinda stuck on Algorithm Think Phase :-)
Code Added . Any Ideas ?
Thank you , Yotam , Israel
I am required to write a program which gets a Math Expression (without checking it is good) and put in Stack only the Brackets .
Implementation of Stack is One-Way Linked List Only.
Examples for Good/Bad Expressions :
(a*{b+c}-4/x +[e-5]) - GOOD
(5+} - BAD
(5+{6*)-2} - BAD
(5+z - BAD
I have build up a Mechanism which checks for each entered char (other than Enter Key and also using closing brackets such as ) or ] or } at the beginning of Expression) what type of bracket it is and pushes it into a stack (we must use LIFO technique for check legal Expression).
I thought of 2 cases :
first case : for each open bracket there is a closing one so i check top of stack to bottom of stack and carry on till i reach to middle .
second case : what happens if i have this sequence - ()[]{} - meaning i need to check top against the next , and so on (top of stack to bottom of stack will not help in this case)
I kinda stuck on Algorithm Think Phase :-)
Code Added . Any Ideas ?
Thank you , Yotam , Israel
•
•
Join Date: Apr 2006
Posts: 26
Reputation:
Rep Power: 3
Solved Threads: 0
The logic should be like this :
while ( input != 13 )
{
if input is '(' or '{' or '[' or ')' or '}' or ']'
{
if input is '(' or '{' or '['
push it into the stack.
else if input is ')' or '}' or ']'
{
if stack is empty
report error.
pop cell from stack
if cell "matches input"
we are ok.
else if cell dont "matches input" or stack is empty
report error.
}
}
}
if the stack is not empty
report error.Also I would suggest replacing your input function
with fgets.
A nice touch would be to add to the switch statment
a default case, checking if it is a number of math experssion.
Don't ever write code like this :
free(top);
top=top->next;It will probaly work, but its wrong, and
also your grade will be like it.
•
•
Join Date: Jan 2006
Location: Israel
Posts: 37
Reputation:
Rep Power: 3
Solved Threads: 0
•
•
•
•
Originally Posted by dude543
The logic should be like this : while ( input != 13 ) { if input is '(' or '{' or '[' or ')' or '}' or ']' { if input is '(' or '{' or '[' push it into the stack. else if input is ')' or '}' or ']' { if stack is empty report error. pop cell from stack if cell "matches input" we are ok. else if cell dont "matches input" or stack is empty report error. } } } if the stack is not empty report error.
Also I would suggest replacing your input function
with fgets.
A nice touch would be to add to the switch statment
a default case, checking if it is a number of math experssion.
Don't ever write code like this :
Once you free(p), dont access it !!!!!!!!!!free(top); top=top->next;
It will probaly work, but its wrong, and
also your grade will be like it.
I see your point :-)
i build something , but for some reason , it will state all Expression are OK and i tried to Debug it , and i cant figure what went wrong... Code Added . The check is though ASCII code :
'(' - ')' = 1
'['- ']' = 2
'{' - '}' = 2
Thanx
•
•
Join Date: Apr 2006
Posts: 26
Reputation:
Rep Power: 3
Solved Threads: 0
I already told you. Dont do this :
Its very wrong !!!!!
And still you do it again !!!!
:mad:
First thing better change input by getche to fgets.
Do you think that this is nessary ???
if ( (temp[i]==')') || (temp[i]==']') || (temp[i]=='}') )
{ printf("\n Bad Expression! Run it Again... \n");
add to
break statemnts!
If the stack is not empty thats wrong
You are ignoring the case which pop returns zero.
last thing
'(' - ')' == -1
free(top);
top=top->next;And still you do it again !!!!
:mad:
First thing better change input by getche to fgets.
Do you think that this is nessary ???
if ( (temp[i]==')') || (temp[i]==']') || (temp[i]=='}') )
{ printf("\n Bad Expression! Run it Again... \n");
add to
case ')': { flag=check(temp[i]); }
case ']': { flag=check(temp[i]); }
case '}': { flag=check(temp[i]); }If the stack is not empty thats wrong
if ( top )
{
printf("Items on the stack\n");
flag = 0;
}You are ignoring the case which pop returns zero.
last thing
'(' - ')' == -1
•
•
Join Date: Jan 2006
Location: Israel
Posts: 37
Reputation:
Rep Power: 3
Solved Threads: 0
•
•
•
•
Originally Posted by dude543
I already told you. Dont do this :
Its very wrong !!!!!free(top); top=top->next;
And still you do it again !!!!
:mad:
First thing better change input by getche to fgets.
Do you think that this is nessary ???
if ( (temp[i]==')') || (temp[i]==']') || (temp[i]=='}') )
{ printf("\n Bad Expression! Run it Again... \n");
add to
break statemnts!case ')': { flag=check(temp[i]); } case ']': { flag=check(temp[i]); } case '}': { flag=check(temp[i]); }
If the stack is not empty thats wrong
if ( top ) { printf("Items on the stack\n"); flag = 0; }
You are ignoring the case which pop returns zero.
last thing
'(' - ')' == -1
A few things :
1. how do you Take off the Top each time if not in that way?
2. Added Break Statements , still causes problems in Expression check ,
each EXP check gets OK ....
3. the If sentence - no Math Exp. starts with backwoards brackets. :-)
4. should i pass into the POP function a Pointer to FLAG ?
Thanx
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)





Linear Mode