請問有關For迴圈 比較的問題 |
尚未結案
|
nomaid
一般會員 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
不好意思 小弟又來打擾了..
小弟想再請教各位前輩一個問題
就是 我現在能夠傳核取方塊的值到變數裡面
現在要讓他跟我自行輸入的六個值比較
可是比較出來一樣的點數 卻不是正確的 以下是我的程式碼
還請各位前輩能撥空再幫小弟看一下 哪裡有bug
麻煩各位前輩了!!
一.比較的程序 procedure atoc;
var a,b :integer;
begin
def := 0;
for b := 1 to 6 do
for a := 1 to num do
if aball[a] = ball[b] then Inc(def);
end; 二.存取變數及秀出 procedure TForm1.Button3Click(Sender: TObject);
begin
num:=0;
for i:= 1 to 6 do
begin
aedit:= TEdit(FindComponent('Edit' InttoStr(i)));
ball[i]:= StrtoInt(aedit.text);
end; for i := 1 to 49 do
begin
acheckbox:= TCheckBox(FindComponent('Checkbox' InttoStr(i)));
if acheckbox.enabled=true then
if acheckBox.Checked=true then
begin
aball[i]:= i;
num:=num 1;
end;
end;
atoc;
showmessage('your choose have' inttostr(def) 'point');
end;
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: nomaid您好: 不知您有无测试过我给您的程式,那不是您所需吗?您自行输入6个数字至Edit1~Edit6中,然后对CheckBox1~CheckBox49这49个CheckBox进行勾选,对所勾选的序号(还是checkBox的caption,下有两种写法)与前您自行输入的6个数字,进行比较,得出相同的个数来;<> ============================= 为什么经过多年以后,得失的过程如此冷漠 ============================= >Procedure atoc; var a,b :integer; begin def := 0; for b :=1 to 6 do for a :=1 to 49 do //for i:=1 to num do //如果说您写成这样,不知您的意图究竟为何? //??此处比较,怎么又从1~num呢,如果您选取了48,49的话,num的值是2 //这样比较就是ball[1]~ball[6]和aball[1]~aball[2]比较, //而不是和aball[48]~aball[49]比较,与您的要求不符吧? if ball[b]=aball[a] then Inc(def); end; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Clear; Memo2.Lines.Clear; num:=0; for i:= 1 to 6 do begin aedit:= TEdit(FindComponent('Edit' InttoStr(i))); ball[i]:= StrtoInt(aedit.text); //ball[i]的值是输入至Edit的值 Memo1.Lines.Add(format('ball[%d]=%d',[i,ball[i]])); //加多一个memo供查看值 end; for i := 1 to 49 do begin acheckbox:= TCheckBox(FindComponent('Checkbox' InttoStr(i))); if acheckbox.enabled=true then if acheckBox.Checked=true then begin aball[i]:= i; //注意您这里所获取的abll[i]的值,不是CheckBox里的值,而是您所选取CheckBox的序号 // aball[i]:=inttostr(acheckBox.Caption); //要想取CheckBox里的Caption,得这样子写 Memo2.Lines.Add(format('aball[%d]=%d',[i,aball[i]]));//加多一个memo供查看值 num:=num 1; //选取的数目,没用处 end; end; showmessage('the checked number is' inttostr(num));//查看选取的数目,其实是没什么作用 atoc; //对此两组数进行比较 showmessage('your choose have ' inttostr(def) ' point');//显示相同的数 end;note:注意查看两个Memo的内容,看是不是正确的,您所要的,试试看 |
nomaid
一般會員 發表:6 回覆:9 積分:3 註冊:2004-11-05 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 已將 程式碼一的內容修改成 for a:= 1 to num do // 將程式碼二的num值傳入這邊計算總共有幾個欄位值 所以希望能請您再幫我看一下其他地方是否有需要在修改的地方其实我上面红色部分已经解释很清楚了 就那您选取了两个checkbox来说吧,假如您选取了CheckBox45和Checkbox49,则num的值应该等于2吧,那将其代入您的比较程式中,您可以看出 for b := 1 to 6 do for a := 1 to 2 do //这里Num=2 if aball[a] = ball[b] then Inc(def); 则您所做的比较是不是 ball[1]~ball[6]这6个数分别与 aball[1]~abll[2]这2个数进行比较 但其实真正的来说,应该是 ball[1]~ball[6]这6个数分别与 aball[45]~abll[49]这2个数进行比较 所以回传值是错的。 您可以看两个memo所得出来的结果就知道,并非是aball[1]和aball[2],而是aball[45]和aball[49],注意查看memo的值,不知这样子说,会不会明白点 所以用num是错误的,具体您可以认真了解程式和各项的作用,仔细对比下,就会明白 <> ============================= 为什么经过多年以后,得失的过程如此冷漠 ============================= > |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
因為樂透的發行,對於相關程式的需求或者說感到興趣
的情況,在許多論壇都有人提起,以下是我個人對於這類
程式比較喜歡的做法,它具有較好的彈性,提供你做為參考.
你可以另開專案試試看.
unit LottoMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst; type TLotto = 1..49; TLottoSet = set of TLotto; TfrmLotto = class(TForm) CheckListBox1: TCheckListBox; Label1: TLabel; btnClear1: TButton; btnClear2: TButton; CheckListBox2: TCheckListBox; Label2: TLabel; btnUnion: TButton; Label3: TLabel; btnIntersect: TButton; btnSubtract: TButton; procedure btnClear1Click(Sender: TObject); procedure btnClear2Click(Sender: TObject); procedure CheckListBox1ClickCheck(Sender: TObject); procedure CheckListBox2ClickCheck(Sender: TObject); procedure btnUnionClick(Sender: TObject); procedure btnIntersectClick(Sender: TObject); procedure btnSubtractClick(Sender: TObject); private LS1, LS2: TLottoSet; public function DisplayLottoSet(LS: TLottoSet): string; end; function LottoSetToStr(LS: TLottoSet): string; function CountOf(LS: TLottoSet): Integer; var frmLotto: TfrmLotto; implementation {$R *.dfm} function LottoSetToStr(LS: TLottoSet): string; var L: TLotto; begin Result := ''; for L := Low(L) to High(L) do if L in LS then Result := Result + Format('%2.2d,', [L]); if Result = '' then Result := '[]' else begin Result := '[' + Result; Result[Length(Result)] := ']'; end; end; function CountOf(LS: TLottoSet): Integer; var L: TLotto; begin Result := 0; for L := Low(L) to High(L) do if L in LS then Inc(Result); end; function TfrmLotto.DisplayLottoSet(LS: TLottoSet): string; begin Result := IntToStr(CountOf(LS)) + LottoSetToStr(LS); end; procedure TfrmLotto.btnClear1Click(Sender: TObject); var I: Integer; begin with CheckListBox1 do for I := 0 to Items.Count-1 do Checked[I] := False; LS1 := []; Label1.Caption := DisplayLottoSet(LS1); end; procedure TfrmLotto.btnClear2Click(Sender: TObject); var I: Integer; begin with CheckListBox2 do for I := 0 to Items.Count-1 do Checked[I] := False; LS2 := []; Label2.Caption := DisplayLottoSet(LS2); end; procedure TfrmLotto.CheckListBox1ClickCheck(Sender: TObject); var L: TLotto; C: Boolean; begin with CheckListBox1 do if ItemIndex > -1 then begin C := Checked[ItemIndex]; L := ItemIndex + 1; if C then LS1 := LS1 + [L] else LS1 := LS1 - [L]; Label1.Caption := DisplayLottoSet(LS1); end; end; procedure TfrmLotto.CheckListBox2ClickCheck(Sender: TObject); var L: TLotto; C: Boolean; begin with CheckListBox2 do if ItemIndex > -1 then begin C := Checked[ItemIndex]; L := ItemIndex + 1; if C then LS2 := LS2 + [L] else LS2 := LS2 - [L]; Label2.Caption := DisplayLottoSet(LS2); end; end; procedure TfrmLotto.btnUnionClick(Sender: TObject); begin//聯集 Label3.Caption := DisplayLottoSet(LS1+LS2); end; procedure TfrmLotto.btnIntersectClick(Sender: TObject); begin//交集 Label3.Caption := DisplayLottoSet(LS1*LS2); end; procedure TfrmLotto.btnSubtractClick(Sender: TObject); begin//差異 Label3.Caption := DisplayLottoSet(LS1-LS2); end; end.另外可以參考這一篇 也許對你有幫助 http://forum.vclxx.org/topic.php?TOPIC_ID=13388&FORUM_ID=3&CAT_ID=2&Topic_Title=%BC%D6%B3z%C0H%BE%F7%BF%EF%B8%B9%AA%BA%B0%DD%C3D&Forum_Title=Misc |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |