科学计算器代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Calculate.java
/*这是一个计算类,用于普通运算中的各种运算,如2,8,10,16进制的符合运算,复合运算其原理用后缀表达式来实现*/
import java.util.*;
import ng.Math;
class Calculate {//两个内部类来实现数据的存储,如同数据结构中的栈
class operator
{ char data[];
int top;
operator()
{
data = new char [50];
top = -1;
}
};
class operator1
{ double data[];
int top;
operator1()
{
data = new double [20];
top = -1;
}
};
public static double jiecheng(double number)//阶乘运算
{
int number1 = (int)number;
double j=1;
for(int i=1;i<=number1;i++)
j=j*i;
return j;
}
String trans (char exp[],char postexp[])//后缀表达式的翻译函数
{
int i=0,j=0;boolean m=true;//m用来监视表达式是不有非法的运算符连着输入
operator op = new operator();
while(exp[j]!='\0')
{ switch (exp[j])
{
case '(':
op.top++;
op.data[op.top]=exp[j];
j++;m= false;
break;
case ')':
while (op.data[op.top]!='(')
{ postexp[i++]=op.data[op.top];
op.top--;
}
op.top--;
j++;
break;
case '+':
case '-':
if(!m)
return "+或者-附近出现多个运算符在一起的现象!";
while (op.top!=-1 && op.data[op.top]!='(')
{
postexp[i++]=op.data[op.top];
op.top--;
}
op.top++;
op.data[op.top]=exp[j];
j++;m=false;
break;
case '*':
case '/':
if(!m)
return "*或/附近出现多个运算符在一起的现象!";
while(op.top!=-1 && op.data[op.top]!='('&& op.data[op.top]!='+'&& op.data[op.top]!='-')
{
postexp[i++]=op.data[op.top];
op.top--;
}
op.top++;
op.data[op.top]=exp[j];
j++;m = false;
break;
case '^':
if(!m)
return "^(冥运算符号)附近出现多个运算符在一起的现象!";
case 's':
case 'c':
case 't':
case 'l':
case '$':
case '`':
op.top++;
op.data[op.top]=exp[j];
j++;
m = false;
break;
case '!':
op.top++;
op.data[op.top]=exp[j];
j++;
break;
case ' ':
break;
default:
while (exp[j]>='0' && exp[j]<='9'||exp[j]=='.')
{
postexp[i++]=exp[j];
j++;
}
postexp[i++]='#';
m = true;
}
}
while (op.top!=-1)
{
postexp[i++]=op.data[op.top];
op.top--;
}
postexp[i]='\0';
if(exp[j-1]=='+'||exp[j-1]=='-'||exp[j-1]=='*'||exp[j-1]=='/'||exp[j-1]=='^') return "运算式后缀出现非正常运算符!";
return "ok";
}
String compvalue (char postexp[],int flag)//后缀表达式运算,flag为进制{
String ex = new String(postexp);
StringTokenizer analy = new StringTokenizer(ex,"#+-`*/sclt!^$");
operator1 st = new operator1();
double d,d1,d2,a,b,c;