社区
Delphi
帖子详情
delphi 中如何实现在一编辑框内输入数字及运算符自动返回运算结果?
lyq
2001-10-29 02:35:54
...全文
458
35
打赏
收藏
delphi 中如何实现在一编辑框内输入数字及运算符自动返回运算结果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
35 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
njhhack
2001-10-30
打赏
举报
回复
看来我要来回答这个问题了,我没有用数据结构书上说的算法,这是我自已的方法,我用了递规,不过不用递规了是可以的,其实就是做一个表达式运算器,在算24游戏中有点用:)
{
******** 一个表达式运算器(快速优先法) ***********
* 作者: 倪建华 *
* 最后更新:2001.2.24 *
* 信箱: njhhack@china.com *
* 主页: http://njhhack.at.china.com *
* 欢迎使用本软件,转载此源码者请加上以上信息 *
* 请尊重作者劳动,谢谢合作! *
* HackSoft Workgroup 2001.2.24 *
**************************************************
}
int fun_min(int km,int *a2)
{
int i,min=25536;
for(i=km-1;i>0;i--)if(min>a2[i])min=a2[i];
for(i=km-1;i>0;i--)if(min==a2[i])break;
return i;
}
float fun_2(int km,float *f1,char *a1,int *a2)
{
int i,j;
float ff1,ff2,ff3;
if(km<=1){ff3=f1[0];}
else if(km<=2){ff1=f1[0];ff2=f1[1];i=1;}
else
{
i=fun_min(km,a2);
if(i>=2)ff1=fun_2(i,f1,a1,a2);
else ff1=f1[i-1];
if(km-i>=2)ff2=fun_2(km-i,f1+i,a1+i,a2+i);
else ff2=f1[km-1];
}
switch(a1[i])
{
case '+':ff3=ff1+ff2;break;
case '-':ff3=ff1-ff2;break;
case '*':ff3=ff1*ff2;break;
case '/':ff3=ff1/ff2;break;
}
return ff3;
}
char *fun_num(char *s1,float *f1)
{
*f1=0;
while(1)
{
if(*s1>='0'&&*s1<='9')*f1=*f1*10+(*s1-'0');
else break;
s1++;
}
return s1;
}
int fun_1(char *s1,float *f1,char *a1,int *a2)
{
int k=0,std=0;
while(1)
{
if(*s1>='0'&&*s1<='9'){s1=fun_num(s1,&f1[k]);k++;}
else if(*s1=='-'||*s1=='+'){a1[k]=*s1;a2[k]=std;s1++;}
else if(*s1=='*'||*s1=='/'){a1[k]=*s1;a2[k]=std+1;s1++;}
else if(*s1=='('){std+=2;s1++;}
else if(*s1==')'){std-=2;s1++;}
else if(*s1==0)break;
}
return k;
}
main(int argc,char *argv[])
{
char *s0,*s1="1+(2*(3-4)+3)/((5+3*2)*3-2)+2*(3-6)";
float f1[100];char a1[100];int a2[100];
int i,j,k;
if(argc<=1)
{
s0=s1;
printf("Error,Useage as follow:\ne4 %s",s0);
}
else
{
s0=argv[1];
while(1)
{
if(*s0==0)break;
if(!(*s0>='0'&&*s0<='9'||*s0=='+'||*s0=='-'||*s0=='/'||*s0=='*'||*s0=='('||*s0==')'))
{
printf("\nError Use:%c",*s0);
return;
}
s0++;
}
s0=argv[1];
printf("Exp=%s",s0);
}
k=fun_1(s0,f1,a1,a2);
printf("\nask=%6.2f ",fun_2(k,f1,a1,a2));
}
delphi_user
2001-10-30
打赏
举报
回复
建议你看一下编译原理,我上大学实习的时候做过,现在记得不是很清楚了。
提示你一下吧。
首先你要做一个词法分析,实际上也就是把数字和运算符分离开。然后对运算符设定优先级。
读取字符串,如果是数字或者是低优先级的运算符(如'(','+','-' )把他压入堆栈,如果遇到高优先级的(如‘*‘,‘/’)就取出堆栈得数字和后面的数字进行运算,然后把结果压入堆栈。如果遇到‘)‘那就顺次取出堆栈的数据计算。直到遇到‘(’为止。然后把结果压入堆栈。
这个程序我已经好几年没接触过了,可能说的不是很对,只是作为提示。不过大概思路应该正确。
利用循环太慢,太蠢。而且利用堆栈可以分析更复杂的语法,原来我们做的程序可以编译简单c语言程序。
堆栈得建立,就是数组。只不过你要建立后进先出就可以了。
liang_z
2001-10-29
打赏
举报
回复
把字串转换为SQL语句,让服务器去算比较简单
taxi
2001-10-29
打赏
举报
回复
数据结构,堆栈。
randyamis
2001-10-29
打赏
举报
回复
你看看数据结构方面的书,因为牵涉到优先的问题(例如*就比+优先计算,括号又比其他优先等等),所以必须用到数据结构方面的知识,还要用到栈,有兴趣可以来信一起探讨:randyamis@21cn.com
panxiaosen
2001-10-29
打赏
举报
回复
我用VB做了一个,如果需要请与我联系
可以实现自动运算
panxiaosen@163.com
rodney_hao
2001-10-29
打赏
举报
回复
对此字符串进行处理:建立一个所有运算符号的集合,或者是常量数组,建立一个循环,利用pos函数对运算符进行定位,然后将运算符前的字符转变为数字,后面的雷同,如果有多个,也类似处理。大体思想就是这样,代码懒得写了。
hotyei
2001-10-29
打赏
举报
回复
学过数据结构的不难,不过如果控件与数据关联的话,我也不太会。
hellion
2001-10-29
打赏
举报
回复
很早以前(win31)时代用vc写过,支持多种数学函数和运算符。
hymen1
2001-10-29
打赏
举报
回复
to FourLegFlyCat(老猫):
怎样从一个STRING里然后取出操作符的位置再提取数字呢?
这个才是关键所在?
Triumph
2001-10-29
打赏
举报
回复
看一看数据结构吧,用栈可以实现。
FourLegFlyCat
2001-10-29
打赏
举报
回复
弄错了是StrToFloat
hymen1
2001-10-29
打赏
举报
回复
to Focus(老鱼)
多少分你才给???
yaopeng521@263.net
FourLegFlyCat
2001-10-29
打赏
举报
回复
把编辑框的TEXT放在一个STRING里然后取出操作符的位置再提取数字,最后用STRTOINT,FLOATTOINT判断一下即可
bubble
2001-10-29
打赏
举报
回复
同意dq(独轻)的意见,Focus(老鱼)你先说说,看能值多少银子。
大家认为怎么样?
yaoyaozhang
2001-10-29
打赏
举报
回复
应该可以做个控件用用,那样大家也可以用用。要么你找个控件得了,有几控件是可以下拉出来一个计算器的list来计算的。
hymen1
2001-10-29
打赏
举报
回复
不就是计算器的原理吗?
我来试一试。
看行不行。
yopeng
2001-10-29
打赏
举报
回复
yopeng,欢迎您,您的专家分:186、可用分:1134、参与分:2444
老鱼大哥,你看着办把!!!
dq
2001-10-29
打赏
举报
回复
说说能实现什么样的功能?支持哪些运算?参数接口是不是复杂(给个例子)?
看看值多少银子。
lyq
2001-10-29
打赏
举报
回复
多少分?
tl_lyq@sohu.com
加载更多回复(8)
delphi
计算器
例如,可以使用 `var` 关键字声明两个 `Double` 类型的变量,一个用于存储第一个
数字
,另一个用于存储
运算
结果。每次用户
输入
新
数字
或进行
运算
时,更新这些变量的值。 5. **按钮功能
实现
** -
数字
按钮:将
数字
添加...
Delphi
做的简单计算器
在处理器内部,代码会读取`TEdit`控件
中
的数值,执行相应的
运算
,并将结果回显到
编辑框
中
。 考虑到这个计算器支持加、减、乘、除、开方和倒取
运算
,开发者需要
实现
这些基本的数学函数。在
Delphi
中
,可以使用内置的...
delphi
简单计算器
5. **字符串与
数字
的转换**:在计算器
中
,用户
输入
的是字符串,需要通过`StrToFloat`或`TryStrToFloat`函数将其转换为浮点数进行计算,结果再通过`FloatToStr`转换回字符串显示。 6. **错误处理**:在处理除法
运算
...
delphi
简单计算器
在本项目
中
,我们将使用
Delphi
这一强大的RAD(快速应用开发)工具来创建一个简单的计算器程序,该计算器能够执行基本的数学
运算
,包括加法、减法、乘法和除法。同时,为了提高用户体验,我们还将
实现
MS(存储)、MR...
基于
Delphi
的课程设计计算器的制作毕业论文
在本篇基于
Delphi
的课程设计
中
,作者旨在创建一个功能丰富的计算器,涵盖了基础的数学
运算
、统计计算、三角函数、对数
运算
以及逻辑
运算
,并
实现
了不同进制间的转换。以下将详细介绍这些知识点: 1. **
Delphi
开发...
Delphi
5,931
社区成员
262,938
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章