DELPHI 怎么判断5个数字中是否有已知的3个数?
我把一张表导入了DBGrid中.一共是10条记录.每条记录都是一种中奖号码,如,01,03.05.06.08我想做到的是,如果中三个号就中奖.比如中01.03.06就算中...
我把一张表导入了DBGrid中. 一共是10条记录.
每条记录都是一种中奖号码,如,01,03.05.06.08
我想做到的是,如果中三个号就中奖.比如中01.03.06就算中奖.
我怎么知道哪条记录中奖呢??
应该怎么做.我真是一点头绪也没有.请高手指点一二.多谢 展开
每条记录都是一种中奖号码,如,01,03.05.06.08
我想做到的是,如果中三个号就中奖.比如中01.03.06就算中奖.
我怎么知道哪条记录中奖呢??
应该怎么做.我真是一点头绪也没有.请高手指点一二.多谢 展开
1个回答
展开全部
将中奖号码01.03.06放到一个StringList中,在每行中调用如下函数对进行号码字段进行判断是否中奖。
假设:号码字段依次为F1,F2,...F6,StringList为bonus
Function isWinner(ds : TDateSet, bonus: TStrings) : Boolean;
var
cnt, i : Integer;
begin
cnt := 0;
for i := 1 to 6 do begin
if bonus.indexOf(ds.FieldByName('F' + i).asString) >= 0 then
cnt := cnt + 1;
if cnt >= 3 then
isWinner := TRUE;
end;
isWinner := FALSE;
end;
假设:号码字段依次为F1,F2,...F6,StringList为bonus
Function isWinner(ds : TDateSet, bonus: TStrings) : Boolean;
var
cnt, i : Integer;
begin
cnt := 0;
for i := 1 to 6 do begin
if bonus.indexOf(ds.FieldByName('F' + i).asString) >= 0 then
cnt := cnt + 1;
if cnt >= 3 then
isWinner := TRUE;
end;
isWinner := FALSE;
end;
追问
十分感谢大哥的回答,小D实在太笨..是菜鸟中的菜鸟
您给的这代码我应该放在哪里?? 我放程序里时,运行通不过
[Error] Unit1.pas(79): Undeclared identifier: 'TDateSet'
[Error] Unit1.pas(85): ')' expected but identifier 'FieldByName' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
实在不好意思.还请大哥看一下.一定多加分.
追答
不好意思,TDateSet写错,应为TDataSet,就是数据集控件
这个自定义函数,放在调用处的前面就可以了。关键是你要在哪调用?
还有参数ds要传TDataSet的名称,bonus也要初始化放入中奖数字后再传入,
bonus := TStringList.create;
bonus.add('01');
bonus.add('03');
bonus.add('06');
DataSet1.First; // 从第一条开始
while NOT DataSet1.EOF do begin
if (isWinner(DataSet1, bonus)) then // 调用自定义函数
showMessage('中奖号码:'
+ DataSet1.FieldByName('F1').asString + ","
+ DataSet1.FieldByName('F2').asString + ","
+ DataSet1.FieldByName('F3').asString + ","
+ DataSet1.FieldByName('F4').asString + ","
+ DataSet1.FieldByName('F5').asString + ","
+ DataSet1.FieldByName('F6').asString); // 用showMessage显示中奖的记录
DataSet1.Next; // 下一条记录
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询