Mon Jul 20, 2009 10:52 pm
//program needs to be able to solve equations like 3 / ( 4 * 5 ) =
//note: when imputing equation, separate each character with a space and end it with a “=â€
//when I run the program, I get a runtime error – not sure why
#include <iostream>
#include <string>
using namespace std;
struct node
{
node * prev;
int value;
char op;
char type;
node * next;
};
void printlist (node *h);
void mult (node * right, node * left);
void main ( )
{
char str[15];
node * dll, *head, *tail, *rp, *lp;
cout << "Enter equation: " << endl;
cin >> str;
dll = new node;
head = dll;
tail = dll;
head ->prev = 0;
head -> op = '(';
head -> type = 'o';
head -> value = -1;
while (str[0] != '=') //check for end of expression, doesn't include = sign. Loop will get all imput and put it into a doubly linked list.
{
if (isdigit(str[0]))
{
tail->next = new node;
tail->next->prev = tail;
tail = tail->next;
tail->value= atoi(str);
tail->type='n';
tail->op='$';
}
else
{
tail->next = new node;
tail->next->prev = tail;
tail = tail->next;
tail ->op = str[0];
tail->type='o';
tail->value=-1;
}
cin >> str;
}
tail->next = new node;
tail->next->prev = tail;
tail = tail->next;
tail->next=0;
tail->op=')';
tail->type='o';
tail->value=-1;
printlist (dll);
//while (dll->op == '(')
//{
rp = head;
while (rp->op != ')')
rp = rp -> next;
lp = rp;
while (lp->op != '(')
lp = lp -> prev;
cout << "lp: " << lp << " rp: " << rp;
mult (rp, lp);
printlist (dll);
//}
system("pause");
}
//Following function used for testing purposes
void printlist (node *h)
{
while ( h != 0)
{
cout << " prev: " << h->prev << " addr: " << h <<" value: " << h->value << " op: " << h->op << " type: " << h->type<< " address of next node: " << h->next << endl;
h=h->next;
}
cout << endl;
}
void mult (node * right, node * left)
{
node * temp;
temp = left;
cout <<endl<< "Left: " << left << " Right: " << right << " Temp: " << temp << " Temp->op: " << temp->op;
system("pause");
while (temp != right)
{
while ((temp->op != '*') || (temp->op != '/') )
temp = temp ->next;
if (temp -> op == '*')
{
temp->value = temp->prev->value * temp->next->value; //computes
temp->prev->prev->next= temp->next->next; //deletes extra numbers
}
if (temp -> op == '/')
{
temp->value = temp->prev->value * temp->next->value;
temp=temp->prev->prev->next;//not correct?
temp=temp->next->next->prev;//not correct?
}
}
return;
}
Wed Jul 22, 2009 5:35 pm
Codemiles.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon.com
Powered by phpBB © phpBB Group.