流星一瞬间 发表于 2012-2-22 13:34:16

小甲鱼的基本数据类型与表达式的课后题问题

本帖最后由 乐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-22 13:34:17

本帖最后由 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; 这行代码来运行看看。你会发现,每次重新运行程序,第一次按下按钮,生成的数字总是一样的,之后的也是。


天殇 发表于 2012-2-22 14:33:32

random函数返回的是0以上的整数,我也是初学者,你应该把那个project文件都放上来,看看到底报错是什么。

天殇 发表于 2012-2-22 14:37:56

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.

bafengao 发表于 2012-2-23 14:19:01

想学习呀!!!!

流星一瞬间 发表于 2012-2-24 00:26:33

comeheres 发表于 2012-2-23 13:54 static/image/common/back.gif
LZ没搞懂random函数的使用方法。

function Random [ ( Range: Integer) ];


谢谢你太感谢了! 看来我学的太粗糙了,呵呵

comeheres 发表于 2012-2-24 00:41:54

流星一瞬间 发表于 2012-2-24 00:26 static/image/common/back.gif
谢谢你太感谢了! 看来我学的太粗糙了,呵呵

{:5_92:}不谢不谢,我也是过来人

流星一瞬间 发表于 2012-2-24 00:43:12

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 都可以去掉的

comeheres 发表于 2012-2-24 00:48:51

流星一瞬间 发表于 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('成功');

试试

流星一瞬间 发表于 2012-2-24 00:51:17

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后,点击验证时,弹出的确是说错误!我很纳闷啊。您知道怎么回事不?

comeheres 发表于 2012-2-24 00:51:35

流星一瞬间 发表于 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

comeheres 发表于 2012-2-24 00:53:11

流星一瞬间 发表于 2012-2-24 00:51 static/image/common/back.gif
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...

运行程序后,你先输入3,再按验证也会显示错误?

comeheres 发表于 2012-2-24 00:54:22

流星一瞬间 发表于 2012-2-24 00:51 static/image/common/back.gif
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...

你在编辑框3输入03试试,估计你把StrToInt去了吧

流星一瞬间 发表于 2012-2-24 00:55:34

comeheres 发表于 2012-2-24 00:51 static/image/common/back.gif
Edit1.Text:='1';
Edit2.Text:='2';



呵呵你好聪明啊!! 一语点醒梦中人啊,呵呵   一下子连我刚才的问题也给解决了,感谢 呵呵

流星一瞬间 发表于 2012-2-24 00:57:26

comeheres 发表于 2012-2-24 00:54 static/image/common/back.gif
你在编辑框3输入03试试,估计你把StrToInt去了吧

呵呵我是把strtoint给去掉了呵呵这都被你猜到了 呵呵   我现在明白了!!哈哈 高高兴兴睡觉去了。你也该休息了~~~

comeheres 发表于 2012-2-24 01:00:39

流星一瞬间 发表于 2012-2-24 00:55 static/image/common/back.gif
呵呵你好聪明啊!! 一语点醒梦中人啊,呵呵   一下子连我刚才的问题也给解决了,感谢 呵呵

呵呵,以前上课学过C,一些基础知识基本都是通用的。

comeheres 发表于 2012-2-24 01:03:25

对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在使用Random函数前,加上这行代码

Randomize;

流星一瞬间 发表于 2012-2-24 01:16:14

comeheres 发表于 2012-2-24 01:03 static/image/common/back.gif
对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在 ...

嗯!不过Randomize我好像第一次接触哦以前还没见过,也没见小鱼讲哦呵呵

1588/足球 发表于 2012-5-17 10:37:05

这是楼主上课不认真了

adslbase 发表于 2012-11-20 20:16:19

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]
查看完整版本: 小甲鱼的基本数据类型与表达式的课后题问题