科学计算器代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档