设为首页 加入收藏

TOP

Qt5 编写的简单计算(四)
2014-11-24 02:53:23 来源: 作者: 【 】 浏览:1
Tags:Qt5 编写 简单 计算
uttonequal)
{
isEqualClicked = true;
getResult();
}
}


void Calculator::getResult()
{
while(!vectorExp.isEmpty())
{
char ch = vectorExp.first();
vectorExp.removeFirst();
getDigital(ch);
getSign(ch);
}
}
void Calculator::getDigital(char digital)
{
if(digital == '0' || digital == '1' || digital == '2'
|| digital == '3' || digital == '4' || digital == '5'
|| digital == '6' || digital == '7' || digital == '8'
|| digital == '9' )
{
if(isPoint)
i *= 10;//i初值是1
j = 0;//j标记是否连续字符输入
sum = sum * 10 + (digital - '0');
isLArc = false;


}
else if(digital == '.')
{
isPoint = true;
isLArc = false;
}
}


void Calculator::getSign(char ch)
{
if(isLArc && ch != '(' && ch != ')')
{
sign = ch;
}
else if(ch == '+' || ch == '-'
|| ch == '*' || ch == '/'
|| ch == '=' || ch == '('
|| ch == ')')
{
if(ch == '(')
isLArc = true;
else
isLArc = false;


j++;
if(j <=1)
{
if(sign == '-')
sum = sum * (-1);
sign = ' ';
vectorOpnd.append(sum / i);
isLArc = false;
i = 1;
sum = 0;
isPoint = false;
}
pickSign(ch);


}
}



bool Calculator::pickSign(char ch)
{
char theta;
double a, b;
if(ch == '=')
{
while(vectorOptr.last() != '#')
{
do{
theta = vectorOptr.last();
vectorOptr.pop_back();
}while(theta == '(' || theta == ')');


if(theta != '#')//void 8(,9),8()
{
b = vectorOpnd.last();vectorOpnd.pop_back();
a = vectorOpnd.last();vectorOpnd.pop_back();
vectorOpnd.append(operate(a, theta, b));
}
else if(theta == '#')
vectorOptr.append('#');
}
result = vectorOpnd.last();
screenTextEdit->insertPlainText(QString("%1").arg(result));
vectorOpnd.clear();
vectorOptr.clear();
initVector();
isEnter = false;
return true;
}
pushVector(ch);
return true;
}


bool Calculator::pushVector(char optr)
{
char theta;
double a, b;
if(optr == ')')
{
do{
theta = vectorOptr.last();
vectorOptr.pop_back();
}while(theta == '(' || theta == ')');
if(theta != '#')// void 8(,9),8()
{
b = vectorOpnd.last();vectorOpnd.pop_back();
a = vectorOpnd.last();vectorOpnd.pop_back();
vectorOpnd.append(operate(a, theta, b));
}
else
{
vectorOptr.append('#');
}
return true;
}


switch(precedeSign(vectorOptr.last(),optr))
{
case '<':
vectorOptr.append(optr);
break;
case '=':
vectorOptr.pop_back();
break;
case '>':
theta = vectorOptr.last();
vectorOptr.pop_back();
b = vectorOpnd.last();
vectorOpnd.pop_back();
a = vectorOpnd.last();
vectorOpnd.pop_back();
vectorOpnd.append(operate(a, theta, b));
vectorOptr.append(optr);
break;
}
return true;
}
void Calculator::clearScreen()
{
screenTextEdit->clear();
result = 0;
isEnter = true;
}


double Calculator::operate(double a, char theta, double b)
{
double sum1;
switch (theta) {
case '+':
sum1 = a + b; break;
case '-':
sum1 = a - b; break;
case '*':
sum1 = a * b; break;
case '/':
sum1 = a / b; break;
}
return sum1;
}


char Calculator::button2char(QPushButton *button)
{
char optr;
if(button == buttonadd)
optr = '+';
else if(button == buttonsub)
optr = '-';
else if(button == buttonx)
optr = '*';
else if(button == buttondivide)
optr = '/';
else if(button == buttonLArc)
optr = '(';
else if(button == buttonRArc)
optr = ')';
else if(b

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Windows Phone 8 人脉 people hub.. 下一篇从 Windows Phone7 到 Windows Ph..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: