1. 编写一个简单计算器
思路:
1. 设置0-9数字,小数点,+,-,*,/,=按钮。
2. 为了方便获取用户输入的操作数和操作符,设置三个文本框,第一个文本框专门用于用户输入第一操作数和第二操作数,第二个文本框用于给用户输入操作符并显示,第三个文本框用于显示第一操作数和运算结果。
3. 当点击数字按钮时,第一个文本框后面连接数字。
4. 当点击操作符按钮时,作处理:将第一个文本框中显示的第一操作数移到第三个文本框,并在第二个文本框中显示操作符。对各个操作符,要考虑异常情况。
5. 输入第二个操作数后,按=时,取第一个文本框中的第一操作数,取第二个文本框中的操作符,取第三文本框中的第二操作数,运算后,将结果显示在第一文本框中。
源代码:
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;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:double;
b:double;
result:double;
str:string;
c:integer=0;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'1'
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'2'
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'3'
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'4'
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'5'
end;
procedure TForm1.Button10Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'6'
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'7'
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'8'
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'9'
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'.'
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
edit3.Text:='+';
if edit2.text<>'' then
edit1.text:=edit2.Text;
edit2.Text:='';
c:=1;
end;
procedure TForm1.Button15Click(Sender: TObject);
begin
edit3.Text:='-';
if edit2.text<>'' then
edit1.text:=edit2.Text;
edit2.Text:='';
c:=2;
end;
procedure TForm1.Button14Click(Sender: TObject);
begin
edit3.Text:='*';
if edit2.text<>'' then
edit1.text:=edit2.Text;
edit2.Text:='';
c:=3;
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
edit3.Text:='/';
if edit2.text<>'' then
edit1.text:=edit2.Text;
edit2.Text:='';
c:=4;
end;
procedure TForm1.Button12Click(Sender: TObject);
begin
if edit1.text<>'' then
a:=strtofloat(edit1.Text);
if edit2.text<>'' then
b:=strtofloat(edit2.text);
case c of
1:result:=a+b;
2:result:=a-b;
3:result:=a*b;
4:result:=a/b;
0:result:=b;
end;
edit1.text:=floattostr(result);
edit2.text:='';
edit3.Text:='';
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Edit2.text:=edit2.Text+'0'
end;
end.
运行截图:
心得体会:
在这次实验中我做了一个最简单的计算器,只能实现+,-,*,/功能,并设置了三个文本框来使问题更简单化,对目前市场上的计算器,基本上只有一个文本框,这个可以通过对按下操作符按钮后响应的做处理来实现.(按下操作符按钮时,使用一个变量存下第一操作数,和一个变量记录操作符)。
2. 编写一个程序,读入四对数据作为四边形的四个顶点的坐标值,并确定四边形是矩形还是正方形或其它形状。
思路:
1. 由于矩形具有这么一个特性:任意两点间距离与另两个顶点间距离相等。所以对于输入的四个顶点,只要判断三组没有公共顶点的线段长度是否相等即可
2. 对于正方形,在矩形的基础上再加上一个条件:具有公共顶点的两条边长度也相等。
3. 具体实现:通过if else语句。对应于输入的不同的四对数据,可以输出以下三个信息中的一种:
1) 输入的四个点可以构成正方形。
2) 输入的四个点可以构成矩形,但不能构成正方形。
3) 输入的四个点即不能构成正方形,也不能构成矩形。
源代码:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type tposition=record
x,y:real;
end;
var p1,p2,p3,p4:tposition;
var l12,l13,l14,l23,l24,l34:real;
begin
write('请输入p1点坐标:');
read(p1.x,p1.y);
write('请输入p2点坐标:');
read(p2.x,p2.y);
write('请输入p3点坐标:');
read(p3.x,p3.y);
write('请输入p4点坐标:');
read(p4.x,p4.y);
l12:=(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
l13:=(p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p1.y-p3.y);
l14:=(p1.x-p4.x)*(p1.x-p4.x)+(p1.y-p4.y)*(p1.y-p4.y);
l23:=(p2.x-p3.x)*(p2.x-p3.x)+(p2.y-p3.y)*(p2.y-p3.y);
l24:=(p4.x-p2.x)*(p4.x-p2.x)+(p4.y-p2.y)*(p4.y-p2.y);
l34:=(p3.x-p4.x)*(p3.x-p4.x)+(p3.y-p4.y)*(p3.y-p4.y);
if(l12=l34)and (l13=l24)and(l14=l23)then
begin
if (l12=l13)then
writeln('输入的四个点可以构成正方形。');
if (l12<>l13)then
writeln('输入的四个点可以构成矩形,但不能构成正方形。');
end
else
writeln('输入的四个点即不能构成正方形,也不能构成矩形。');
readln;
readln;
end.
运行结果截图:
心得体会:
对于一个计算几何题目:一个好的算法总是占很大优势,不仅在代码长度上,有时在代码效率(包括时间,空间)等也能有很大的提高。