hi guys below are the code for user to key in the epression like x^3+9x+8, i am only able to do + n - sign so i am wondering how can i add on to do expression like x^7*9x+9 or even (5x+3)(9/78+9)???? I really need help on this. Thank you
#include "expression.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
express chkterm(char*,int,int);
myexp createExpression()
{
myexp exp;
/*allocate memory*/
exp=(myexp)malloc(sizeof(struct expressions));
if(exp!=NULL)
{
exp->numberOfTerms=0; /*set inital terms to zero*/
return exp; /*return pointer*/
}
else
printf("Out of range!!!\n");
return NULL;
}
void string2Expression(char* inString,myexp* inExp)
{
char* tempString;
int length;
int i=0;
int j=0;
int sign=0;
tempString=(char*)calloc(1,sizeof(char));
length=strlen(inString);
/*determine the sign*/
if(inString[0]=='+')
sign = 1;
else
sign = 0;
for(i=0;i<length;i++)
{
/*checl for the position of the string*/
if(inString[i]!='+'&&inString[i]!='-'&&i!=length-1)
{
tempString = (char*)realloc(tempString,sizeof(char)*j+1);
tempString[j]=inString[i];
j++;
continue;
}
else
{
/*to add the last value before the end of the string*/
if(i==length-1)
{
tempString = (char*)realloc(tempString,sizeof(char)*j+1);
tempString[j]=inString[i];
j++;
}
if(j != 0)
{
/*save the term into expression format*/
if((*inExp)->numberOfTerms == 0)
(*inExp)->exp = (express*)calloc(3,sizeof(express));
else
(*inExp)->exp = (express*)realloc((*inExp)->exp,sizeof(express)*((*inExp)->numberOfTerms+1));
(*inExp)->exp[(*inExp)->numberOfTerms] = chkterm(tempString,sign,j);
(*inExp)->numberOfTerms++;
if(inString[i] == '+')
sign = 1;
else
sign = 0;
}
j = 0;
tempString = (char*)realloc(tempString,sizeof(char)*0);
}
}
}
/*function to handle term*/
express chkterm(char* inTerm,int inSign, int length)
{
char* tempString;
express part;
int xFlag=0,powerFlag=0;
int i,j=0;
part = (express)malloc(sizeof(struct terms));
part->KnowX = 0;
part->positive = inSign;
part->isX = 0;
part->x_power = 1;
part->x_times = 1;
part->x_value = 0;
tempString = (char*)calloc(1,sizeof(char));
/*function to check if x and power were given*/
for(i=0; i < length; i++)
{
if(inTerm[i] != 'x' && inTerm[i] != '^')
{
tempString = (char*)realloc(tempString,sizeof(char)*j+1);
tempString[j] = inTerm[i];
j++;
if(i == length-1 && !xFlag && !powerFlag)
{
part->x_value = atof(tempString);
part->KnowX = 1;
}
continue;
}
else
{
if(inTerm[i] == 'x' && strlen(tempString) > 0)
{
part->x_times = atof(tempString);
xFlag = 1;
}
else if(inTerm[i] == 'x')
xFlag = 1;
if(inTerm[i] == '^')
{
powerFlag = 1;
if(!xFlag)
part->x_value = atof(tempString);
}
j = 0;
tempString = (char*)realloc(tempString,sizeof(char)*0);
}
}
if(xFlag)
{
part->isX = 1;
part->KnowX = 0;
}
if(powerFlag)
part->x_power = atof(tempString);
if(inSign)
part->positive = 1;
else
part->positive = 0;
return part;
}
}
}