English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

這次的題目真的有點棘手,我也沒有很大的把握寫得完美.....XD所以以這15點...表示我的誠意(話說 點數跟誠意一點關系都沒有吧XD)只是為了我之前所說的.....給點數看難度......說到做到而已......縱觀而言這題不算難寫但是要寫到沒有Bug.....難!!我已經失敗三四次了.............Orz......期待可以看到一個新方向和寫法.......有需要的可以跟我要我寫過的有Bug程式(這裡應該塞不下吧 @@)題目:我有14個盒子,每個盒子各別編號為A,B,C,D,~,M,N每一個盒子都被區分為0~999共1000個格子每一個格子內都只能放入一顆球這個程式就像是一台機器,讓使用者輸入編號和格號然後算出正確的放法命令格示為   盒子編號1格子編號1+盒子編號2格子編號2+...........如果是整個格子都要放球 只要輸入該格編號即可  盒子編號1+盒子編號2+..........還有一種為接續符號  盒子1格子1~盒子1格子5+盒子2 (接續符號只能用在同一個盒內)EX:A34+B43+C33+C65+C100~C500 合法EX:A+A11=>A 全區放置>單格放置EX:A5+A6+A8+A5=>A5+A6+A8 刪除重覆的資料EX:A1453+R342=>"" 超出範圍EX:A5B3+A3E3+234234+ASD2312 => "" 規格不符EX:C100~C600 => "" 起點大於終點EX:A500~A600+A550~A800 => A500~A800 直接連結EX:A300~A600+A400+A500 => A300~A600 落於範圍內刪除最後的輸出結果還要排序EX: A+B21+C2+C5+C50+C60~100+C400+F91+G36~G99+I+K

2005-12-22 11:04:28 · 7 個解答 · 發問者 ? 5 in 電腦與網際網路 程式設計

如果我解說得不清楚或是哪邊看不懂的
請提出 ^^

2005-12-22 11:06:01 · update #1

感謝 W.J.S.大的回應
目前測試功能一切正常
正在進一步追蹤中...
不過
程式碼比我想像的還多呢 ^^;
嗯~~應該是在很多地方都下了判斷去Debug吧
研究研究 ^^
也歡迎其他人提出意見
大家多交流交流程式概念 ^^

2005-12-23 10:45:54 · update #2

發現問題~~
1.如果只有一筆資料而那筆資料又是錯的...Len(S2) - 1會掛掉
2.輸入A-55 輸出應為"" 但輸出卻是 A55
3.輸入A1000 VB當掉(數值部份超過1000會掛掉)
4.無法過濾 完全錯務的輸入 A23f,Ewerw之類的輸入會導致無窮迴圈
以上是發現的問題~~其他 還在找 ^^;

2005-12-23 11:12:59 · update #3

總之就是.........
錯的東西不能出現
不該出現的東西不能出現XD

2005-12-23 11:56:52 · update #4

感謝W.J.S.大再度提供修正 ^^
目前的電腦沒辦法測
可能要等到周一才能告訴你了 ^^;

2005-12-24 18:13:56 · update #5

我之前寫的原碼
http://rapidshare.de/files/9828668/String.FRM.html
這個版本沒包含~的用法
這個版本的Bug..........呃.....我也忘了 Orz........
總之...
有疑問請提出 ^^;;;;;

2005-12-26 04:25:36 · update #6

D22+F~F+E23 錯誤
目前只有看到這邊有問題
其它都很完美 ^^v

2005-12-26 04:39:07 · update #7

感謝 Phoenix 大的回答 ^^
但是....你的東西我無法執行呢 @@
還是說你要編譯成執行檔呢??

2005-12-27 04:26:25 · update #8

W.J.S.大~
感謝你不厭其煩的修正程式 ^^
從你那邊得到蠻多構想的

Phoenix大~
感謝你 ^^
但是我現在無法安裝
回家後再看 ^^a

Kukka大~
也謝謝你 ^^;

2005-12-28 04:44:35 · update #9

W.J.S.大~
新問題發現
G000 會變成G0
G0000 會變成 ""
是要拿掉還是變成G0呢??

這一題的防呆果然...........好難

2005-12-28 08:44:58 · update #10

一上線就看到一堆東西(汗).............
感謝大家的討論喔 ^^

2005-12-29 04:03:09 · update #11

回應 回答問題欄
Phoenix大~
你用類別建立是可行的
但是Phoenix大
你好像沒有提及到關於"處理"方面的邏輯呢 @@|||
就我的觀點來看,"怎麼處理字串"是最大的重點
可以請你補述一下嗎??

To Liu_Liu大~
你的程式我Run過了
有發現幾個問題,因為W.J.S.大已於意見欄發表了
這邊就不再贅述...
感謝喔 ^^

2005-12-29 04:41:34 · update #12

追申:
Phoenix大~
你的程式沒有 .Net跑不起來 Orz........
能不能編譯出來再放上來呢?

2005-12-29 04:47:21 · update #13

剛剛測試過Liu-Liu大的新版程式
已經找不到任何問題了....
現在就等其它大大的測試結果囉 ^^

2005-12-29 06:16:57 · update #14

這兩三天沒有辦法上來
一上來就看到多了好多東西 ^^a
零大已經把程式放上來了
感謝各位的踴躍 ^^
這下子~要選誰當最佳解答,也越來越難選了

2006-01-02 03:07:22 · update #15

7 個解答

我來詮釋月大的需求,請月大看看對不對.
輸入字串以 + 號隔開成數個子句
然後判斷每個子句,子句裡只要有任何錯誤,
該子句完全不理會,但其他子句續處理。
子句判斷原則:
空字串不理會
子句中,除了 A 到 N, 0 到 9, ~ ,之外,有其他的字則不理會
子句中只能有 0 個或 1 個 ~,否則不理會
將子句再以 ~ 號隔開 1 個或 2 個小子句
小子句判斷原則:
字串長度為1到4,否則整個子句不理會
第一個字是英文大寫,其他為數字,否則整個子句不理會
這樣好嗎?有漏洞或錯誤的嗎?

2005-12-29 00:19:30 補充:
W.J.S. 說集思廣益大家一起搞好這題目,我很同意,不管誰奪標,在意的是研究,這樣的心態很好.

2005-12-29 00:22:14 補充:
我來修正一下月大的需求,請月大看看對不對.
輸入字串以 + 號隔開成數個子句
然後判斷每個子句,子句裡只要有任何錯誤,
該子句完全不理會,但其他子句續處理。
子句判斷原則:
空字串不理會
子句中,除了 A 到 N, 0 到 9, ~ ,之外,有其他的字則不理會
子句中只能有 0 個或 1 個 ~,否則不理會
將子句再以 ~ 號隔開 1 個或 2 個小子句
小子句判斷原則:
字串長度為1到4,否則整個子句不理會
第一個字是英文大寫,其他為數字,否則整個子句不理會
有兩個小子句時,兩個小子句的第一個要相同
這樣好嗎?有漏洞或錯誤的嗎?

2005-12-31 02:27:01 補充:
拋磚引玉,這個名子取得非常好.

2005-12-31 03:50:54 補充:
Dim 盒子(), 入字$, 出字$, 字$, 狀$, 種$, 左$, 右$, 子句$
Private Sub Command1_Click()
 Call 準備: Call 處裡: Call 秀出
End Sub
Sub 準備()
 ReDim 盒子(-1 To 14000)
 入字 = Text1 + "+": 出字 = "": 狀 = "1"
End Sub
Private Sub 處裡(): Dim 數
 For 數 = 1 To Len(入字): 字 = Mid(入字, 數, 1)
  Select Case 字
   Case "+", "~": 種 = 字: Case "A" To "N": 種 = "A"
   Case "0" To "9": 種 = "0": Case Else: 種 = "Z"
  End Select
  '0123 456
  ' +A000~A000+
  Select Case 狀 + 種
   Case "0+": 狀 = "1"
   Case "0~"
   Case "0A"
   Case "00"
   Case "0Z"
   Case "1+"
   Case "1~": Call 錯
   Case "1A": 左 = 字: 狀 = "2"
   Case "10": Call 錯
   Case "1Z": Call 錯
   Case "2+": Call 放
   Case "2~": 狀 = "4"
   Case "2A": Call 錯
   Case "20": 左 = 左 + 字: 狀 = "3"
   Case "2Z": Call 錯
   Case "3+": Call 放
   Case "3~": 狀 = "4"
   Case "3A": Call 錯
   Case "30": 左 = 左 + 字: If Len(左) > 4 Then Call 錯
   Case "3Z": Call 錯
   Case "4+": Call 錯
   Case "4~": Call 錯
   Case "4A": 右 = 字: 狀 = "5"
   Case "40": Call 錯
   Case "4Z": Call 錯
   Case "5+": Call 放
   Case "5~": Call 錯
   Case "5A": Call 錯
   Case "50": 右 = 右 + 字: 狀 = "6"
   Case "5Z": Call 錯
   Case "6+": Call 放
   Case "6~": Call 錯
   Case "6A": Call 錯
   Case "60": 右 = 右 + 字: If Len(右) > 4 Then Call 錯
   Case "6Z": Call 錯
  End Select
 Next
End Sub
Sub 秀出()
 Dim 數
 For 數 = 0 To 13999
  Select Case Trim(Str(盒子(數 - 1) * -(數 Mod 1000 <> 0))) + Trim(Str(盒子(數))) + Trim(Str(盒子(數 + 1) * -(數 Mod 1000 <> 999)))
   Case "000"
   Case "001"
   Case "010": 子句 = Chr(數 \ 1000 + 65) + Trim(Str(數 Mod 1000))
         出字 = 出字 + "+" + 子句
   Case "011": 左 = Chr(數 \ 1000 + 65) + Trim(Str(數 Mod 1000))
   Case "100"
   Case "101"
   Case "110": 右 = Chr(數 \ 1000 + 65) + Trim(Str(數 Mod 1000))
         If Mid(左, 2) = "0" And Mid(右, 2) = "999" Then
          出字 = 出字 + "+" + Mid(左, 1, 1)
         Else
          出字 = 出字 + "+" + 左 + "~" + 右
         End If
   Case "111"
  End Select
 Next
 Label1 = Mid(出字, 2): 左 = "": 右 = ""
End Sub
Sub 放(): Dim 數, 向
 Select Case Len(左)
  Case 1
   Select Case Len(右)
    Case 0: If Len(右) = 0 Then 右 = 左 + "999": 左 = 左 + "0"
    Case 1: If 左 <> 右 Then GoTo 跳 Else 右 = 左 + "999": 左 = 左 + "0"
    Case Else: GoTo 跳
   End Select
  Case Else
   Select Case Len(右)
    Case 0: 右 = 左
    Case 1: GoTo 跳
   End Select
 End Select
 If Val(Mid(左, 2)) > Val(Mid(右, 2)) Then 向 = -1 Else 向 = 1
 For 數 = (Asc(左) - 65) * 1000 + Val(Mid(左, 2)) To (Asc(右) - 65) * 1000 + Val(Mid(右, 2)) Step 向
  盒子(數) = 1
 Next
跳:
 左 = "": 右 = "": 狀 = "1"
End Sub
Sub 錯()
 左 = "": 右 = "": 狀 = "0"
End Sub

2005-12-31 03:56:56 補充:
各位大大你好,麻煩測我的程式,將錯誤貼上來,可測中文及特殊符號,謝謝!
因你們的程式我拿不到,所以沒測你們的,抱歉!

2006-01-01 00:01:55 補充:
各位大大
新年快樂!

2006-01-01 01:25:11 補充:
W.J.S.
a0+a1,小寫視為非法,附合要求
A0~+~A9=空,+號左右為兩子句,兩子句2都不合法,所以=空,附合要求
A000=A0,A0000=空,與我2005-12-29 00:22:14 發表 附合

A=A0 是Bug 沒錯,且發現更多的Bug, 程式以修改,謝謝W.J.S.為我測試,不知還有沒有Bug

2006-01-01 01:31:35 補充:
各位大大
我 零 可能是英文程度最差的一個
所以沒辦法取得你們的程式

2006-01-01 02:29:29 補充:
測試Liu-Liu 的發現
A1+A02~~A12=A1~A12
應該為A1,因為子句A02~~A12非法

2006-01-02 08:06:49 補充:
我只能拿到 Liu-Liu 的程式
我想其他的vb大大的功力應該也像 Liu-Liu 那樣雄厚吧!因此在程式上才會有這麼精細的要求.
然而英文,國語程度,大家要比的話,我想,可能要比爛才有意義吧!

2006-01-02 14:19:00 補充:
月島龍生(リュウセイ) ,
我自己測A+A11+A20 =A11
也是錯,謝謝提醒
無論如何,這個題目已經是最熱門的了

2006-01-03 01:52:32 補充:
各位大大,我的新程式附上,請測試

以下字串為一個字串

+A1+~+3+ +EF+E月+G3F+H島+D3~+C3~~+J2~3+C2~龍+A2~A4~+A8~A生+B1~D4~+F4~F7A+A1~A44.+

答案為A1 請測試你們自己的程式看看
我的程式假如有錯誤請再提出,謝謝!

2006-01-03 01:56:51 補充:
月島大,你自己是否也已寫好程式了呢?
可否也公佈一下,讓大家切磋切磋.

2006-01-03 02:12:44 補充:
Liu-Liu ,你的程式的運作理念合我不同,一個子句理不可以有兩個以上的~,所以
A2~B4~C6~B8~C10~D12~C14~D16~E18~D20~E22~F24~E26~F28~G30~F32~G34~H36~G38~H40~I42~H44~I46~J48~I50~J52~K54~J56~K58~L60~K62~L64~M66~L68~M70~N72~M74~N76~O78
應該為空

2006-01-04 00:14:31 補充:
各位大大,奇摩的顯示有一個問題點,
發表意見,的字串,會走樣.
我貼上
A1
兩個字,你們複製後,成為3個字
,後面會加一個空白.

2006-01-04 00:57:28 補充:
Liu-Liu
請參考我2005-12-29 00:22:14 發表,我修正月大的需求,徵求月島同意,之後月島2005-12-29 10:48:07 發表,補充小子句判斷原則
,表示同意我詮釋的原則,只是在加一點補充.
所以A02~~A12視為空

2006-01-04 12:58:08 補充:
不知我的程式是否還有錯誤

2006-01-04 13:17:52 補充:
 vb第四版就可以使用中文變數,我是意外發現的,當時很驚喜,之後我又測試,發現程序名稱及物件名稱都可以使用中文,從此我寫程式就盡量使用中文.
 但是vb老師把這點列為缺點之一,他認為,如果其他的人來維護程式,不習慣中文,會增加維護成本.

2006-01-04 13:24:33 補充:
 不過我還是使用中文撰寫,因為這樣可以提高程式的可讀性,降低註解量.
 有人認為註解越多越詳細越好,但我反對,因為越詳細,所以程式只要稍微修改,註解就要跟著改,維護成本跟著提高.
 但註解不詳細,往後回頭程式可能看不懂,所以我認為因該盡量使用中文撰寫,尤其對英文盲來說,更是需要.

2006-01-04 13:33:49 補充:
 我的程式,因擔心2000字的限制,所以取的中文盡量縮短,Call 錯,原本為Call 錯誤處裡,改為 Call 錯誤,再改為Call 錯.
 到目前為止我的程式是否還有錯誤,如果有請再提出.

2006-01-04 13:43:45 補充:
我的程式是在高雄市學的,約22年前的華南電腦,現在不知道變成怎樣了.
把中文列為缺點之一,的是最近的老師,約5年前.

2006-01-05 00:13:18 補充:
Liu-Liu 大
假如是
BA5~A12~A8 → ?
A5~A12~A18~~A9999 → ?
A5~A~A18~~A9999 → ?

2006-01-05 00:13:33 補充:
Phoenix 大
寫程式的時候需要切換輸入法。
這點影響設計的工時很小,影響設計工時最大的因素是,邏輯思考方面.

對外部的變數還是得使用英文。
這點我沒有注意到,但因我都使用vb寫程式,所以沒影響.

別人使用反而不容易習慣。
這點我無法理解,我認為使用中文反而讓程式一目了然.
例如: If 通過檢查 Then Call 存檔
就不需要這樣:
   '假如通過檢查,就去呼叫存檔副程式
If checkok Then Call Save

2006-01-05 21:08:29 補充:
如果是這樣呢?
A20~B30~A40~B50=?

2006-01-05 21:19:43 補充:
 使用中文有優點也有缺點,大家按照自己喜歡的方式撰寫程式,等到遇到問題時,大家用客觀的方式再研究.
 

2006-01-07 00:09:56 補充:
多麼可愛的傷惱筋程式啊!雖然對月大來講,只是打個噴嚏就可完成的小程式,但是風趣的效果蠻好的.
感謝月島大大高抬貴手,此獎得之有感慚愧,因為我是看到大家的討論,得知月島大的大概需求後,才開始撰寫程式,等於是大家跑得精疲力盡時,我從中殺出,佔了很大的便宜.

2006-01-07 00:12:05 補充:
說實在的,假如不是月大的要求,我原本設計理念與Liu-Liu大相同,就是盡量對錯誤資料合理化,猜出使用者的本意,提高程式的智慧,這是很好的觀念,也是我寫程式的作風之一.
但月大有警覺到,此次主題,如果對錯誤資料合理化,會產生許多難以預期的問題,所以做了理智的決定----砍掉,解決了許多麻煩.

2006-01-07 00:12:47 補充:
這次的主題,感謝各位大大的合作, Phoenix大,W.J.S.大,Liu-Liu大,你們都是謙虛的VB高手,欣欣學子需要你們,國家需要你們,未來的世界局勢,可能掌握在程式設計師的手中,大家加油! 加油! 加油!最後祝大家
身體健康 萬事如意

2006-01-07 00:18:21 補充:
每個主題的意見發表不能超過100個
我是刪除之前的發表4個才能再發表4次.

2005-12-30 22:50:54 · answer #1 · answered by ? 2 · 0 0

參考下面的網址看看

http://phi008780508.pixnet.net/blog

2014-05-11 03:05:01 · answer #2 · answered by Anonymous · 0 0

如果是這樣的範圍呢:
A15~A30~A45=?

2005-12-28 22:33:44 補充:
程式碼過長,故只好放在學校個人網頁的空間囉:
http://sweb.nuu.edu.tw/~u316051/vb/1405122208594.htm

大致上我的解法如下:
 一、先將字串以+字元做分解。
 二、針對各別字串做以下的判斷:
  字串無~:
   判斷字串是否合法:
    合法:
     長度為1:放進盒子裡面的所有格子內。
     長度為2以上:放進盒子裡面所指定的格子內。
    不合法:不放入。
  字串有~:
   一、以~字元做分解。
   二、檢查各個字串是否合法。
   三、將分解的字串進行排序的動作。
   四、針對雙字串做以下的判斷:
    長度為1:放進盒子裡面的所有格子內。
    長度為2以上:放進盒子裡面所指定的格子範圍內。
 三、判斷置放的範圍並顯示資料。

2005-12-29 13:51:45 補充:
to:月島龍生(リュウセイ)
A2~A1000~A500→A2~A500

修正版:12291347
這個問題不大,已修正。
若還有其他錯誤,歡迎指正。

需不需要公開程式碼?

2005-12-29 14:01:46 補充:
我測試了W.J.S.所寫的程式:
A34+B43+C33+C65+C100~C500_→A34+B43+C33+C65
(底線為空格)
最後一個字元若有包含空格,則C100~C500的範圍不成立。

2005-12-29 14:27:40 補充:
測試了Phoenix所寫的程式發現:
F~F→''

B20~B50~B100→''

A0~A506+B43+C105+A508~A999+D1+D2+C65+A507+C100~+~C500+C999+GR654+K~N+F~F→A+B43+C65+C105+C999+D1+D2

2005-12-29 21:42:33 補充:
to:W.J.S.
其實可以將空白字元(Space)先行取代掉,就不會有出現空白字元而無法辦識的值。
New_word=Replace(word,#_#,##)
註:雙引以 # 字元代替,空白字元(Space)以 _ 字元代替。

2005-12-30 13:11:54 補充:
程式碼已附上。

我個人覺得空白字元應該視為合法字元。因為或許有些人會不小心按到空白鍵,或者在Copy網頁內的文字時,最後的空白可能就沒有注意到的說。
畢竟空白字元並不是我們最主要要做判斷的字元。

2006-01-02 08:44:19 補充:
to:月島龍生
問題是在於兩個連接號的問題,並不是A02及A2的問題啦!煩請看清楚些。
A1+A02~~A12=A1~A12
應該為A1,因為子句A02~~A12非法

2006-01-02 14:21:35 補充:
to:W.J.S.
http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpref/html/frlrfsystemtextregularexpressions.asp

.NET Framework 類別庫
System.Text.RegularExpressions 命名空間

Phoenix引用了以下類別:
 Match
 Regex

2006-01-02 14:23:43 補充:
另外做補充:VB6 是不支援此款命名空間的使用,僅 .NET 系列才支援。

2006-01-03 17:55:26 補充:
to:零
因為全部都是~所組成的字串,所以所求出來的答案不應該為空值(畢竟我有將它重新排序過)。
我所測試的結果為:
B4~B8+C6~C14+D12~D20+E18~E26+F24~F32+G30~G38+H36~H44+I42~I50+J48~J56+K54~K62+L60~L68+M66~M74+N72~N76
您的資料我所測試的結果為:
A1~A4

to:W.J.S.
在 A44 的後面還緊接著一個小點喔,所以沒有 A44 的說。

2006-01-03 17:55:38 補充:
to:月島龍生(リュウセイ)
您怎麼沒有回答有關連續~的問題呢?
A1+A02~~A12=?
應該為A1
還是應為A1~A12

2006-01-04 15:03:34 補充:
我個人的想法是:
A5~~A12→A5~A12
A5~+~A12→No Data
A5~A12~A8→A5~A12

第一組:具有連續性質。
第二組:連續性質必須有頭有尾(此為有頭無尾,有尾無頭)。
第三組:具有重覆連續性質(A5~A8,A5~A12,A8~A12)。

2006-01-05 09:04:40 補充:
BA5~A12~A8 → A8~A12
BA5 並不是合法字串。

A5~A12~A18~~A9999 → A5~A18
A9999 超過範圍。

A5~A~A18~~A9999 → A0~A18
照理來說,應該為 A,但程式執行結果好像沒有按照既定的想法顯示出來。
或許可以從另一個角度來思索:A 被視為 A0。

2006-01-05 18:20:12 補充:
那麼你們覺得這樣的字串所求得的答案應該為何呢?
A~A20=?
A20~A=?

2005-12-28 17:33:44 · answer #3 · answered by 世賢 7 · 0 0

如果遇到錯誤的話是整個字串無效還是只有錯誤的地方無效@@

2005-12-25 21:24:32 補充:
我還沒寫出程式碼0.0
不過,我的感覺是覺得字串錯誤的處理部分只有需求不同的寫法,不管是整個字串無效還是錯誤的地方無效其寫法應該差不多。
個人感覺 ̄▽ ̄
不知道能不能在時間內寫完 ̄▽ ̄b

2005-12-26 22:25:33 補充:
總算是寫完了,看看有沒有Bug吧 ̄▽ ̄
程式碼超過二千字@@
程式碼下載點:http://homelf.kimo.com.tw/f.phoenix/BallBoxs.rar
裡面的程式是.NET Framework 2.0的程式,所以要跑得安裝.NET Framework 2.0
我只有把範例的字串丟進去測試,
如果使用.NET Framework 1.1重新編譯應該是沒有問題。(大概吧)
------------------------------------------------------------------------
要執行我的程式需要先安裝這個http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=en
大家好像還沒開始使用Visual Studio 2005,我做了些UI的修改,以方便測試,不過還是得先安裝.NET Framework 2.0喔0.0
------------------------------------------------------------------------------------
我的思考邏輯:
由輸入的字串來看=>A34+B43+C33+C65+C100~C500,可以發現程式需要分兩個部分來處理字串,
第一,以+為分隔點把字串切割成字串陣列。
第二,處理單一格字串及連續格字串。
以這兩個原則,我實作了三個類別,第一個是格子本體(Grid),第二是盒子(BallBox),第三是處理這兩個原則的類別(PutBallMachine)。
一個盒子需要有1000個格子,而格子必須記錄自己的狀態,盒子和格子都需要知道自己的名字(盒子就是英文字母,格子是編號),解析完字串後,再由PutBallMachine來依序詢問每個盒子中的球的編號,當盒子接到詢問時,依序去問格子編號,這樣子,就大功告成了 ̄▽ ̄
---------------------------------------------------------------------------
字串處理就只有那兩個原則0.0
只是我作了一點弊,我用Regular Expression來幫我處理字串的合法性,
這樣我只要在分配物件工作上著手就行了,
Regular Expression在字串正規化上面有不錯的幫助,照文件上的敘述,很多語言都有支援這個功能,推薦給大家^^
另外,我的程式已經有編譯成執行檔了@@
.NET的程式一定要有.NET Framework才能Run,就像Java必須有JVM一樣。

2005-12-26 22:36:17 補充:
終於寫完了,
這個專案剛好可以練習一下物件導向分析,
第一次使用新的工具,加上太久沒碰VB還真的思考起來有點卡卡的感覺,得再熟悉一下新工具才行@_@

2005-12-28 19:39:55 補充:
A45~+~=~~~++~+C27 → C27
這個我無法了解A45為何不見了
單看A45或許正確,不過看A45~就不正確了,有起點卻沒有終點,這樣程式如何做反應呢?@@

2005-12-28 19:45:20 補充:
我把G0000視為非法字串0.0
W.J.S大大,你的程式可以附上執行檔嗎?
我使用.NET重新編輯後的執行結果好像不太一樣@@

2005-12-28 22:30:30 補充:
收到0.0

2005-12-29 19:17:59 補充:
To 月島大:
我個人是認為需求不明確的程式是無法完成的,電腦是不認識混沌不明的狀態的,當一種輸入會出現兩種以上的可能輸出的時候,那這個系統就會變得不可預測,也就會不穩定,所以寫程式的一開始是先找到明確的規則才是。
在月島大的問題中,我想程式碼應該不是主要的目的吧,而是大家的解題方法,藉此來互相交流^^

2006-01-01 22:17:58 補充:
比英文程度的話,
我想我是當之無愧的差吧 ̄▽ ̄

2006-01-02 23:01:00 補充:
據我所知Regular Expression並不是.NET特有的
最初是Perl語言所開發出來的
後來被廣泛地應用在字串正規化上,我目前知道有支援這個功能的有Java、JavaScript、PHP、Perl、.NET、MySQL,所以如果官方找不到這個功能,或許第三方會提供0.0

2006-01-04 19:15:10 補充:
To 零大:
我之前也是使用中文來命名變數。
理由跟你差不多。
不過後來我發現幾個缺點,給你當參考一下。
1. 寫程式的時候需要切換輸入法。
2. 對外部的變數還是得使用英文。
3. 別人使用反而不容易習慣。

對我來說是最大的原因是寫程式一直切換輸入法覺得很煩加上別人還是看不懂我的程式,所以我還是以英文來命名我的變數^^"

2006-01-05 19:17:27 補充:
以我的程式的判斷式來判斷兩個都是空字串0.0

2006-01-05 19:22:22 補充:
回月島大:
你所說的是VB對VB
而我所指的是VB對各種程式語言0.0
我會改回英文命名最大的原因是我使用的程式語言不只是VB,還有其他語言,並非所有程式語言都認得中文變數,而且變數、函式的命名我認為必須要統一,而且明確,這樣才是能快速看懂程式減少註解的方法@_@

2005-12-26 17:25:33 · answer #4 · answered by Anonymous · 0 0

B43+C33++A508
變成
A508+B43+C33

B43+C33+A508+
變成
A508+B43+C33

就是這樣 ^^

2005-12-24 23:16:30 補充:
只有錯誤的部份無效
整個字串都無效的話
就好寫多了 XD

2005-12-26 09:39:58 補充:
Phoenix大~
你可以的 ^^v

2005-12-27 08:47:44 補充:
to W.J.S.大~
A0~A999= A 這個ok
A+B+C=A~C 不ok 因為我的構想是要能夠以盒子為單位獨立控制
F~F=F 這個也OK
Clear_ERROR(SQ(i), CStr(Asc(SQ(i)) - 64))
Clear_ERROR(Word, ByRef Num As String)
後面的那個Num是多的
之前一開始的構想是資料和盒子的編號分開丟
後來覺得沒必要,但是忘了改回來 Orz........

to零大~
感謝你的建議
基於以盒子為單位獨立控制原則
最好是能夠分開會比較好 ^^;

2005-12-28 09:39:50 補充:
首先要感謝零大的尊重 ^^
回答一下
39A45 → ""
AB → ""
F3B → ""
F36~F → ""
A45~+~=~~~++~+C27 → C27
D200~D150 → D150~D200 可 ^^a
B33~B999+D0~D22 → B33~D22 不可 ^^a

2005-12-28 09:40:06 補充:
想像一下
這個程氏是用來控制一部機械
而那台機械會讀取你的輸出來做反應
所以不能輸出它看不懂的東西 ^^a
D200~D150 → D150~D200 這樣算是一種修正
修正後的資料不會照成誤判 ^^
B33~B999+D0~D22 → B33~D22 這樣寫
呆呆的機器就掛了 ^^a

2005-12-28 10:07:58 補充:
~+~ → +
那A5~+~B6就會變成A5+B6
這個可接受或不接受都ok
順帶一提 我的撰寫方式是把它拿掉了^^a
A5~+~B6→""

2005-12-29 10:04:52 補充:
To Phoenix大
A45~+~=~~~++~+C27
如你所言A45~是不合法的,所以要拿掉
所以這個式子只剩C27(以我的想法啦)
當然W.J.S.大說得也有道理
如果分析到最後變成A45~=C27
那當然就是全部取消
分析的起點不同會造成不同的結果是我始料未及的啊 ^^a
所以...這樣也算是正確的...
使用者的手誤本來就是很難估算的
我們只能以我們撰寫者的想法
去修正.....不是嗎 ^^a

2005-12-29 10:05:19 補充:
贊成零大與W.J.S.大所言
之前之所以會把題目叫作拋磚引玉
就是有這一層的意思在啊 ^^
(話說之前也有不少人問我為什麼要取這個怪名 XD)

2005-12-29 10:48:07 補充:
補充一下零大所說的
小子句判斷原則:
如果小子句一邊有數字一邊沒數字也拿掉
小子句的判斷跟子句是一樣的,只是後面一些小子句的特別判斷

2005-12-29 13:08:25 補充:
剛剛又小測了一下Liu-Liu大的程式

A2~B500~A550- A2~A550 這個我沒問題
A2~A550~A500- A2~A550 這個我也OK
A2~A1000~A500- 空值 如果照之前的原則.....這樣就很奇怪了
A2~A1000~A500- 空值 的話 A2~B500~A550 應該也要是空值吧@@

2005-12-30 15:34:47 補充:
嗯~抱歉喔~
今天比較忙一點 ^^a
晚點再回

2006-01-02 08:24:57 補充:
零大的程式....
A+A11+A20 = A11+A20 (X)
發覺~
看習慣英文變數之後,中文變數反而會覺得怪怪的 ^^a

2006-01-02 08:41:04 補充:
Liu-Liu大的A1+A02~A12
A02可以視為A2
如此的話 當然答案就是A1~A12囉

2006-01-03 08:23:05 補充:
我的原碼已放上
http://s22.yousendit.com/d.aspx?id=39D76PT3A2WOM0TZM9T3PC7RR
進入之後點選download即可下載
7人下載或25天後連結失效
有誤歡迎指教 ^^

2006-01-04 08:47:56 補充:
To Liu-Liu大~
兩個~~的確應該要視為不可用...
感謝零大先替我說明了.... ^^

另外想請問,零大的程式是在哪邊學的
一般學校老師應該不會教學生用中文當變數吧(難不成是全全自學XD) ^^a

2006-01-05 09:11:35 補充:
這應該是習慣的問題吧
像我看零大的程式
也是頗有不知道該怎麼追程式脈絡的感覺
會習慣性的把中文看成Text或是註解Orz......
關於Phoenix大所說的使用外部變數問題....
只在對外的端口做變數轉換應該還是可以達成(除非要傳的變數很多)
不過一般來說,一個程式需要的外部變數應該都不會大於20個吧(一般的專案而言)
不過我還是不會想用中文變數命名就是了Orz...
習慣問題...
我寧願不知道怎麼取變數名 再去翻字典Orz.....

2006-01-05 09:16:18 補充:
To Liu-Liu大~
A5~A~A18~~A9999 → A0~A18
如果說A被視為A0
那這個答案就非正確囉...
A是代表整個Box
而A0只是在A這個Box下的一格
這樣的轉換似乎是無法被接受的
不是嗎?

(最近打出來的話的越來越像翻譯式中文了Orz...)

2006-01-05 15:09:00 補充:
只要能抓老婆的貓就是好貓 XD
什麼貓那麼厲害 可以抓老婆

2006-01-06 08:41:44 補充:
回Liu-Liu大~
以我的想法是兩個都為空

回Phoenix大~
對於不同程式語言間的連結並不是很了解
可以請Phoenix大再多花些心思為我們解答一下嗎 ^^a

回零大~
一樣是空字串

2006-01-06 08:46:23 補充:
本題將於下午一點選出最佳解....
但是對於最佳解的歸屬 目前尚無法決定Orz.....
能不能把15分切成四塊 分出去啊 Orz....
(雖然知道分數沒有用....)

2006-01-06 13:56:04 補充:
補充 知識評價被截掉的部份
選零大的理由是...
...嗯.....是什麼呢...嗯.......
想不出來(當做是歡迎零大初次參與這個活動吧XD)
選答之前...我還特地做了一個
http://s22.yousendit.com/d.aspx?id=3ABOK7RT3ILKO28FDNFIWZ67VP
選(Download)下載
不過似乎派不上用場XD
再一次的...謝謝大家 ^^

2005-12-23 12:20:20 · answer #5 · answered by ? 5 · 0 0

WJS 萬歲!~

2005-12-23 10:59:19 · answer #6 · answered by Anonymous · 0 0

94/12/29再度修改...^^"
下載點:http://rapidshare.de/files/10042271/BoxBall.rar.html
下載方法:http://bbs.wefong.com/viewthread.php?tid=316284&extra=page%3D1
規則:
1.只要非法字元就移除,合法字元既使有誤也去做簡化如:"+++"簡化成"+","~+~"簡化成"~"
2.
F~F=F
A0~A999=A
A100~A50=A50~A100
A~C=A+B+C
C~A=A+B+C
G00 or G00000=G0

2005-12-23 17:14:57 補充:
月大,B43+C33++A508是要變成B43+C33或B43+A508?
B43+C33+A508+是要變成B43+C33或B43+C33+A508?

2005-12-25 02:31:16 補充:
說的也是,那就簡單多了!這個題目困難處應該是防呆的方式,到現在還是沒辦法寫的十全十美XD!!
Kukka大,趕快把您的Code貼上來吧,很想看高手的程式概念,讓小弟學習學習..Orz
月大,能給我您的Code嗎? Orz

2005-12-26 23:20:45 補充:
月島大建議一些規則:
A0~A999=A
A+B+C=A~C
F~F=F

2005-12-27 00:06:00 補充:
月島大,您的程式小弟有一不瞭解
Clear_ERROR(SQ(i), CStr(Asc(SQ(i)) - 64))
Clear_ERROR(Word, ByRef Num As String)
Num有何作用?我把它拿掉好像不會影響結果...^^

2005-12-28 11:31:38 補充:
我的作法是:
A45~+~=~~~++~+C27 → A45~=C27因有非法字元=所以都全拿掉
A5~+~B6→A5~B6兩邊字母不一樣也拿掉

2005-12-28 21:37:52 補充:
Phoenix大,我已經傳上去,麻煩幫我測試一下.^^"

2005-12-28 23:46:47 補充:
Liu-Liu大,有發現一些Bug
A0~A506+B43+C105+A508~A999+D1+D2+C65+A507+C100~+~C500+C999+GR654+K~N+F~F→A+B43+C65+C105+C999D1~D2+F
A-12→A12
A1-2→A12
A1.2→A12
集思廣益大家一起搞好這題目^_^

2005-12-29 11:49:45 補充:
Liu-Liu大新版本還沒有找到Bug

2005-12-29 16:03:23 補充:
感謝Liu-Liu大,我的方式是以+ 分隔成一組單位,若單位內有非法字元就砍掉^^

2005-12-29 23:58:02 補充:
謝謝Liu-Liu大的指導,因為月大說不該出現的東西不能出現,所以就沒把非法字元移除,否則A-12=A12就變成合法了,還有能否Po Code ^^...Orz
另外參考月大的寫法再修改,煩請大大们再測試

2005-12-30 13:58:25 補充:
Liu-Liu大,程式碼已收到尚在研究中,
空白字元是否要視為合法,我看由月大來決定好了,說也奇怪,今天月大好像還沒出現...XD

2005-12-31 16:37:23 補充:
零大:經測試發現一些問題
a0+a1=空(小問題加個UCase就可)
A=A0
A0+~+A9=A0+A9而A0~+~A9=空,似乎有矛盾
A000=A0,A0000=空,跟我之前問題一樣....XD
大家的程式您為何會拿不到呢?我下都沒問題阿,不要用續傳軟體下試看看.

2006-01-02 13:03:57 補充:
Phoenix大,請問一下,你推薦的Regular Expression上網查了一下好像是類似文字搜尋器,vb能用嗎?那裡可下載?有SDK嗎?

2006-01-02 14:33:54 補充:
謝謝Liu-Liu大,稍微看了一下,功能好像蠻多的,不過好像.NET才能用...XD

2006-01-02 23:39:49 補充:
該去學.Net了,不過聽說跟VB6差很多?

2006-01-03 13:36:20 補充:
零大,這一題我的程式跑出來是空值,因為簡化後變成A1~A44. A1~ 空.
Liu-Liu大的答案是A1~A44
而月大的答案跟你一樣是A1,叫你第一名Orz

2006-01-05 11:56:11 補充:
對於我這個打字慢的人來說使用中文命名變數,只有增加寫程式的時間,不過零大的說法很有道理,需要加註解的地方減少,整體時間說不定變得更快,反正這只是視個人習慣問題...只要能抓老婆的貓就是好貓^^

2005-12-23 10:36:27 · answer #7 · answered by W.J.S. 7 · 0 0

fedest.com, questions and answers