線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2077
推到 Plurk!
推到 Facebook!

設計一模擬樂透彩開獎號碼程式

尚未結案
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-01 14:29:39 IP:203.69.xxx.xxx 未訂閱
系統要求: 1.由使用者自行輸入 所要選取之開獎號碼 n (內含n -1個一般號及1個特別號 , 例如 使用者輸入8 亦即要 開出7個一般號 及1個特別號)。 2.再由 1到49 數字中隨機亂數選取 n 個號碼 。 3.此 n 個號碼中 一般號均不得重複, 但特別號允許與一般號重複。 4.選取完畢後再將此 n 個數字 由畫面印出。 能教教我這程式該如何下手嗎? 及用哪種程式語言寫最好呢? 亦希望能有類似的程式碼能提供給我,麻煩各位高手了!
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-01 15:19:55 IP:210.64.xxx.xxx 未訂閱
當然用delphi寫最好啦! 至於如何下手,看妳依序列出4點,可見妳的思路蠻清楚滴, 只是程式不知如何下手吧!妳不如把這個程式當作學習delphi的 好題材,至市面上買小誌寫的「delphi入門與實作」,裡面有 猜數字遊戲,可以參考改寫成妳要的功能唷!        
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-01 19:05:58 IP:210.243.xxx.xxx 未訂閱
給你一點點code其它的你自己來吧....    
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: Integer;
begin
  Randomize;
  for i:=0 to 6 do
  begin
    j:= Random(49);
    Memo1.Lines.Add(IntToSTr(j));
  end;
end;
1.裡面已經有隨機抓的方法了 2.也有抓幾次的方法(把6改成變數就好) 3.如果你要判斷是否有重覆,就在random出來的變數j多跑一個迴圈判斷就好 ,如果j和之前跑出來放在memo1中的值重覆再跑一次random就ok啦.... 程式難度不高,所以你可以自己玩,給你一小段code方便你著手囉.... 不過其實也差不多了耶...^^ 發表人 - jimmy_wei 於 2004/12/01 19:17:02
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-02 02:23:26 IP:221.169.xxx.xxx 未訂閱
我的手上只有一本DELPHI的書, 書名是DELPHI 7 實例領航手冊, 不知用不用的上, 但還是先謝謝你們的提示。
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-02 10:21:59 IP:61.60.xxx.xxx 未訂閱
我寫了個範例讓你參考,祝順心!!    void __fastcall TForm1::Button1Click(TObject *Sender) {     int tab[50];        //存隨機選號     int ball,num,i,j,k;        for(i=0;i<50;i ) tab[i]=0; ball=Edit1->Text.ToInt(); //Edit內輸入你的n if(ball>49 ||ball<=1) return; // i=1; while(i<=ball) { num=random(49) 1; for(j=0;j=i) //沒重複 { tab[j-1]=num; i ; } } tab[ball]=random(49) 1; //特別號允許與一般號重複 //顯示出來 AnsiString str=""; for(i=0;iCaption=str; //用Label輸出 }
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-02 15:27:26 IP:210.243.xxx.xxx 未訂閱
樓上的.... 你的程式出了一個大問題.....你有沒有發現 你每一次跑出來的資料都一樣.... 不信你可以試試看.... 永遠都是同樣的七個號碼喔..... 你少了一行指令,加上去才會對喔^^ Randomize;
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-02 16:04:59 IP:61.60.xxx.xxx 未訂閱
抱歉!! 其實我有試過 只是貼上來的時候迴圈語法 不知道怎會不一樣,我測過再貼一次    void __fastcall TForm1::Button1Click(TObject *Sender) {     int tab[50]; //存隨機選號     int ball,num,i,j,k;        for(i=0;i<50;i ) tab[i]=0; ball=Edit1->Text.ToInt(); //Edit內輸入你的n if(ball>49 ||ball<=1) return; // i=1; while(i<=ball) { num=random(49) 1; for( j=0;j< i; j ) { if(num==tab[j]) break; } if(j>=i) //沒重複 { tab[j-1]=num; i ; } } tab[ball]=random(49) 1; //特別號允許與一般號重複 //顯示出來 AnsiString str=""; for( i=0; i< ball; i ) { j=tab[i]; if(j<10) str ="0"; str =IntToStr(j); str =" "; } Label1->Caption=str; //用Label輸出 }
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-04 08:58:44 IP:203.69.xxx.xxx 未訂閱
樓上的,請問一下,為什麼我直接copy你的程式碼到DELPHI 7去, 結果有一堆錯誤耶!為什麼會這樣子啊! *颱風天、卻是值班天,利用上班時間努力寫程式中!*
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-04 09:02:11 IP:218.170.xxx.xxx 未訂閱
引言: 樓上的,請問一下,為什麼我直接copy你的程式碼到DELPHI 7去, 結果有一堆錯誤耶!為什麼會這樣子啊! *颱風天、卻是值班天,利用上班時間努力寫程式中!*
樓上的,你說的再樓上的程式碼是C Builder的語法,你當然不能在delphi中用了
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-04 11:00:23 IP:221.239.xxx.xxx 未訂閱
參照stellos大大提供的,改成delphi 先在form上取個botton & memo元件,然後    procedure TForm1.Button1Click(Sender: TObject); var   tab:array[0..49] of integer;   i,j,num,ball:integer;   v_found:boolean; begin     Memo1.Lines.Clear;     ball:=strtoint(Edit1.text); //Edit內輸入你的n     // if(ball>49 ||ball<=1) return; // 在Edit1內設定,或用其他專輸數字的Edit     i:=0;     while i
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-04 11:16:57 IP:203.69.xxx.xxx 未訂閱
implementation var n:Integer; {$R *.dfm} procedure angain(); begin Form1.Edit1.Text:=''; Form1.Memo1.Lines.Clear; Form1.Memo2.Lines.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.FormCreate(Sender: TObject); begin angain; Label1.Width:=210; Label1.Height:=35; Label2.Width:=90; Label2.Height:=35; Label3.Width:=90; Label3.Height:=35; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var a,b,i,j,k: Integer; begin n:=StrToInt(Edit1.Text); k:=n-1; for a:=1 to k do begin Randomize; i:= Random(49); Memo1.Lines.Add(IntToStr(i)); end; for b:=1 to 1 do begin Randomize; j:= Random(49); Memo2.Lines.Add(IntToStr(j)); end; end; **請問一下,我這樣寫是錯在哪啊?英文看不到懂說~麻煩大家了!
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-04 11:42:22 IP:221.239.xxx.xxx 未訂閱
1.不要在Edit1KeyPress開始算,在botton按下來算會好一些 2.implementation var n:Integer;這兒錯了,n宣告應該放在 private n:integer; { Private declarations } public { Public declarations }這兒才對 3.程式內容走錯路了哦.
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-12-04 11:45:45 IP:218.170.xxx.xxx 未訂閱
請學習如何讓程式碼可以顯示縮排,謝謝 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7326
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-12-04 13:31:03 IP:203.69.xxx.xxx 未訂閱
 
procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,i,j,k: Integer;
begin
  n:=StrToInt(Edit1.Text);
  k:=n-1;      for a:=1 to k do
  begin
    Randomize;
    i:= Random(49);
    Memo1.Lines.Add(IntToStr(i));
  end;      for b:=1 to 1 do
  begin
    Randomize;
    j:= Random(49);
    Memo2.Lines.Add(IntToStr(j));
  end;
end;
我這樣寫有兩個漏洞,不知如何修改,可以請大家幫幫我嗎? 1.i的值會重覆出現 2.i及j的值是從0~49去亂數取樣的,但我要從1~49,該怎樣去修改呢? 另外
  for b:=1 to 1 do
  begin
    Randomize;
    j:= Random(49);
    Memo2.Lines.Add(IntToStr(j));
  end;
特別號我這樣寫會不會很怪啊!?該怎樣去修改呢?
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-12-04 14:08:13 IP:221.239.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
  tab:array[0..49] of integer;
  i,j,num,ball:integer;
  v_found:boolean;
begin
  Memo1.Lines.Clear;
  ball:=strtoint(Edit1.text); //Edit內輸入你的n
  // if(ball>49 ||ball<=1) return; // 在Edit1內設定,或用其他專輸數字的Edit
  i:=0;
  while i begin
    v_found:=False;
    randomize;
    num:=random(49) 1;
    for j:=0 to i do
      if num=tab[j] then
    v_found:=True;
    if not v_found then //沒重複
    begin
      tab[i]:=num;
      Memo1.Lines.Add(IntToSTr(num));
      inc(i);
    end;
  end;
  randomize;
  Memo1.Lines.Add(IntToSTr(random(49) 1)); //特別號允許與一般號重複
end;
為何不試試我轉翻譯stellos的程式呢? 試試後你再去學裡頭的用法. 只要補上一個edit,botton,memo,把這段貼在botton的按下觸發事件上,就能看到資料了
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-12-04 14:43:42 IP:203.69.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
  tab:array[1..49] of integer;
  i,j,num,ball:integer;
  v_found:boolean;
begin
  Memo1.Lines.Clear;
  ball:=strtoint(Edit1.text); //Edit內輸入你的n
  // if(ball>49 ||ball<=1) return; // 在Edit1內設定,或用其他專輸數字的Edit
  i:=1;
 while i begin 
    v_found:=False;
    randomize;
    num:=random(49) 1;
    for j:=0 to i do
      if num=tab[j] then
      v_found:=True;
    if not v_found then //沒重複
      begin
        tab[i]:=num;
        Memo1.Lines.Add(IntToSTr(num));
        inc(i);
      end;      end;
出現以下的錯誤訊息耶! Missing operator or semicolon 指向紅色那行字!
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-12-04 15:18:53 IP:221.239.xxx.xxx 未訂閱
sorry! 貼上去時出了問題,是    while i
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-12-04 15:22:53 IP:221.239.xxx.xxx 未訂閱
來是系統造成的,我用全型試試 while i < ball -1 do begin
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-12-04 15:30:08 IP:203.69.xxx.xxx 未訂閱
v_found→這是指什麼啊? 另外,一般號還是有重覆的數字出現耶! 而特別號不見了
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-12-04 15:32:43 IP:203.69.xxx.xxx 未訂閱
不好意思,是我搞錯了!
misia_shair
一般會員


發表:2
回覆:12
積分:2
註冊:2004-12-01

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-12-04 15:33:15 IP:203.69.xxx.xxx 未訂閱
不好意思,是我搞錯了! 沒事了!
系統時間:2024-06-27 15:37:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!