全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3282
推到 Plurk!
推到 Facebook!

請教各位為何泡沫排序方式正確,但卻結果錯誤?

答題得分者是:adonis
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-18 17:33:26 IP:220.131.xxx.xxx 訂閱
<textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.Button1Click(Sender: TObject); var i,j,Temp:integer; list:array[1..6] of integer; s: String; begin list[1]:= STRTOINT(Edit1.Text); list[2]:= STRTOINT(Edit2.Text); list[3]:= STRTOINT(Edit3.Text); list[4]:= STRTOINT(Edit4.Text); list[5]:= STRTOINT(Edit5.Text); list[6]:= STRTOINT(Edit6.Text); begin s:=''; for i := low(list) to high(list)-1 do begin for j := low(list) to high(list)-1 do begin if List[j] > List[j 1] then begin Temp := List[j]; List[j] := List[j 1]; List[j 1] := Temp; end; s := s IntTostr(List[j 1]) ','; Label1.Caption := s; end; end; end; end; end.</textarea><br /> 請教 各位 delphi 前輩 小弟 運用這種方式 排序對嗎??
adonis
高階會員


發表:139
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-18 17:51:20 IP:210.201.xxx.xxx 訂閱
K1086,您好

s := s IntTostr(List[j 1]) ',';
Label1.Caption := s;
移掉
在 比較 的 for .. for 之外 加上
Label1.Caption:='';
for i := low(list) to high(list) do
Label1.Caption := Label1.Caption IntTostr(List[i]) ',';
再想一想,或許就能調整寫出你覺得更適合的語句了..
重點在於..你總得要讓它先比完吧?

<textarea class="delphi" rows="10" cols="60" name="code">list[1]:= STRTOINT(Edit1.Text); list[2]:= STRTOINT(Edit2.Text); list[3]:= STRTOINT(Edit3.Text); list[4]:= STRTOINT(Edit4.Text); list[5]:= STRTOINT(Edit5.Text); list[6]:= STRTOINT(Edit6.Text); s:=''; for i := low(list) to high(list)-1 do begin for j := low(list) to high(list)-1 do begin if List[j] > List[j 1] then begin Temp := List[j]; List[j] := List[j 1]; List[j 1] := Temp; end; end; end; Label1.Caption:=''; for i := low(list) to high(list) do Label1.Caption := Label1.Caption IntTostr(List[i]) ','; </textarea>

我也在努力學習中,若有錯謬請見諒 ~
------
我也在努力學習中,若有錯謬請見諒。
編輯記錄
adonis 重新編輯於 2007-05-18 17:53:04, 註解 無‧
adonis 重新編輯於 2007-05-18 17:56:31, 註解 無‧
adonis 重新編輯於 2007-05-18 22:21:00, 註解 無‧
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-18 18:13:25 IP:220.130.xxx.xxx 訂閱
倒不是想強迫你給分還是怎樣,不過我覺得前一篇taishyang大給了你不管是答案還是方向,
結案成缺席還是有點讓人難以置信吧(?)
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-18 18:41:31 IP:122.124.xxx.xxx 未訂閱
我沒有給答案,只是說要怎麼PO程式碼而已:P
希望K1086只是不小心按到[缺席]
編輯記錄
taishyang 重新編輯於 2007-05-18 18:42:12, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-18 21:20:49 IP:211.22.xxx.xxx 未訂閱
我覺得很納悶,不知道前面小弟所附上的範例K兄如何理解的?
http://delphi.ktop.com.tw/board.php?cid=30&fid=70&tid=88537
將程式模組化是化簡複雜程式碼的基本,前面範例已經將氣泡排序法的Procedure獨立出來了,你的程式碼卻又硬生生的將它又拆開納入你的程式中,結果又沒將排序的迴圈正確處理以致於排序沒有完成,結果當然不正確!還是養成儘量把程式碼拆解為個別模組,這樣程式比較好維護不易發生錯誤,而且重用性也高!
adonis
高階會員


發表:139
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-18 22:20:10 IP:61.62.xxx.xxx 訂閱
我在回覆完後才看到【前篇】,雖然納悶為何會以 "缺席" 作結....
但轉念再想 ~
我喜歡這裡,原因很簡單,我在此受惠也希望回饋大家,雖然能力有限.. 但至少我付出了我的認同,看見好的人事物學習起來,看見不恰當的人事物就警惕自己不要覆轍 ~~ 所以,順其自然就好,沒得勉強的。
再說,學delphi的人與其它語言比例上,似乎仍有差距,上104一比較更明顯 希望大家共同努力 ~
------
我也在努力學習中,若有錯謬請見諒。
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-21 18:20:57 IP:220.131.xxx.xxx 訂閱

===================引 用 adonis 文 章===================
K1086,您好
將?
s := s IntTostr(List[j 1]) ',';
Label1.Caption := s;
移掉
在 比較 的 for .. for 之外 加上
Label1.Caption:='';
for i := low(list) to high(list) do
Label1.Caption := Label1.Caption IntTostr(List[i]) ',';
再想一想,或許就能調整寫出你覺得更適合的語句了..?
重點在於..你總得要讓它先比完吧?

<textarea class="delphi" rows="10" cols="60" name="code">list[1]:= STRTOINT(Edit1.Text); list[2]:= STRTOINT(Edit2.Text); list[3]:= STRTOINT(Edit3.Text); list[4]:= STRTOINT(Edit4.Text); list[5]:= STRTOINT(Edit5.Text); list[6]:= STRTOINT(Edit6.Text); s:=''; for i := low(list) to high(list)-1 do begin ????for j := low(list) to high(list)-1 do ????begin ???? if List[j] > List[j 1] then ???? begin ????????Temp := List[j]; ????????List[j] := List[j 1]; ????????List[j 1] := Temp; ???? end; ????end; end; Label1.Caption:=''; for i := low(list) to high(list) do ????Label1.Caption := Label1.Caption IntTostr(List[i]) ','; </textarea>

我也在努力學習中,若有錯謬請見諒 ~
===========>>>
感謝 adonis 您的指導,小弟又學習了一課!
===========>>>
真誠肺腑之言...
小弟雖然是delphi 初學者,但還是懂得如何做人處事,至於誤選__缺席__結案問題,造成大家責言,小弟百分百接受,同時借用本版面向所有前輩深深一鞠躬致歉!以後所有結案一定會慎重小心!謝謝大家...
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-05 01:32:05 IP:203.79.xxx.xxx 訂閱
不好意思,你的程式碼好像不對.
<textarea class="delphi" rows="10" cols="60" name="code">list[1]:= STRTOINT(Edit1.Text); list[2]:= STRTOINT(Edit2.Text); list[3]:= STRTOINT(Edit3.Text); list[4]:= STRTOINT(Edit4.Text); list[5]:= STRTOINT(Edit5.Text); list[6]:= STRTOINT(Edit6.Text); s:=''; for i := low(list) to high(list)-1 do //low(list)=1, high(list)=6 begin for j := i 1 to high(list) do //第i個與其後之數值比較 begin if List[i] > List[j] then //由小到大排列 begin Temp := List[i]; //交換 List[i] := List[j]; List[j] := Temp; end; end; end; Label1.Caption:=''; for i := low(list) to high(list) do Label1.Caption := Label1.Caption IntTostr(List[i]) ','; </textarea>
note: 未經測試,僅供參考...
note2:原來板主已經點出問題所在了...
編輯記錄
jow 重新編輯於 2007-08-05 01:40:25, 註解 無‧
系統時間:2017-10-22 21:34:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!