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

請教一組數字經排序後要統計相同出現次數並顯示出來問題?

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


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-28 18:55:22 IP:220.131.xxx.xxx 訂閱
問題是這樣
有四組人員分銷商品,A組賣出商品價位是:25 38 65 18 27 89 45 75 23
B組賣出商品價位是:26 38 89 18 42 92 47 75 23
C組賣出商品價位是:45 75 65 27 32 89 18 42 48
D組賣出商品價位是:20 27 45 37 32 92 18 38 26
============================================================
現在要求合併總列出四組賣出商品價位及數量:
例如:25X1 38X3 65X2 ....以此類推
小弟請教各位先進如何用排序方式完成這種需求?謝謝各位指導
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-29 08:52:28 IP:220.134.xxx.xxx 訂閱
如果您之前的這題  請教各位為何泡沫排序方式正確,但卻結果錯誤?
您已解決,可以正常完成 Bubble Sort 的話,同樣把這四組的數字全部去排序,
排出來結果假設為

18 18 18 18 20 23 23 ...

再由第一個開始判斷,如
第 1 個值是 18, 就 18 x 1 個
第 2 個值是 18, 與前一值相同, 就次數累加, 變 18 x 2 個
第 3 個值是 18, 與前一值相同, 就次數累加, 變 18 x 3 個
第 4 個值是 18, 與前一值相同, 就次數累加, 變 18 x 4 個
第 5 個值是 20, 與前一值不同, 前一個值就算完成統計, 另一個開始計算, 就 20 x 1 個
第 6 個值是 23, 與前一值不同, 前一個值就算完成統計, 另一個開始計算, 就 23 x 1 個
第 7 個值是 23, 與前一值相同, 就次數累加, 變 23 x 2 個
...

如此,就完成了。
------
http://www.ViewMove.com
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-29 12:28:08 IP:220.131.xxx.xxx 訂閱

===================引 用 dllee 文 章===================
如果您之前的這題? 請教各位為何泡沫排序方式正確,但卻結果錯誤?
您已解決,可以正常完成 Bubble Sort 的話,同樣把這四組的數字全部去排序,
排出來結果假設為

18 18 18 18 20 23 23 ...

再由第一個開始判斷,如
第 1 個值是 18, 就 18 x 1 個
第 2 個值是 18, 與前一值相同, 就次數累加, 變 18 x 2 個
第 3 個值是 18, 與前一值相同, 就次數累加, 變 18 x 3 個
第 4 個值是 18, 與前一值相同, 就次數累加, 變 18 x 4 個
第 5 個值是 20, 與前一值不同, 前一個值就算完成統計, 另一個開始計算, 就 20 x 1 個
第 6 個值是 23, 與前一值不同, 前一個值就算完成統計, 另一個開始計算, 就 23 x 1 個
第 7 個值是 23, 與前一值相同,? 就次數累加, 變 23 x 2 個
...

如此,就完成了。

感謝副版主提示 小弟努力在學習 以下是運用法則 但為什麼字串轉入才18個而不是36個字串?
Var
ABC_NO: STRING; -------->把前面四組字串加入這裡共36個
K_NO:ARRAY[1..36] OF STRING;


for G:=1 TO 36 DO
Lab_V1.CAPTION:=' ';
for W:=1 TO 36 DO
begin
G:=W*2-1;
K_NO[G]:=COPY(ABC_NO,G,2);
Lab_V1.CAPTION:=Lab_V1.CAPTION K_NO[G] ' ';
end;
==============>>麻煩請教那裡錯了

dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-29 15:44:44 IP:220.134.xxx.xxx 訂閱
我看不懂您寫的是什麼  

您的 Bubble Sort 如果可以用了,Bubble Sort 不是用數字排嗎?
把4 組都變成數字(StrToInt)放到 array 再給 Bubble Sort 去排,就有答案了。
------
http://www.ViewMove.com
編輯記錄
dllee 重新編輯於 2007-08-29 15:47:27, 註解 改錯字‧
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-30 09:13:20 IP:211.75.xxx.xxx 訂閱
以 18 18 18 18 20 23 23 這段為例
會產生 18 * 4 20 * 1 23 * 2
只剩3個字串
所以36個數字 最後剩18個字串
沒有什麼好奇怪的~
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-08-30 09:14:20, 註解 無‧
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-03 20:48:52 IP:220.131.xxx.xxx 訂閱
ABC_NO:string;
V1:integer;

ABC_NO:=ABC_NO Lab_Smno.Caption;//收集字串
V1:=STRTOINT(ABC_NO); //字串轉數字
=============>>結果出現錯誤畫面,請教 dllee 站務副站長 小弟那裡錯了?謝謝你


dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-03 21:45:31 IP:59.105.xxx.xxx 訂閱
請問您的 Lab_Smno.Caption 內容是什麼?
V1:=STRTOINT(ABC_NO);
如果 ABC_NO 內不是數字, 那它就會 Exception,可以使用
V1:=StrToIntDef(ABC_NO,0);
如果 ABC_NO 內不是數字, 那它就會傳回 0 而不會有 exception。
請注意,如果 ABC_NO 是
25 38 65 18 27 89 45 75 23
那是一定不行的,因為那太多組了,StrToInt 或 StrToIntDef 一次只能轉一組,
如果有多組要自行分割一個一個叫用 StrToIntDef。
例如使用 stringreplace 把 " " 空白變成 "," 逗號,就可以用一個 TStringList
使用 CommaText 讀入,就可以一個一個用 StrToIntDef 轉成數字了。
------
http://www.ViewMove.com
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-09-03 22:30:26 IP:220.131.xxx.xxx 訂閱

===================引 用 dllee 文 章===================
請問您的 Lab_Smno.Caption 內容是什麼?
V1:=STRTOINT(ABC_NO);
如果 ABC_NO 內不是數字, 那它就會 Exception,可以使用
V1:=StrToIntDef(ABC_NO,0);
如果 ABC_NO 內不是數字, 那它就會傳回 0 而不會有 exception。
請注意,如果 ABC_NO 是
25 38 65 18 27 89 45 75 23
那是一定不行的,因為那太多組了,StrToInt 或 StrToIntDef 一次只能轉一組,
如果有多組要自行分割一個一個叫用 StrToIntDef。
例如使用 stringreplace 把 " " 空白變成 "," 逗號,就可以用一個 TStringList
使用 CommaText 讀入,就可以一個一個用 StrToIntDef 轉成數字了。

========>>謝謝 Dllee 的指導
確實是含有空白間距的9組數字, 如果運用V1:=StrToIntDef(ABC_NO,0);
答案是秀出0,關於使用 stringreplace 指令把 " " 空白變成 "," 逗號,請問是如何用法?小弟初學者沒用過,請你幫助舉例ok?
還有變數 V1要array of integer 還是 V1:ARRAY[1..9] OF integer;
一此轉成陣列下次比對也可引用,請問可以嗎?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-09-04 09:45:01 IP:220.134.xxx.xxx 訂閱
StringReplace 請查線上說明,不然請在本站查,太多範例了。
請花點時間,自己查可查的資料。不然,您可能要請我當家教了
V1 如果想在每個函式都使用,把它宣告成整體變數,或是表單內的變數。
若不知道什麼是整體變數或表單內的變數.... 我希望您可以先找一本入門的書好好看一下基本的東西。
------
http://www.ViewMove.com
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-09-05 13:41:52 IP:220.131.xxx.xxx 訂閱

===================引 用 dllee 文 章===================
StringReplace 請查線上說明,不然請在本站查,太多範例了。
請花點時間,自己查可查的資料。不然,您可能要請我當家教了
V1 如果想在每個函式都使用,把它宣告成整體變數,或是表單內的變數。
若不知道什麼是整體變數或表單內的變數.... 我希望您可以先找一本入門的書好好看一下基本的東西。
====>>>小弟已經把字串空白消除掉了,現在要轉成數字來運算加總卻出現問題 請教 Dllee 大師教一下 謝謝!
Lab_V1.Caption:= ''; // 先清空
VV:= StringReplace(VV,' ','',[rfReplaceAll]);//把總加字串刪掉中間空白
aSL1 := TStringList.Create;//讀行
aSL1.Add(VV);//載入總加字串
for I := 0 to ASL1.Count -1 do
begin
V_NO[I]:= StrToIntDef(ASL1[I-1],2);
Lab_V1.Caption:=Lab_V1.Caption FormatFloat('00',V_NO[I]);
=================
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-09-06 09:44:28 IP:220.134.xxx.xxx 訂閱
aSL1.Add(VV);
改成
aSL1.CommaText=VV;

我還是希望您可以先找一本 Delphi 入門的書好好看一下基本的東西。
網路上也可以找到許多"免費"的版本。
不然,找我當家教也行 只可惜目前我手邊案子很多
------
http://www.ViewMove.com
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-09-07 12:39:49 IP:220.131.xxx.xxx 訂閱

===================引 用 dllee 文 章===================
aSL1.Add(VV);
改成
aSL1.CommaText=VV;

我還是希望您可以先找一本 Delphi 入門的書好好看一下基本的東西。
網路上也可以找到許多"免費"的版本。
不然,找我當家教也行 只可惜目前我手邊案子很多

=======>>>有翻書本 k了好己天,努力學習是我的本份,但就是那麼不聰明請原諒!
現在已經把字串完全轉出成為數字陣列了,只是不知為何還是出現錯誤訊息,請教 Dllee 大師多指導,謝謝!
=======>>>>程式如下:
Var N1:Integer;
vv:String//把四組字串加入
V_NO:Array of Integer;
N1:=0;
N1:= length(vv);
setlength(v_no,N1);
for i:= 1 to n1 do
begin
v_no[I]:= StrToIntDef(vv[i],2);
Lab_V1.Caption:=Lab_V1.Caption FormatFloat('0',V_NO[i]);
end;
=======>>錯誤訊息如下
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-09-07 13:06:21 IP:220.134.xxx.xxx 訂閱
沒看到錯誤訊息。

一般入門的 Delphi 書一定有字串處理, 字串轉數字的範例,
您目前的問題就是在此,而這是書上可以找得到範例的。

建議您,如果自認初學者,自認不那麼聰明,那就請您像我當初在學 C 語言一樣,
把入門書的每一章節的範例,在 IDE 內打一遍,並在 IDE 內單步執行,執行時
查看每一步變數的變化,以學習每一個函式或指令的效果,並記下,作為日後應用的參考。
這是基本的第一步。
第二步,試著將書本範例作小幅度的擴充或延伸,自己多加幾個變數或判斷式進去,
看看是否與自己預期的一樣。
如此,至少把基本語法、流程控制(If, Loop, Select Case...)、陣列、字串、檔案都搞清楚
他們的基本操作或用法。
以我自己當時大二自學C,以上就花了兩個多月的時間 (我大一上課已學過 Basic 及 Fortran,
但還是花了那麼久, 可見我也是很笨的)

接下來,就可以只看書或上網找資料來擴充自己,此時因為已有基礎,對於看到的程式碼,
就不需要一一在 IDE 內驗證,只需記下別人是如何使用的即可,當然,對於可疑的用法
(真的能這樣用嗎?),就可以自行撰寫測試程式作測試,看看別人所提供的 code 是否真的
可用,或只是適用於某些特殊的場合。這時,也是可以分享您心得的時候,因為可以自行
測試 code 也就可以試著幫助別人找出他/她可能遇到的問題。

對於這些基本語法、流程控制、陣列、字串、檔案特基本操作,應該都要從書本上先自修
才不會問出沒頭沒腦的問題。

電腦語言最好的地方,就是可以自行驗證,別人提供的原始碼,或是書本提供的範例,
都可以自行作驗證,書本或別人的程式,可能是有問題或是只適用於特殊場合,這些
都要自行驗證才能得到經驗。

建議您,先把手邊的入門書好好的看一遍,不要跳著翻(除非您已很熟其他的電腦語言),
這樣才會有基礎。
------
http://www.ViewMove.com
Coffee
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-09-07 14:19:35 IP:220.130.xxx.xxx 訂閱
我想dlee大已經說的很清楚了,debug應該也是要自己來,
希望這篇到此結束。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-09-27 14:42:45 IP:220.131.xxx.xxx 訂閱
謝謝 dllee 你的指導,我有搞通關念了,小弟會繼續努力。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-09-27 17:56:36 IP:210.243.xxx.xxx 訂閱
------
http://www.ViewMove.com
系統時間:2024-04-24 7:56:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!