請教一組數字經排序後要統計相同出現次數並顯示出來問題? |
答題得分者是:dllee
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
問題是這樣
有四組人員分銷商品,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 發送簡訊給我 |
如果您之前的這題 請教各位為何泡沫排序方式正確,但卻結果錯誤?
您已解決,可以正常完成 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 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
我看不懂您寫的是什麼
您的 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 發送簡訊給我 |
以 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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
請問您的 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 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
沒看到錯誤訊息。
一般入門的 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 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |