社区
Delphi
帖子详情
delphi 中如何实现在一编辑框内输入数字及运算符自动返回运算结果?
lyq
2001-10-29 02:35:54
...全文
449
35
打赏
收藏
delphi 中如何实现在一编辑框内输入数字及运算符自动返回运算结果?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
计算器
可以
实现
加减乘除,功能简单,适合入门.。
Delphi
做的简单计算器
这是一个用
Delphi
做的简易计算器,只支持加、减、乘、除、开方,倒取
运算
,不识别
运算
优先级,是一个非常简易的计算器。
delphi
简单计算器
delphi
实现
的简单计算器,
实现
简单的加减乘除
运算
delphi
简单计算器
时间要求: 1天完成 题目:
实现
简单计算器(只要求
实现
+-*/)的功能,请不要忽略MS,MR,MC的功能。
基于
Delphi
的课程设计计算器的制作毕业论文
计算器的制作的
实现
主要通过
Delphi
软件的添加基本控件以与编程序来
实现
基本 四则
运算
,统计
运算
,三角
运算
,对数
运算
,逻辑
运算
以与进制间的转换。 1. 各组件的基本使用该设计要求的主要是数学上的简单计算,需要
输入
的控件和 输出的控件(显示结果)
输入
控件使用 button 。而输出控件使用便于编辑的 edit 框来
实现
。 2.功能模块设计 从界面上来看,程序分两个部分.菜单和按钮。 从软件构架上分 为
输入
模块和输出模块。
输入
模块程序的主要是按钮的单击事件。输出模块主要是 EDIT 框的 text 属性的变化。
Delphi
5,927
社区成员
262,932
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章