/*
* 文 件 名: Calc.java
* 描 述: <描述>
* 修 改 人: 韦旋枫 CEA00260
* 修改时间: 2011-5-12
* 修改内容: <修改内容>
*/
package com.xuanfeng.test;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
/**
* <一句话功能简述> <功能详细描述>
*
* @author 姓名 工号
* @version [版本号, 2011-5-12]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class Calc
{
static Calc calc = new Calc();
public static void main(String[] args)
{
// calc.process("9^3+9-sin60");
calc.process("19²");
}
/*
* 整个计算核心,只要将表达式的整个字符串传入calc().process()就可以实行计算了 算法包括以下几部分: 1、计算部分 process(String str) 当然,这是建立在查错无错误的情况下 2、数据格式化
* FP(double n) 使数据有相当的精确度 3、阶乘算法 N(double n) 计算n!,将结果返回 4、错误提示 showError(int code ,String str) 将错误返回
*/
public Calc()
{
}
// 保存原来的算式样子,为了输出时好看,因计算时,算式样子被改变
public String str_old;
// 控制DRG按键,true为角度,false为弧度
public boolean drg_flag = true;
// π 3.14
public double pi = Math.PI;
final int MAXLEN = 500;
/*
* 计算表达式 从左向右扫描,数字入number栈,运算符入operator栈 +-基本优先级为1,×÷基本优先级为2,log ln sin cos tan n!基本优先级为3,√^基本优先级为4
* 括号内层运算符比外层同级运算符优先级高4 当前运算符优先级高于栈顶压栈,低于栈顶弹出一个运算符与两个数进行运算 重复直到当前运算符大于栈顶 扫描完后对剩下的运算符与数字依次计算
*/
public void process(String str)
{
// weightPlus为同一()下的基本优先级,weightTemp临时记录优先级的变化
int weightPlus = 0;
// topOp为weight[],operator[]的计数器;
int topOp = 0;
// topNum为number[]的计数器
int topNum = 0;
// flag为正负数的计数器,1为正数,-1为负数
int flag = 1;
int weightTemp = 0;
// 保存operator栈中运算符的优先级,以topOp计数
int weight[];
// 保存数字,以topNum计数
double number[];
// operator[]保存运算符,以topOp计数
char ch, ch_gai, operator[];
// 记录数字,str以+-×÷()sctgl!√^分段,+-×÷()sctgl!√^字符之间的字符串即为数字
String num;
weight = new int[MAXLEN];
number = new double[MAXLEN];
operator = new char[MAXLEN];
// String expression1 = str;
StringTokenizer expToken = new StringTokenizer(str, "+-×÷()sctgl!√^²³");
int i = 0;
while (i < str.length())
{
ch = str.charAt(i);
if (i == 0)
{
if (ch == '-')
flag = -1;
}
else if (str.charAt(i - 1) == '(' && ch == '-')
flag = -1;
if (ch <= '9' && ch >= '0' || ch == '.' || ch == 'E')
{
num = expToken.nextToken();
ch_gai = ch;
while (i < str.length() && (ch_gai <= '9' && ch_gai >= '0' || ch_gai == '.' || ch_gai == 'E'))
{
ch_gai = str.charAt(i++);
}
if (i >= str.length())
{
i -= 1;
}
else
{
i -= 2;
}
if (num.compareTo(".") == 0)
{
number[topNum++] = 0;
}
else
{
number[topNum++] = Double.parseDouble(num) * flag;
flag = 1;
}
}
if (ch == '(')
{
weightPlus += 4;
}
if (ch == ')')
{
weightPlus -= 4;
}
if (ch == '-' && flag == 1 || ch == '+' || ch == '×' || ch == '÷' || ch == 's' || ch == 'c' || ch == 't'
|| ch == 'g' || ch == 'l' || ch == '!' || ch == '√' || ch == '^' || ch == '²' || ch == '³')
{
switch (ch)
{
case '+':
case '-':
weightTemp = 1 + weightPlus;
break;
case '×':
case '÷':
weightTemp = 2 + weightPlus;
break;
case 's':
case 'c':
case 't':
case 'g':
case 'l':
case '!':
weightTemp = 3 + weightPlus;
break;
// case '^':
// case '√':
default:
weightTemp = 4 + weightPlus;
break;
}
if (topOp == 0 || weight[topOp - 1] < weightTemp)
{
weight[topOp] = weightTemp;
operator[topOp] = ch;
topOp++;
}
else
{
while (topOp > 0 && weight[topOp - 1] >= weightTemp)
{
switch (operator[topOp - 1])
{
case '+':
number[topNum - 2] += number[topNum - 1];
break;
case '-':
number[topNum - 2] -= number[topNum - 1];
case '×':
number[topNum - 2] *= number[topNum - 1];
break;
case '÷':
if (number[topNum - 1] == 0)
{
showError(1, str_old);
return;
}
number[topNum - 2] /= number[topNum - 1];
break;
case '√':
if (number[topNum - 1] == 0 || (number[topNum - 2] < 0 && number[topNum - 1] % 2 == 0))
{
showError(2, str_old);
return;
}
number[topNum - 2] = Math.pow(number[topNum - 2], 1 / number[topNum - 1]);
break;
case '^':
number[topNum - 2] = Math.pow(number[topNum - 2], number[topNum - 1]);
break;
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
case 's':
if (drg_flag == true)
{
number[topNum - 1] = Math.sin((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.sin(number[topNum - 1]);
}
topNum++;
break;
case 'c':
if (drg_flag == true)
{
number[topNum - 1] = Math.cos((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.cos(number[topNum - 1]);
}
topNum++;
break;
case 't':
if (drg_flag == true)
{
if ((Math.abs(number[topNum - 1]) / 90) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan((number[topNum - 1] / 180) * pi);
}
else
{
if ((Math.abs(number[topNum - 1]) / (pi / 2)) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan(number[topNum - 1]);
}
topNum++;
break;
case 'g':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log10(number[topNum - 1]);
topNum++;
break;
case 'l':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log(number[topNum - 1]);
topNum++;
break;
case '!':
if (number[topNum - 1] > 170)
{
showError(3, str_old);
return;
}
else if (number[topNum - 1] < 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = n(number[topNum - 1]);
topNum++;
break;
}
switch (operator[topOp])
{
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
}
topNum--;
topOp--;
}
weight[topOp] = weightTemp;
operator[topOp] = ch;
topOp++;
}
}
i++;
}
while (topOp > 0)
{
switch (operator[topOp - 1])
{
case '+':
number[topNum - 2] += number[topNum - 1];
break;
case '-':
number[topNum - 2] -= number[topNum - 1];
break;
case '×':
number[topNum - 2] *= number[topNum - 1];
break;
case '÷':
if (number[topNum - 1] == 0)
{
showError(1, str_old);
return;
}
number[topNum - 2] /= number[topNum - 1];
break;
case '√':
if (number[topNum - 1] == 0 || (number[topNum - 2] < 0 && number[topNum - 1] % 2 == 0))
{
showError(2, str_old);
return;
}
number[topNum - 2] = Math.pow(number[topNum - 2], 1 / number[topNum - 1]);
break;
case '^':
number[topNum - 2] = Math.pow(number[topNum - 2], number[topNum - 1]);
break;
case 's':
if (drg_flag == true)
{
number[topNum - 1] = Math.sin((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.sin(number[topNum - 1]);
}
topNum++;
break;
case 'c':
if (drg_flag == true)
{
number[topNum - 1] = Math.cos((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.cos(number[topNum - 1]);
}
topNum++;
break;
case 't':
if (drg_flag == true)
{
if ((Math.abs(number[topNum - 1]) / 90) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan((number[topNum - 1] / 180) * pi);
}
else
{
if ((Math.abs(number[topNum - 1]) / (pi / 2)) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan(number[topNum - 1]);
}
topNum++;
break;
case 'g':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log10(number[topNum - 1]);
topNum++;
break;
case 'l':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log(number[topNum - 1]);
topNum++;
break;
case '!':
if (number[topNum - 1] > 170)
{
showError(3, str_old);
return;
}
else if (number[topNum - 1] < 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = n(number[topNum - 1]);
topNum++;
break;
}
switch (operator[topOp])
{
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
}
topNum--;
topOp--;
}
if (number[0] > 7.3E306)
{
showError(3, str_old);
// input.setText("\""+str_old+"\": 太大了,我不行了");
return;
}
System.out.println(String.valueOf(fp(number[0])));
// input.setText(String.valueOf(fp(number[0]))); // 输出最终结果
// tip.setText("计算完毕,要继续请按归零键 C");
// mem.setText(str_old + "=" + String.valueOf(fp(number[0])));
}
/*
* FP = floating point 控制小数位数,达到精度 否则会出现 0.6-0.2=0.39999999999999997的情况,用FP即可解决,使得数为0.4 本格式精度为15位
*/
public double fp(double n)
{
DecimalFormat format = new DecimalFormat("0.#############");
return Double.parseDouble(format.format(n));
}
/*
* 阶乘算法
*/
public double n(double n)
{
int i = 0;
double sum = 1;
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
return sum;
}
/*
* 错误提示,按了"="之后,若计算式在process()过程中,出现错误,则进行提示
*/
public void showError(int code, String str)
{
String message = "";
switch (code)
{
case 1:
message = "零不能作除数";
break;
case 2:
message = "函数格式错误";
break;
case 3:
message = "值太大了,我不行了";
}
System.out.println("\"" + str + "\"" + ": " + message);
// input.setText("\"" + str + "\"" + ": " + message);
// tip.setText(message + "\n" + "计算完毕,要继续请按归零键 C");
}
}
* 文 件 名: Calc.java
* 描 述: <描述>
* 修 改 人: 韦旋枫 CEA00260
* 修改时间: 2011-5-12
* 修改内容: <修改内容>
*/
package com.xuanfeng.test;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
/**
* <一句话功能简述> <功能详细描述>
*
* @author 姓名 工号
* @version [版本号, 2011-5-12]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class Calc
{
static Calc calc = new Calc();
public static void main(String[] args)
{
// calc.process("9^3+9-sin60");
calc.process("19²");
}
/*
* 整个计算核心,只要将表达式的整个字符串传入calc().process()就可以实行计算了 算法包括以下几部分: 1、计算部分 process(String str) 当然,这是建立在查错无错误的情况下 2、数据格式化
* FP(double n) 使数据有相当的精确度 3、阶乘算法 N(double n) 计算n!,将结果返回 4、错误提示 showError(int code ,String str) 将错误返回
*/
public Calc()
{
}
// 保存原来的算式样子,为了输出时好看,因计算时,算式样子被改变
public String str_old;
// 控制DRG按键,true为角度,false为弧度
public boolean drg_flag = true;
// π 3.14
public double pi = Math.PI;
final int MAXLEN = 500;
/*
* 计算表达式 从左向右扫描,数字入number栈,运算符入operator栈 +-基本优先级为1,×÷基本优先级为2,log ln sin cos tan n!基本优先级为3,√^基本优先级为4
* 括号内层运算符比外层同级运算符优先级高4 当前运算符优先级高于栈顶压栈,低于栈顶弹出一个运算符与两个数进行运算 重复直到当前运算符大于栈顶 扫描完后对剩下的运算符与数字依次计算
*/
public void process(String str)
{
// weightPlus为同一()下的基本优先级,weightTemp临时记录优先级的变化
int weightPlus = 0;
// topOp为weight[],operator[]的计数器;
int topOp = 0;
// topNum为number[]的计数器
int topNum = 0;
// flag为正负数的计数器,1为正数,-1为负数
int flag = 1;
int weightTemp = 0;
// 保存operator栈中运算符的优先级,以topOp计数
int weight[];
// 保存数字,以topNum计数
double number[];
// operator[]保存运算符,以topOp计数
char ch, ch_gai, operator[];
// 记录数字,str以+-×÷()sctgl!√^分段,+-×÷()sctgl!√^字符之间的字符串即为数字
String num;
weight = new int[MAXLEN];
number = new double[MAXLEN];
operator = new char[MAXLEN];
// String expression1 = str;
StringTokenizer expToken = new StringTokenizer(str, "+-×÷()sctgl!√^²³");
int i = 0;
while (i < str.length())
{
ch = str.charAt(i);
if (i == 0)
{
if (ch == '-')
flag = -1;
}
else if (str.charAt(i - 1) == '(' && ch == '-')
flag = -1;
if (ch <= '9' && ch >= '0' || ch == '.' || ch == 'E')
{
num = expToken.nextToken();
ch_gai = ch;
while (i < str.length() && (ch_gai <= '9' && ch_gai >= '0' || ch_gai == '.' || ch_gai == 'E'))
{
ch_gai = str.charAt(i++);
}
if (i >= str.length())
{
i -= 1;
}
else
{
i -= 2;
}
if (num.compareTo(".") == 0)
{
number[topNum++] = 0;
}
else
{
number[topNum++] = Double.parseDouble(num) * flag;
flag = 1;
}
}
if (ch == '(')
{
weightPlus += 4;
}
if (ch == ')')
{
weightPlus -= 4;
}
if (ch == '-' && flag == 1 || ch == '+' || ch == '×' || ch == '÷' || ch == 's' || ch == 'c' || ch == 't'
|| ch == 'g' || ch == 'l' || ch == '!' || ch == '√' || ch == '^' || ch == '²' || ch == '³')
{
switch (ch)
{
case '+':
case '-':
weightTemp = 1 + weightPlus;
break;
case '×':
case '÷':
weightTemp = 2 + weightPlus;
break;
case 's':
case 'c':
case 't':
case 'g':
case 'l':
case '!':
weightTemp = 3 + weightPlus;
break;
// case '^':
// case '√':
default:
weightTemp = 4 + weightPlus;
break;
}
if (topOp == 0 || weight[topOp - 1] < weightTemp)
{
weight[topOp] = weightTemp;
operator[topOp] = ch;
topOp++;
}
else
{
while (topOp > 0 && weight[topOp - 1] >= weightTemp)
{
switch (operator[topOp - 1])
{
case '+':
number[topNum - 2] += number[topNum - 1];
break;
case '-':
number[topNum - 2] -= number[topNum - 1];
case '×':
number[topNum - 2] *= number[topNum - 1];
break;
case '÷':
if (number[topNum - 1] == 0)
{
showError(1, str_old);
return;
}
number[topNum - 2] /= number[topNum - 1];
break;
case '√':
if (number[topNum - 1] == 0 || (number[topNum - 2] < 0 && number[topNum - 1] % 2 == 0))
{
showError(2, str_old);
return;
}
number[topNum - 2] = Math.pow(number[topNum - 2], 1 / number[topNum - 1]);
break;
case '^':
number[topNum - 2] = Math.pow(number[topNum - 2], number[topNum - 1]);
break;
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
case 's':
if (drg_flag == true)
{
number[topNum - 1] = Math.sin((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.sin(number[topNum - 1]);
}
topNum++;
break;
case 'c':
if (drg_flag == true)
{
number[topNum - 1] = Math.cos((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.cos(number[topNum - 1]);
}
topNum++;
break;
case 't':
if (drg_flag == true)
{
if ((Math.abs(number[topNum - 1]) / 90) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan((number[topNum - 1] / 180) * pi);
}
else
{
if ((Math.abs(number[topNum - 1]) / (pi / 2)) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan(number[topNum - 1]);
}
topNum++;
break;
case 'g':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log10(number[topNum - 1]);
topNum++;
break;
case 'l':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log(number[topNum - 1]);
topNum++;
break;
case '!':
if (number[topNum - 1] > 170)
{
showError(3, str_old);
return;
}
else if (number[topNum - 1] < 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = n(number[topNum - 1]);
topNum++;
break;
}
switch (operator[topOp])
{
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
}
topNum--;
topOp--;
}
weight[topOp] = weightTemp;
operator[topOp] = ch;
topOp++;
}
}
i++;
}
while (topOp > 0)
{
switch (operator[topOp - 1])
{
case '+':
number[topNum - 2] += number[topNum - 1];
break;
case '-':
number[topNum - 2] -= number[topNum - 1];
break;
case '×':
number[topNum - 2] *= number[topNum - 1];
break;
case '÷':
if (number[topNum - 1] == 0)
{
showError(1, str_old);
return;
}
number[topNum - 2] /= number[topNum - 1];
break;
case '√':
if (number[topNum - 1] == 0 || (number[topNum - 2] < 0 && number[topNum - 1] % 2 == 0))
{
showError(2, str_old);
return;
}
number[topNum - 2] = Math.pow(number[topNum - 2], 1 / number[topNum - 1]);
break;
case '^':
number[topNum - 2] = Math.pow(number[topNum - 2], number[topNum - 1]);
break;
case 's':
if (drg_flag == true)
{
number[topNum - 1] = Math.sin((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.sin(number[topNum - 1]);
}
topNum++;
break;
case 'c':
if (drg_flag == true)
{
number[topNum - 1] = Math.cos((number[topNum - 1] / 180) * pi);
}
else
{
number[topNum - 1] = Math.cos(number[topNum - 1]);
}
topNum++;
break;
case 't':
if (drg_flag == true)
{
if ((Math.abs(number[topNum - 1]) / 90) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan((number[topNum - 1] / 180) * pi);
}
else
{
if ((Math.abs(number[topNum - 1]) / (pi / 2)) % 2 == 1)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.tan(number[topNum - 1]);
}
topNum++;
break;
case 'g':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log10(number[topNum - 1]);
topNum++;
break;
case 'l':
if (number[topNum - 1] <= 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = Math.log(number[topNum - 1]);
topNum++;
break;
case '!':
if (number[topNum - 1] > 170)
{
showError(3, str_old);
return;
}
else if (number[topNum - 1] < 0)
{
showError(2, str_old);
return;
}
number[topNum - 1] = n(number[topNum - 1]);
topNum++;
break;
}
switch (operator[topOp])
{
case '²':
number[topNum] = Math.pow(number[topNum], 2);
break;
case '³':
number[topNum] = Math.pow(number[topNum], 3);
break;
}
topNum--;
topOp--;
}
if (number[0] > 7.3E306)
{
showError(3, str_old);
// input.setText("\""+str_old+"\": 太大了,我不行了");
return;
}
System.out.println(String.valueOf(fp(number[0])));
// input.setText(String.valueOf(fp(number[0]))); // 输出最终结果
// tip.setText("计算完毕,要继续请按归零键 C");
// mem.setText(str_old + "=" + String.valueOf(fp(number[0])));
}
/*
* FP = floating point 控制小数位数,达到精度 否则会出现 0.6-0.2=0.39999999999999997的情况,用FP即可解决,使得数为0.4 本格式精度为15位
*/
public double fp(double n)
{
DecimalFormat format = new DecimalFormat("0.#############");
return Double.parseDouble(format.format(n));
}
/*
* 阶乘算法
*/
public double n(double n)
{
int i = 0;
double sum = 1;
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
return sum;
}
/*
* 错误提示,按了"="之后,若计算式在process()过程中,出现错误,则进行提示
*/
public void showError(int code, String str)
{
String message = "";
switch (code)
{
case 1:
message = "零不能作除数";
break;
case 2:
message = "函数格式错误";
break;
case 3:
message = "值太大了,我不行了";
}
System.out.println("\"" + str + "\"" + ": " + message);
// input.setText("\"" + str + "\"" + ": " + message);
// tip.setText(message + "\n" + "计算完毕,要继续请按归零键 C");
}
}
相关推荐
在本项目中,"C#面积计算器源代码"是一个简单的应用程序,它允许用户计算不同几何图形的面积。这个程序的核心是使用C#编程语言来实现各种图形面积计算的算法。以下是一些关于这个项目的详细知识点: 1. **C#语言...
在本项目中,我们关注的是一个基于C#编程语言实现的复数计算器应用。复数是数学中的一个重要概念,它扩展了实数的概念,引入了虚部,使得我们可以解决一些在实数范围内无法解决的问题。C#作为一种现代化的、面向对象...
通过分析这个项目的源代码,我们可以学习到关于复数运算和C++编程的多个知识点。 首先,我们要了解复数。复数由实部和虚部构成,形式为a + bi,其中a是实部,b是虚部,i是虚数单位,i² = -1。复数运算遵循代数规则...
在提供的压缩文件中,我们可以找到源代码文件“圆形体体积计算器.c”,这应该是实现上述功能的代码。通过查看并分析这个文件,可以进一步学习C语言的基础语法、函数定义、变量声明、条件语句、循环以及输入输出操作...
在开发一个标准体重计算器的过程中,我们首先需要理解其基本功能:根据用户的身体指标(如身高、性别、年龄等)计算出适宜的体重范围。这样的工具通常基于BMI(Body Mass Index,身体质量指数)来评估健康状况。对于...
最后,"计算器9"可能是源代码文件或者工程文件的名字,包含计算器项目的源代码,可能包括头文件、主程序、LCD驱动函数、四则运算函数等。通过分析和编译这些代码,你可以深入了解51单片机与LCD1602的集成应用,以及...
尽管这个计算器并不具备最小二乘法功能,但可以作为对比,展示出高级计算器与基础计算器的区别。 在实际应用中,C++程序员可能会使用更高级的库,如Eigen库进行矩阵运算,或者使用OpenCV库进行图像和数据处理,这些...
这个计算器可能采用了用户友好的界面,让用户只需输入相关的尺寸参数,就可以快速得到结果。同时,它也可能提供了单位转换功能,使得不同单位间的换算变得更加容易。如果允许用户自定义添加新的计算类型,那么可能...
方程和分数计算器是一款专为解决数学问题设计的软件工具,尤其在处理分数运算方面表现出色。这款计算器不仅能够帮助用户解决线性、二次、甚至更复杂的方程,还提供了全面的分数运算功能,使计算过程更为精确和简便。...
在Android平台上开发一款BMI指数计算器应用,涉及到许多关键的编程概念和技术。首先,我们需要理解BMI指数的基本计算方法,它是通过体重(单位:公斤)除以身高(单位:米)的平方来得到的。公式可以表示为:BMI = ...
这个项目的核心是设计并实现一个能够计算BMI(Body Mass Index,身体质量指数)的软件工具,通过输入体重和身高数据,用户可以快速了解自己的健康状况。 首先,我们需要理解BMI指数的计算公式。BMI=体重(kg)/身高...
这款应用程序适用于Android操作系统,用户可以轻松在手机上进行操作。 一、BMI概念与计算方法 身体质量指数(BMI)是衡量人体肥胖程度的一个国际通用标准,通过体重(公斤)除以身高(米)的平方来得出。公式如下...
这个计算器可以接受复数作为输入,执行基本的复数运算,并返回结果。通过学习和理解这个代码,你可以进一步掌握C++的面向对象编程技巧,以及复数运算的数学原理。这不仅有助于提升编程技能,也有助于理解和解决更...
在这个BMI计算器项目中,我们可以学习到如何在Android环境中搭建用户界面、处理用户输入、进行数学计算以及展示结果。 1. **用户界面设计**: - 使用XML布局文件创建UI元素,如EditText用于输入体重和身高,Button...
这两个输入字段可以是EditText控件,提供数字键盘以方便用户输入。此外,一个计算按钮触发计算过程,并显示结果。结果显示在一个TextView控件中,可能还会包含BMI分类(如正常、偏轻、偏重等)。 **二、数据处理** ...
例如,用户输入的复数可以通过DDX_Text函数绑定到对话框的数据成员,然后进行有效性检查,如确保输入是合法的数字。 5. **复数运算** 在MFC应用中,可以定义复数类(CComplex),包含实部和虚部两个成员变量,并...
用户可以在文本框中输入复数,如“3+4i”或“2-5i”,然后选择相应的运算符,点击计算按钮,程序会解析输入的复数,执行相应的数学运算,并将结果展示出来。这涉及到字符串处理、复数运算以及控件更新等多个环节。 ...
例如,如果你知道一个圆的半径是10米,而你想要找到对应的弧长,只需输入半径和夹角(比如30度),计算器会自动给出弧长,即5π/3米(约等于5.24米)。反之,如果你已知弧长和夹角,也可以计算出半径。同样,如果给...
激光光束参数计算器V3.0是一款专为激光技术人员设计的专业计算工具,相较于之前的Excel版本,此软件提供了更直观、便捷的操作界面。该软件的主要功能是帮助用户计算和分析激光光束的各种关键参数,这对于理解和优化...
《复频域计算器——深入解析与应用》 “复频域计算器.rar”是一个专为处理复数和复频域线性方程组设计的独立可执行文件,适用于.NET框架3.5及以上版本。该计算器的独特之处在于其专门针对复数运算和复频域分析进行...