เสร็จแล้วงานเรา 2 polynomial


///////////////////////////////////////////////////////////////////////////////
// This is simple polynomial calculation by sukoom2001@gmail.com //
///////////////////////////////////////////////////////////////////////////////
// Auther : sukoom2001@gmail.com //
// Begin : 22/06/2005 //
// end : 25/06/2005 //
///////////////////////////////////////////////////////////////////////////////
// ** Has few bug I’m lasy to fix it //
///////////////////////////////////////////////////////////////////////////////
#include
#include
#include
typedef struct monomial
{
int degree;
int sumprasit;
struct monomial *next;
}MONOMIAL;
typedef struct equation
{
int num;
MONOMIAL *polynomial;
struct equation *next;
}EQUATION;
int addEquation(EQUATION *eMain,MONOMIAL *polynomial)
{
int i=1;
EQUATION *tmp,*cur;
cur = eMain;
tmp = NULL;
if(cur->polynomial == NULL)
{
cur->polynomial = polynomial;
cur->next = NULL;
cur->num = 1;
return 1;
}
if((tmp=(EQUATION *)malloc(sizeof(EQUATION)))==NULL)
{
printf(“Can’t allocate memory to equation\n”);
return -1;
}
while((cur)->next != NULL)
{
i++;cur = cur->next;
}
cur->next = tmp;
tmp->next = NULL;
tmp->polynomial = polynomial;
tmp->num = i+1;
return i+1;
}
MONOMIAL *callEquation(EQUATION *emain,int num)
{
EQUATION *cur;
cur = emain;
while(cur->num != num)
{
if(cur->next != NULL)
cur = cur->next;
else
{
printf(“Error not have equation \%%d\n”,num);
return NULL;
}
}
return cur->polynomial;
}
int printPolynomial(MONOMIAL *pHead)
{
while(pHead!=NULL)
{
if(pHead->sumprasit != 0)
{
if(pHead->sumprasit != 1)
{
printf(“%d”,pHead->sumprasit);
}
if(pHead->degree != 0)
{
printf(“X”);
if(pHead->degree != 1)
printf(“^%d “,pHead->degree);
}
}
//printf(“%dX^%d “,pHead->sumprasit,pHead->degree);
if(pHead->next != NULL)
printf(“+ “);
pHead = pHead->next;
}
printf(“\n”);
return 1;
}

MONOMIAL *createMonomial(MONOMIAL *pHead,int degree,int sumprasit)
{
MONOMIAL *tmp,*cur,*prev;
if(pHead == NULL) //This is new polynomial
{
if((pHead = (MONOMIAL *)malloc(sizeof(MONOMIAL)))==NULL)
{
printf(“Can’t allocation memory for new polynomial\n”);
return NULL;
}
pHead->degree = degree;
pHead->sumprasit = sumprasit;
pHead->next = NULL;
return pHead;
}
cur = pHead;
prev = NULL;
while(cur != NULL)
{
if(cur->degree == degree)
{
cur->sumprasit = cur->sumprasit + sumprasit;
if(cur->sumprasit == 0)
{
if(prev != NULL)
prev->next = cur->next;
else
pHead = cur->next;
free(cur);
}
return pHead;
}
if(cur->degree degree = degree;
tmp->next = cur;
tmp->sumprasit= sumprasit;
if(prev != NULL)prev->next = tmp;
else pHead = tmp;
return pHead;
}
prev = cur;
cur = cur->next;
}
if((tmp = (MONOMIAL *)malloc(sizeof(MONOMIAL)))==NULL)
{
printf(“Can’t allocation memory for monomial\n”);
return NULL;
}
tmp->degree = degree;
tmp->next = NULL;
tmp->sumprasit= sumprasit;
if(prev != NULL)prev->next = tmp;
return pHead;
}
MONOMIAL *addPolynomial(MONOMIAL *a,MONOMIAL *b)
{
MONOMIAL *tmp;
tmp = NULL;
while(a != NULL)
{
tmp = createMonomial(tmp,a->degree,a->sumprasit);
a = a->next;
}
while(b != NULL)
{
tmp = createMonomial(tmp,b->degree,b->sumprasit);
b = b->next;
}
return tmp;
}
MONOMIAL *multiplePolynomial(MONOMIAL *a,MONOMIAL *b)
{
MONOMIAL *tmp,*cur;
tmp = NULL;
cur = b;
while(a != NULL)
{
while(cur != NULL)
{
tmp = createMonomial(tmp,(a->degree+cur->degree),((a->sumprasit) * (cur->sumprasit)));
cur = cur->next;
}
cur = b;
a = a->next;
}
return tmp;
}
int solvePolynomial(MONOMIAL *a,int b)
{
double tmp=0;
double tmp2=1;
while(a != NULL)
{
for(int i=0;i<a->degree;i++)
tmp2*=b;
tmp = tmp + tmp2 * (a->sumprasit);
a = a->next;
}
printf(" = %f\n",tmp);
}
MONOMIAL *minutPolynomial(MONOMIAL *a,MONOMIAL *b)
{
MONOMIAL *tmp;
tmp = NULL;
while(a != NULL)
{
tmp = createMonomial(tmp,a->degree,a->sumprasit);
a = a->next;
}
while(b != NULL)
{
tmp = createMonomial(tmp,b->degree,(-1) * (b->sumprasit));
b = b->next;
}
return tmp;
}
MONOMIAL *recogCommand(EQUATION *eMain,char *a)
{
int i=0,aa=0,bb=0;
char token;
if(*a != '%')
{
printf("Syntax Error");
return NULL;
}
while((*(a+i)='9'))
{
if(*(a+i)=='')break;
i++;
}
while((*(a+i)>='0')&&(*(a+i)<='9'))
{
if(*(a+i)=='')break;
aa = aa*10 + (*(a+i)-'0');
i++;
}
while((*(a+i)='9'))
{
if(*(a+i)=='')
{
return (callEquation(eMain,aa));
}
if(*(a+i)=='+')token = '+';
if(*(a+i)=='-')token = '-';
if(*(a+i)=='*')token = '*';
if(*(a+i)=='=')token = '=';
i++;
}
while((*(a+i)>='0')&&(*(a+i)<='9'))
{
if(*(a+i)=='')break;
bb = bb*10 + (*(a+i)-'0');
i++;
}
if(token == '+')
return( addPolynomial(callEquation(eMain,aa),callEquation(eMain,bb)));
if(token == '-')
return( minutPolynomial(callEquation(eMain,aa),callEquation(eMain,bb)));
if(token == '*')
return(multiplePolynomial(callEquation(eMain,aa),callEquation(eMain,bb)));
if(token == '=')
{
solvePolynomial(callEquation(eMain,aa),bb);
return(callEquation(eMain,aa));
}
return NULL;

}
MONOMIAL *inputPolynomial(char *a)
{
int degree=0;
int sumprasit=0,tmp=1;
MONOMIAL *turn;
int status = 1;
int i=0;
turn = NULL;
while(*(a+i)!=”)
{
while((*(a+i)’9′))
{
if(*(a+i)==”)break;
if(*(a+i)==’-')status *= -1;
i++;
}
while((*(a+i)>=’0′)&&(*(a+i)<=’9′))
{
if(*(a+i)==”)break;
sumprasit = sumprasit*10 + (*(a+i)-’0′);
i++;
}
if(sumprasit == 0)sumprasit = 1;
while((*(a+i)’9′))
{
if(*(a+i)==”)break;
if(*(a+i)==’+')break;
if(*(a+i)==’-')break;
if(*(a+i)==’ ‘)break;
i++;
}
if((*(a+i)==’+')&&((*(a+i-1)==’x')||(*(a+i-1)==’X')))
{
degree = 1;
i–;
}
else if((*(a+i)==’-')&&((*(a+i-1)==’x')||(*(a+i-1)==’X')))
{
degree = 1;
i–;
}
else if((*(a+i)==”)&&((*(a+i-1)==’x')||(*(a+i-1)==’X')))
{
degree = 1;
}
else
{
while((*(a+i)>=’0′)&&(*(a+i)next == NULL;
eMain->num = 1;
eMain->polynomial = NULL;
char num1[256];
a = NULL;
printf(“############# WELCOME TO SIMPLE POLYNOMIAL CALCULATE ###########\n”);
printf(“##################################################################\n”);
printf(“############# please h enter to help ###########\n”);
while(1)
{
printf(“> “);
scanf(“%s”,num1);
if(num1[0]==’h')
{
printHelp();
continue;
}
if(num1[0]==’%')
{
if((a = recogCommand(eMain,num1))==NULL)
{
printf(“Syntax error\n”);
continue;
}
}
else if(num1[0]==’q')
return 0;
else if((a = inputPolynomial(num1))==NULL)
{
printf(“error to createMonomial\n”);
}
err = addEquation(eMain,a);
if(err == -1)
{
printf(“ERROR to create new equation\n”);
return 0;
}
else
{
printf(“\%%%d = “,err);
}
printPolynomial(callEquation(eMain,err));
}
return 0;
}

One thought on “เสร็จแล้วงานเรา 2 polynomial

  1. Pingback: รวบรวมสารบัญเรื่องที่เคยเขียนทั้งหมด | My com & My life

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Connecting to %s