小甲鱼的基本数据类型与表达式的课后题问题
本帖最后由 乐yi忘忧 于 2012-5-17 20:07 编辑题目要求:在edit1 和edit2 的两个随机任意数值进行相加,如果二者之和等于edit3的数值,弹出 正确对话框,否则 关闭。
我设计的界面如图:(由于不会传图片,就把界面放到附件吧,不好意思,我很菜)
我的源代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
x:real;
y:real;
z:real;
begin
x:=strtoint(edit1.text);
y:=strtoint(edit2.text);
z:=strtoint(edit3.text);
if z=random(x)+random(y) then
showmessage('正确')
else
close;
end;
结果是运行不起来,大家帮我看看,哪句错了,错了几个地方,该怎么改了???谢谢
本帖最后由 comeheres 于 2012-2-23 14:06 编辑
LZ没搞懂random函数的使用方法。
function Random [ ( Range: Integer) ];
随机产生一个X,且0 <= X < Range。你写成了random(x)、random(y)是错误的。random(x) 生成一个大于等于0,且小于x的数,这不是让系统为难嘛,x是多少都不知道。所以random()的括号里必须是一个Integer 类型的数值。
下面是我随手写的,可以参考procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;//初始化随机数发生器,否则random产生的数字还是有规律的
Edit1.Text :=IntToStr(Random(10));//随机产生一个大于等于0,且小于10的数字,转换成字符变量后赋值给Edit1.text
Edit2.Text :=IntToStr(Random(10));
Edit3.Text :=IntToStr(Random(19));
if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then
showmessage('正确')
else
showmessage('错误'); //可以使用close; 来关闭
end;
你也可以去掉Randomize; 这行代码来运行看看。你会发现,每次重新运行程序,第一次按下按钮,生成的数字总是一样的,之后的也是。
random函数返回的是0以上的整数,我也是初学者,你应该把那个project文件都放上来,看看到底报错是什么。 if还要有括号等等,看见代码就有点头大了。这个例子我貌似做了。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
lbl4: TLabel;
edt1: TEdit;
btn1: TButton;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var s1:Integer;
s2:Integer;
result:Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
s1:=Random(100);
s2:=Random(100);
s1:=Random(100);
s2:=Random(100);
lbl1.Caption:=IntToStr(s1);
lbl2.Caption:=IntToStr(s2);
result:=s1+s2;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
if(StrToInt(edt1.Text)=result)then
MessageBox(Handle,'恭喜你,回答正确','程序提示',MB_OKCANCEL)
else
ShowMessage('回答错误,幼儿园没毕业');
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
s1:=Random(100);
s2:=Random(100);
s1:=Random(100);
s2:=Random(100);
lbl1.Caption:=IntToStr(s1);
lbl2.Caption:=IntToStr(s2);
result:=s1+s2;
end;
end. 想学习呀!!!! comeheres 发表于 2012-2-23 13:54 static/image/common/back.gif
LZ没搞懂random函数的使用方法。
function Random [ ( Range: Integer) ];
谢谢你太感谢了! 看来我学的太粗糙了,呵呵 流星一瞬间 发表于 2012-2-24 00:26 static/image/common/back.gif
谢谢你太感谢了! 看来我学的太粗糙了,呵呵
{:5_92:}不谢不谢,我也是过来人 comeheres 发表于 2012-2-23 13:54 static/image/common/back.gif
LZ没搞懂random函数的使用方法。
function Random [ ( Range: Integer) ];
if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then
此句中:StrToInt 都可以去掉的 流星一瞬间 发表于 2012-2-24 00:43 static/image/common/back.gif
if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then
此句中:StrToInt 都可以 ...
。。。。。。。。不能去吧
你试试添加三个输入框和一个按钮,再用
if Edit3.Text=Edit1.Text + Edit2.Textthen
ShowMessage('成功');
试试 comeheres 发表于 2012-2-23 13:54 static/image/common/back.gif
LZ没搞懂random函数的使用方法。
function Random [ ( Range: Integer) ];
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3,之和为3.但是我在edit3中输入3后,点击验证时,弹出的确是说错误!我很纳闷啊。您知道怎么回事不? 流星一瞬间 发表于 2012-2-24 00:43 static/image/common/back.gif
if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then
此句中:StrToInt 都可以 ...
Edit1.Text:='1';
Edit2.Text:='2';
Edit1.Text + Edit2.Text的值是12了,而不是1+2=3 流星一瞬间 发表于 2012-2-24 00:51 static/image/common/back.gif
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...
运行程序后,你先输入3,再按验证也会显示错误? 流星一瞬间 发表于 2012-2-24 00:51 static/image/common/back.gif
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...
你在编辑框3输入03试试,估计你把StrToInt去了吧 comeheres 发表于 2012-2-24 00:51 static/image/common/back.gif
Edit1.Text:='1';
Edit2.Text:='2';
呵呵你好聪明啊!! 一语点醒梦中人啊,呵呵 一下子连我刚才的问题也给解决了,感谢 呵呵 comeheres 发表于 2012-2-24 00:54 static/image/common/back.gif
你在编辑框3输入03试试,估计你把StrToInt去了吧
呵呵我是把strtoint给去掉了呵呵这都被你猜到了 呵呵 我现在明白了!!哈哈 高高兴兴睡觉去了。你也该休息了~~~ 流星一瞬间 发表于 2012-2-24 00:55 static/image/common/back.gif
呵呵你好聪明啊!! 一语点醒梦中人啊,呵呵 一下子连我刚才的问题也给解决了,感谢 呵呵
呵呵,以前上课学过C,一些基础知识基本都是通用的。 对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在使用Random函数前,加上这行代码
Randomize; comeheres 发表于 2012-2-24 01:03 static/image/common/back.gif
对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在 ...
嗯!不过Randomize我好像第一次接触哦以前还没见过,也没见小鱼讲哦呵呵 这是楼主上课不认真了 unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
x:String;
y:String;
begin
Randomize;
Edit1.Text:=IntToStr(Random(100));
Edit2.Text:=IntToStr(Random(100));
x:= Edit1.Text;
y:= Edit2.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x:String;
y:String;
z:String;
r:Integer;
i:Integer;
begin
x:=Edit1.Text;
y:=Edit2.Text;
z:=Edit3.Text;
r:=StrToInt(x) + StrToInt(y);
i:=CompareStr(IntToStr(r),z); //判断开始
if(i<>0) then
close
else
ShowMessage('回答正确,幼儿园毕业了');
end;
end.
页:
[1]