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

用array後如何使用置換

答題得分者是:小傑克
120030188
一般會員


發表:6
回覆:5
積分:2
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-06-27 17:50:54 IP:211.74.xxx.xxx 訂閱

[code delphi]
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
a : array[1..8] of Integer;
i, j, tmp : Integer;
begin
a[1]:=adoquery4.FieldByName('小考1').AsInteger;
a[2]:=adoquery4.FieldByName('小考2').AsInteger;
a[3]:=adoquery4.FieldByName('小考3').AsInteger;
a[4]:=adoquery4.FieldByName('小考4').AsInteger;
a[5]:=adoquery4.FieldByName('小考5').AsInteger;
a[6]:=adoquery4.FieldByName('小考6').AsInteger;
a[7]:=adoquery4.FieldByName('小考7').AsInteger;
a[8]:=adoquery4.FieldByName('小考8').AsInteger;
for i:=1 to 8 do
for j:=i 1 to 8 do
if a[i] begin
tmp := a[i];
a[i]:= a[j];
a[j]:=tmp;
end;
[/code]
假定原小考1[91],2[93],3[65],4[90],5[65],6[63],7[78],8[77]
經array後由大而小排列為1[93],2[91],3[90],4[78].....
現要取得原小考前4次即變為[91],2[93],3[78],4[90] 我應該如何置換請各位前輩幫忙幫忙謝謝
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-06-27 18:13:27 IP:59.112.xxx.xxx 訂閱
這.........看不懂你想要問的內容耶
------
額有朝天骨,眼中有靈光
120030188
一般會員


發表:6
回覆:5
積分:2
註冊:2006-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-27 19:41:47 IP:211.74.xxx.xxx 訂閱

===================引 用 小傑克 文 章===================
這.........看不懂你想要問的內容耶
也就是8取4的值原來的值如果是前4大的值就不變動原值如小於前4大就置換前4大其中1個值(其值的範圍為0-100)
不 知這樣的表達是否前輩了解
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-06-28 13:12:56 IP:61.67.xxx.xxx 未訂閱
還是看不懂
===================引 用 120030188 文 章===================

也就是8取4的值原來的值如果是前4大的值就不變動原值如小於前4大就置換前4大其中1個值(其值的範圍為0-100)
不 知這樣的表達是否前輩了解
120030188
一般會員


發表:6
回覆:5
積分:2
註冊:2006-07-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-06-28 14:05:36 IP:211.74.xxx.xxx 訂閱
換句話說原array中是1[91],2[93],3[65],4[90],5[65],6[63],7[78],8[77]
我現在可以做到由大而小排列為1[93],2[91],3[90],4[78],5[77],6[65],7[65],8[63]
取前4大的值是ok----.1[93],2[91],3[90],4[78]將這些值跟原來的1[91],2[93],3[65],4[90]作置換也就是說91,93,90這3個分數不變動array位置
只將65分數跟78分數作置換這地方不知要怎樣著手請前輩幫忙---8次小考取最高4次小考如4次最高小考就在其中則
不動位置


===================引 用 P.D. 文 章===================
還是看不懂
===================引 用 120030188 文 章===================

也就是8取4的值原來的值如果是前4大的值就不變動原值如小於前4大就置換前4大其中1個值(其值的範圍為0-100)
不 知這樣的表達是否前輩了解
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-06-29 03:03:31 IP:59.112.xxx.xxx 訂閱
終於看懂了,但是好奇怪的做法....是要美化成績展示嗎? 用電腦大量調整.......
但是...同分要如何處理呢? 而且大分數排前面就表示---> 越考越差 (哈)

簡單一點的做法就是先找出前四大位置.....既然是有限範圍0-100的分數,就不需要用置換排序了,
我有個想法給你參考 < 由100往下找 > , 先找出位置然後鎖定非在前四個位置中數的和前四個中非前四大的數對換


------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-06-29 03:05:19, 註解 無‧
小傑克 重新編輯於 2009-06-29 04:08:31, 註解 無‧
120030188
一般會員


發表:6
回覆:5
積分:2
註冊:2006-07-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-06-30 09:49:37 IP:59.104.xxx.xxx 訂閱
真的被大大猜中就是要美化分數,又怕人家說作的太假所以請我幫他修改成績單寄發
是否可舉程式讓我有實例參考,謝謝
===================引 用 小傑克 文 章===================
終於看懂了,但是好奇怪的做法....是要美化成績展示嗎? 用電腦大量調整.......
但是...同分要如何處理呢? 而且大分數排前面就表示---> 越考越差 (哈)

簡單一點的做法就是先找出前四大位置.....既然是有限範圍0-100的分數,就不需要用置換排序了,
我有個想法給你參考 < 由100往下找 > , 先找出位置然後鎖定非在前四個位置中數的和前四個中非前四大的數對換
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-06-30 10:30:58 IP:59.112.xxx.xxx 訂閱
像這種奇怪需求肯定是一次性使用.....用最快能完成的做法做一做就好

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var unLock:set of 1..4;
a:array[1..8] of integer;
b:array[1..4] of integer;
i,j,k , temp:integer;
s:string;
begin
a[1] := 91;
a[2] := 77;
a[3] := 65;
a[4] := 90;
a[5] := 65;
a[6] := 63;
a[7] := 78;
a[8] := 93;
k := 0;
unLock := [1,2,3,4];
for i := 100 downto 0 do
begin
if k = 4 then break;
for j := 1 to 8 do
begin
if a[j] = i then
begin
if j <= 4 then unLock := unLock - [j]; // 留下可以換的位置
k := k 1;
b[k] := j ; // 紀錄前四名原來的位置
end;
end;
end;
for i := 1 to 4 do
begin
if b[i] > 4 then // 前四高的分數,但位置不在前四的
begin
for j := 1 to 4 do //看看1-4中哪一個可以換
begin
if j in unLock then
begin
temp := a[b[i]] ;
a[b[i]] := a[j];
a[j] := temp ;
unLock := unLock - [j] ;
break;
end;
end;
end;
end;
for i := 1 to 8 do
begin
s := s IntToStr( a[i]) ',' ;
end;
Showmessage(s);
end;
[/code]
------
額有朝天骨,眼中有靈光
120030188
一般會員


發表:6
回覆:5
積分:2
註冊:2006-07-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-06-30 16:52:33 IP:211.74.xxx.xxx 訂閱
這一招unLock:set of 1..4 我得好好學學 謝謝傑克大大,雖然還有點小問題(就是如這人8次小考只登記1,2次)不過已解決大部份啦3q3q
系統時間:2024-11-23 6:18:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!