#include<iostream> #include<time.h> using namespace std; long tinh(char *s) { char a[100],dau[100],b[100],e[100]; int i,d=0; for(i=0;i<strlen(s);i++) if(s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || s[i]=='(' || s[i]==')') dau[d++]=s[i]; if(d==0) return atol(s); for(i=0;i<d;i++) { if(dau[i]!='*' && dau[i]!='/') { int m,j; char c; for(m=0;m<strlen(s);m++) { if(s[m]=='+' || s[m]=='-' || s[m]=='('){c=s[m]; break;} a[m]=s[m]; } a[m]='\0'; if(c=='+' || c=='-') { int dd=0; for(j=m+1;j<strlen(s);j++) b[dd++]=s[j]; b[dd]='\0'; if(c=='+') return tinh(a)+tinh(b); else {//doi dau chuoi b j=0; while(j<strlen(b)) { while(b[j]!='(' && j<strlen(b)) { if(b[j]=='+') b[j]='-'; else if(b[j]=='-') b[j]='+'; j++; } j++;dd=1; while(j<strlen(b)) { if(b[j]=='(') dd++; if(b[j]==')') dd--; if(dd==0) break; j++; } j++; } return tinh(a)-tinh(b); } } else if(c=='(') { char c1,c2,c3,a1[100],a2[100],a3[100],a4[100]; int p1,p2,p3,p4,dem=1; p1=m;p2=p1+1; while(p2<strlen(s)) { if(s[p2]=='(') dem++; else if(s[p2]==')') dem--; if(dem==0) break; p2++; } p4=0; for(p3=p1+1;p3<p2;p3++) a2[p4++]=s[p3]; a2[p4]='\0'; p1--; c1=s[p1]; for(p3=0;p3<p1;p3++) a1[p3]=s[p3]; a1[p3]='\0'; c2=s[p2+1]; if(c2=='*' || c2=='/') { p2+=2; p4=0; loop:; while(p2<strlen(s) && s[p2]!='-' && s[p2]!='+' && s[p2]!='(') a3[p4++]=s[p2++]; if(s[p2]=='(') { p3=p2+1; dem=1; while(p3<strlen(s)) { if(s[p3]=='(') dem++; else if(s[p3]==')') dem--; if(dem==0) break; p3++; } for(p1=p2;p1<=p3;p1++) a3[p4++]=s[p1]; p2=p3+1; goto loop; } a3[p4]='\0'; c3=s[p2]; p2++;p4=0; while(p2<strlen(s)) a4[p4++]=s[p2++]; a4[p4]='\0'; } else { c3=c2; a3[0]='\0'; p4=0;p2+=2; while(p2<strlen(s)) a4[p4++]=s[p2++]; a4[p4]='\0'; } if(c3=='-') { p4=0; while(p4<strlen(a4)) { while(a4[p4]!='(' && p4<strlen(a4)) { if(a4[p4]=='+') a4[p4]='-'; else if(a4[p4]=='-') a4[p4]='+'; p4++; } p4++;dem=1; while(p4<strlen(a4)) { if(a4[p4]=='(') dem++; if(a4[p4]==')') dem--; if(dem==0) break; p4++; } p4++; } } long k=tinh(a2); if(strlen(a1)>0) { if(c1=='*') k=tinh(a1)*k; else if(c1=='/') k=tinh(a1)/k; } if(strlen(a3)>0) { if(c2=='*') k=k*tinh(a3); else if(c2=='/') k=k/tinh(a3); } if(strlen(a4)>0) { if(c3=='+') k=k+tinh(a4); else if(c3=='-') k=k-tinh(a4); } return k; } } } char c; for(i=0;i<strlen(s);i++) { if(s[i]=='*' || s[i]=='/') break; a[i]=s[i]; } a[i]='\0'; long kq=atol(a); c=s[i]; i++; while(i<strlen(s)) { d=0; while(s[i]!='*' && s[i]!='/' && i<strlen(s)) a[d++]=s[i++]; a[d]='\0'; if(c=='*') kq*=atol(a); else kq/=atol(a); c=s[i]; i++; } return kq; } void xuly(char *s,int x) { char a[100],b[100]; int i,j,m; ltoa(x,a,10); if(s[0]=='x') { for(i=0;i<strlen(a);i++) b[i]=a[i]; for(j=1;j<strlen(s);j++) b[i++]=s[j]; b[i]='\0'; for(i=0;i<strlen(b);i++) s[i]=b[i]; s[i]='\0'; } for(i=1;i<strlen(s);i++) { if(s[i]=='x') { if(s[i-1]>='0' && s[i-1]<='9') { for(j=0;j<i;j++) b[j]=s[j]; b[j++]='*'; for(m=0;m<strlen(a);m++) b[j++]=a[m]; for(m=i+1;m<strlen(s);m++) b[j++]=s[m]; b[j]='\0'; for(j=0;j<strlen(b);j++) s[j]=b[j]; s[j]='\0'; } else { for(j=0;j<i;j++) b[j]=s[j]; for(m=0;m<strlen(a);m++) b[j++]=a[m]; for(m=i+1;m<strlen(s);m++) b[j++]=s[m]; b[j]='\0'; for(j=0;j<strlen(b);j++) s[j]=b[j]; s[j]='\0'; } } } } void bang(char *a,char *b) { int i; for(i=0;i<strlen(b);i++) a[i]=b[i]; a[i]='\0'; } void main() { FILE *t1=fopen("bai1.inp","r"); FILE *t2=fopen("bai1.out","w"); if(t1==NULL || t2==NULL) exit(0); char s[1000],a[1000]; long n,x,gt; fgets(s,100,t1); fscanf(t1,"%ld",&n); for(int i=1;i<=n;i++) { bang(a,s); fscanf(t1,"%ld",&x); xuly(a,x); gt=tinh(a); fprintf(t2,"%ld ",gt); } fcloseall(); }
Friday, April 24, 2015
tính giá trị biểu thức toán học bất kỳ, giống máy tính casio
lập trình c/c++ tính giá trị của 1 biểu thức bất kỳ, giông máy tính casio