鱼C论坛

 找回密码
 立即注册
查看: 4688|回复: 19

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

[复制链接]
发表于 2012-2-22 13:34:16 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 乐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;

结果是运行不起来,大家帮我看看,哪句错了,错了几个地方,该怎么改了???谢谢

delphi.rar

7.96 KB, 下载次数: 21

程序界面

最佳答案

查看完整内容

LZ没搞懂random函数的使用方法。 function Random [ ( Range: Integer) ]; 随机产生一个X,且0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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; 这行代码来运行看看。你会发现,每次重新运行程序,第一次按下按钮,生成的数字总是一样的,之后的也是。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-22 14:33:32 | 显示全部楼层
random函数返回的是0以上的整数,我也是初学者,你应该把那个project文件都放上来,看看到底报错是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-23 14:19:01 | 显示全部楼层
想学习呀!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 00:26:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 00:41:54 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:26
谢谢你  太感谢了! 看来我学的太粗糙了,呵呵

不谢不谢,我也是过来人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 00:43:12 | 显示全部楼层
comeheres 发表于 2012-2-23 13:54
LZ没搞懂random函数的使用方法。

function Random [ ( Range: Integer) ];

if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then

此句中:StrToInt 都可以去掉的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 00:48:51 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:43
if StrToInt(Edit3.Text)=StrToInt(Edit1.Text) + StrToInt(Edit2.Text) then

此句中:StrToInt 都可以 ...

。。。。。。。。不能去吧

你试试添加三个输入框和一个按钮,再用
if Edit3.Text=Edit1.Text + Edit2.Text  then
ShowMessage('成功');

试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 00:51:17 | 显示全部楼层
comeheres 发表于 2012-2-23 13:54
LZ没搞懂random函数的使用方法。

function Random [ ( Range: Integer) ];

出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3,之和为3.但是我在edit3中输入3后,点击验证时,弹出的确是说错误!我很纳闷啊。您知道怎么回事不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 00:51:35 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:43
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 00:53:11 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:51
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...

运行程序后,你先输入3,再按验证也会显示错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 00:54:22 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:51
出现个问题。edit3我不让它随机产生,而是自己输入数值,而且我发现了规律就是edit1和edit2第一次随机产生 ...

你在编辑框3输入03试试,估计你把StrToInt去了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 00:55:34 | 显示全部楼层
comeheres 发表于 2012-2-24 00:51
Edit1.Text:='1';
Edit2.Text:='2';

呵呵  你好聪明啊!! 一语点醒梦中人啊,呵呵   一下子连我刚才的问题也给解决了,感谢 呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 00:57:26 | 显示全部楼层
comeheres 发表于 2012-2-24 00:54
你在编辑框3输入03试试,估计你把StrToInt去了吧

呵呵  我是把strtoint给去掉了  呵呵  这都被你猜到了 呵呵   我现在明白了!!哈哈 高高兴兴睡觉去了。你也该休息了~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 01:00:39 | 显示全部楼层
流星一瞬间 发表于 2012-2-24 00:55
呵呵  你好聪明啊!! 一语点醒梦中人啊,呵呵   一下子连我刚才的问题也给解决了,感谢 呵呵

呵呵,以前上课学过C,一些基础知识基本都是通用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 01:03:25 | 显示全部楼层
对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在使用Random函数前,加上这行代码

Randomize;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 01:16:14 | 显示全部楼层
comeheres 发表于 2012-2-24 01:03
对了,针对“而且我发现了规律就是edit1和edit2第一次随机产生的数值肯定是一个0一个3”这个问题,建议你在 ...

嗯!  不过Randomize  我好像第一次接触哦  以前还没见过,也没见小鱼讲哦  呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-17 10:37:05 | 显示全部楼层
这是楼主上课不认真了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表