怎样实现加减乘除的混合运算?

jund 2002-07-25 06:00:43
我编写了一个计算器程序,但不知怎样实现加减乘除的混合运算,请各位高手指点.下面是我的源程序,我想请问一下,如果我想把m:=1;这句加在procedure外面,不知要放在哪里?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button17: TButton;
Button18: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
x,y,z,m: real;
flag: char;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='1'
else
edit1.Text:=edit1.Text+'1';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='2' else
edit1.Text:=edit1.Text+'2';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='3' else
edit1.Text:=edit1.Text+'3';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='4' else
edit1.Text:=edit1.Text+'4';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='5' else
edit1.Text:=edit1.Text+'5';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='6' else
edit1.Text:=edit1.Text+'6';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='7' else
edit1.Text:=edit1.Text+'7';
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='8' else
edit1.Text:=edit1.Text+'8';
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='9' else
edit1.Text:=edit1.Text+'9';
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
if edit1.Text='0' then edit1.Text:='0' else
edit1.Text:=edit1.Text+'0';
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else
begin
if pos('.',edit1.Text)<>0
then edit1.Text:=edit1.Text
else edit1.Text:=edit1.Text+'.';
end;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
edit1.Clear;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else begin

flag:='+';
x:=strtofloat(edit1.Text);
z:=x+z;

edit1.Clear;
end;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else begin
flag:='-';
x:=strtofloat(edit1.Text);
z:=x-z;
edit1.Clear;
end;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else begin
flag:='*';
x:=strtofloat(edit1.Text);
z:=x*m;
edit1.Clear;
end;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else begin
flag:='/';
x:=strtofloat(edit1.Text);
z:=x/m;
edit1.Clear;
end;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
if edit1.Text='' then edit1.Text:=''
else
case flag of
'+': begin
edit1.text:=floattostr(z+strtofloat(edit1.Text));
z:=0;
end;
'-':begin
edit1.text:=floattostr(z-strtofloat(edit1.Text));
z:=0;
end;
'*': begin
edit1.text:=floattostr(m*strtofloat(edit1.Text));
m:=1;
end;
'/': begin
y:=strtofloat(edit1.Text);
if y=0 then edit1.Text:='99999999999999999999999999999999'
else begin
edit1.text:=floattostr(m/strtofloat(edit1.Text));
m:=1;
end;
end;
end;

end;
procedure TForm1.Button18Click(Sender: TObject);
begin
close;
end;

end.
...全文
350 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ehom 2002-07-25
  • 打赏
  • 举报
回复
这是非常基础的知识哦!要打牢基础啊!^_^

转摘

要编写一个具有加(+)、减(-)、乘(*)、
除(/)四则运算功能的计算器程序。为了更易于实现,在计算器中使用逆波兰表示法来代替普
通的中辍表示法。
在使用逆波兰表示法时,所有运算符都跟在其运算分量的后面。诸如
(1 - 2) * (4 + 5)
一类的中辍可用逆波兰表示法表示成:
1 2 - 4 5 + *
在使用逆波兰表示法时不再需要圆括号,只需知道每一个运算符需要几个运算分量。
计算器程序的实现很简单。每一个运算分量都被依次下推到栈中;当一个运算符到达时,
从栈中弹出相应数目的运算分量(对二元运算符是两个运算分量),把该运算符作用于所弹出的
运算分量,并把运算结果再下推回栈中。例如,对上面所述逆波兰表达式,首先把1与2下推到
栈中,再用两者之差-1来取代它们;然后,把4与5下推到栈中,再用两者之和9来取代它们。最
后,从栈中取出栈顶的-1与9,把它们的积-9下推到栈顶。当到达输入行的末尾时,把栈顶的值
弹出并打印出来。
这样,该程序的结构是一个循环,每一次循环对一个运算符及相应的运算分量执行一次操
作:
while ( 下一个运算符或运算分量不是文件结束指示符)
if ( 数)
将该数下推到栈中
else if ( 运算符)
弹出所需数目的运算分量
执行运算
将结果下推到栈中
else if ( 换行符)
弹出并打印栈顶的值
else
错误
栈的下推与弹出操作比较简单,但是,如果把错误检测与恢复操作都加进去,那么它们就
会显得很长,最好把它们设计成独立的函数,而不要把它们作为在这个程序中重复的代码段。
另外还需要一个单独的函数来取下一个输入运算符或运算分量。
debussy 2002-07-25
  • 打赏
  • 举报
回复
学过数据结构就知道。
jund 2002-07-25
  • 打赏
  • 举报
回复
可不可以说得详细点,或给我源代码
debussy 2002-07-25
  • 打赏
  • 举报
回复
逆波兰表达式
ehom 2002-07-25
  • 打赏
  • 举报
回复
将运算符和操作数压入不同的栈!根据运算符的优先级取出!
中文编程系统化教程零基础入门篇学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,通过对成百上千个实例练习,则很快会成为编程高手。我们专业从事编程十几年,积累了丰富的编程经验,会陆续制作编程视频供大家学习,中级、高级编程我们会专门制作中高级的系列编程课程,难度逐步加深,想学编程的可以关注我们的系列课程。可以就相关编程问题提问。1、【编程工具分为 免费自由版、专业版、企业版。】首先通过免费自由版熟悉基本操作,通过我们提供的实例视频学习编程,先快速入门。2、基本入门后,再学习我们提供的中级编程课程,通过对若干实例的编程练习,基本可以掌握编程思路。3、想继续加深学习的,可以继续学习高级版编程课程,通过对连接数据库等的学习真正开发出实用的商业管理软件或定制开发程序。4、基本掌握了编程思路之后,再学习其他的编程语言或大学里的编程课程则会非常轻松,因为不论是哪个编程语言,最重要的是学习编程思路,而编程思路基本上是相通的。5、学习完PC电脑端编程后,还可以继续学习APP手机软件开发。APP手机软件开发需要有PC电脑上开发基础,操作基本类似。6、编程工具为 搭建之星,这个编程工具的特点:1、安装简单、迅速,纯中文界面,构件丰富,设计过程直观、自由;无需掌握电脑语言,所有编程构件化、命令化、可视化。2、交互式开发,只需要四种类型的“命令”,便可以建立各构件之间的联系;象搭积木一样简单,并可快速的搭建出具有专业水平的软件作品。3、微解释执行,命令解释量小,执行速度快。可以和编译后的可执行文件相媲美。4、提供打包工具,使您即刻将自制软件安装到其它机器上运行。5、自动对开发项目进行加密;使您的项目,在未经授权下,别人无法“浏览、修改”项目的构件关系与搭建方法。课程安排:零基础入门篇-11  系统编程零基础入门篇概述2 新建项目保存项目以及开发工具界面3 添加构件并对构件对齐排列4 构件的属性方法事件概述5 简单加减乘除运算实例6 简单倒计时实例7 点击打开指定网页编程实例8滚动字幕实例9 闪动标签实例10普通按钮位图按钮实例11光线按钮实例12组合按钮实例13分组框单选框复选框构件14列表框组合框构件15时间选择构件16控制面板构件17多页面板构件18进度条构件实例19钟表构件实例20日历构件实例21比较判断构件实例22条件选择构件实例23计数循环构件实例24变量组构件实例25时间计算构件实例26公用事件构件实例27字符串加密构件实例28数字格式构件实例29字符串操作构件实例30事件发生器构件实例31混合编程小实例模拟红绿灯程序32总结 

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧