晴天 發問時間: 電腦與網際網路程式設計 · 1 0 年前

VB印星星

請問我想要作一個印星星的程式

當我按下執行的時候左上或右上或左下或右下

必須跑出用星星排程的直角三角形

且他可以隨機便顏色請直接傳程式給我

信箱jay102035@yahoo.com.tw

我在看哪個比較好給予分數

已更新項目:

酷兒:您的程式碼無法使用耶...

我家是vb6.0的

他說什麼錯誤"6"

4 個解答

評分
  • 酷兒
    Lv 5
    1 0 年前
    最佳解答

    畫星星程式程式不長, 直接Post上來提供你參考

    希望有幫助到你~~

    Private Sub Command1_Click()

    Dim i As Integer

    Dim j As Integer

    Dim outleft As String

    Dim outright As String

    Dim starNumber As String

    Cls

    Randomize

    Me.ForeColor = Int(Rnd * (255 * 255 * 255)) <--隨機產生顏色

    starNumber = 10 <--設定你要產生的*號數

    For i = 1 To starNumber

    For j = 1 To i

    outleft = String(j, ”*”) + String(starNumber - j, ” ”)

    outright = String(starNumber - j, ” ”) + String(j, ”*”)

    Next

    Me.Print outleft + String(6, ” ”) + outright <--在表單上畫出三角型

    Next

    Me.Print

    For i = starNumber To 1 Step -1

    For j = 1 To i

    outleft = String(j, ”*”) + String(starNumber - j, ” ”)

    outright = String(starNumber - j, ” ”) + String(j, ”*”)

    Next

    Me.Print outleft + String(6, ” ”) + outright <--在表單上畫出三角型

    Next

    End Sub

    2008-06-03 22:34:45 補充:

    你要把全型符號”換成半型

    另 <--這是註解,也要拿掉

    才能RUN哦~

    2008-06-03 23:07:00 補充:

    W.J.S大師

    是的,那個值會溢位不能Print出來,但直接指定到 ForeColor就可以,我也很覺得很奈悶

    2008-06-03 23:12:16 補充:

    咦~怪了,我的現在也會出現溢位~”~

    你可以參考W.J.S大師的意見改成

    Me.ForeColor = Int(Rnd * (255& * 255 * 255))

    或者改成

    Me.ForeColor = Int(Rnd * (255^3))

    就可以Run了

    2008-06-04 05:22:52 補充:

    果然是高手如雲

    從來沒仔細想過看似簡單的數字運算, 竟也隱藏這麼大的學問

    又長智慧了 ^^

    參考資料: 自己
  • C.M.H.
    Lv 5
    1 0 年前

    這是一個很好的問題.

    為什麼會溢位呢?

    Print 256 * 128

    就已經會產生溢位了.

    如果我們今一個程式如下:

    Dim a As Integer

    Dim b As Integer

    Dim c As Integer

    a = 256

    b = 128

    c = a * b

    Print c

    根據執行的結果, 依然會產生溢位.

    這是為什麼呢?

    因為 Integer 的範圍為-32768 到 32767, 因此計算的結果會產生溢位.

    但是, 如果 我們把 c 宣告成 Long 程式是不是就會順利執行呢?

    答案是, 還是溢位.

    因此, 如果要讓這個程式"順利"而且"符合"正常的程式寫作方式.

    那我們是不是要把 a b c 都宣告成 Long.

    答案是, 可以順利執行.

    但是, 如果是一個龐大的程式, 對記憶體有一定的需求, 這樣做是不是有點浪費記憶體呢?

    由於我們的計算子都是整數, 因為我們是不是可以找出一種辦法來解決這個問題?

    這是時候, 我們只要把他 轉成 長整數(Clng) 即可.

    Print CLng(256) * 128

    是的, 這樣就可以順利執行了.

    那為什麼會產生溢位的情形呢?

    困難的不多說, 簡單的說. 我們可以想像成. 所有的溢位, 都是因為記憶體的預留空間不足所造成的.

    因此, 我們只要加大他的預留空間即可.

    也因此, 我們只要強迫改變其中一個運算子的資料型態即可.

    也因此, W.J.S. 在第 1個 255後面加上 &是有相同的功能的.

    也因此, 又會產生一個疑問. 不是說, 省略變數的宣告可以到 Duble 的範圍嗎?

    那為什麼不行呢?

    在此, 我們可以做個小小的實驗.

    Const a = 256

    Const b = 128

    c = a * b

    Print c

    這段程式是否可以順利執行呢?

    答案是溢位.

    是不是跟上面的結果是一樣的呢?

    那如果我們把 a 值調大, 是不是一樣會溢位呢?

    試看看吧!!

    調成 1024 結果呢? 果然是溢位. 那上面那句 Duble 是微軟"唬人"的吧!!

    其實, 他所謂的到 Duble並不是指會直接給你這麼大的空間.

    還是要看你的數值, 如果不超過 Integer 的範圍, 那他就給你一個 Integer 的空間.

    所以我們再來做第 2個有趣的實驗.

    Const a = 32768

    Const b = 128

    c = a * b

    Print c

    這樣是不是可以順利執行呢?

    答案是可以的, 這是為什麼呢? 1024 不行, 而 32768 卻可以.

    原來是因為 a 值, 變得超過了 Integer 的範圍了, 所以改給 Long 的空間.

    這樣答案就變得很清楚了.

    因為有些人, 在寫作程式, 會遇到溢位, 而 de-bug 相當久. 不知所措.

    即便問題解決了, 但仍不知錯在那....!!

    所以特地發這篇文章. 來給大家參考. 希望大家可以了解溢位的原因. 以及處理方法.

    請大家指教. 謝謝囉!!

    2008-06-04 02:03:32 補充:

    W.J.S.

    請看一下, 我發表在 回答的文章 是否可以解決你的疑惑

    2008-06-05 04:38:00 補充:

    其實如果是浮點運算的問題, 基本上我們可以把他當成是一個程式的 bug.

    跟 溢位是不太一樣的.

    簡單的說.

    例如 圓周率我們令他為 3.1415926 時.

    Const PI = 3.1415926

    a = PI * 10000

    Print a

    照理說, 應該印出 31415.926

    結果卻印出 31415 .

    像類似這種情況, 我們就可以說他是浮點運算的 bug.

    當你一切的程式文法都正確時, 確跑出錯誤的結果.

    才可歸類為程式的 bug , 一個 bug 的產生, 是必須反覆驗證的.

    (ps: 上例程式只是假設)

    參考資料: By C.M.H. 發文於 knowledge+
  • 阿戊
    Lv 7
    1 0 年前

    隨機顏色這樣設比較保險:

    Me.ForeColor =RGB(int(rnd*256),int(rnd*256),int(rnd*256))

    2008-06-04 00:21:37 補充:

    單純用 debug.? 的話,它會以運算式的第一個值的最小型態來當成答案的型態...

    各位可以試試在debug視窗執行:

    Print 255!*255*255

    Print 255&*255*255

    結果都會不一樣!

    2008-06-04 00:24:07 補充:

    在沒有定義型態的運算式中亦同~

    2008-06-04 00:45:12 補充:

    如果是兩個以上的運算式則分開算

    比如:

    ? 255*255#*255

    ? 255*255*255#

    第一個ok(因為其中一個有定義型態)!第二個會溢位!(第一個255和第二個255都只是整數就出錯了...輪不到第三個!)

    2008-06-04 01:08:47 補充:

    呵呵~講得好像有點亂亂~>.<" (愈來愈覺得柱己的表達能力正在 衰退ing 中...)

  • W.J.S.
    Lv 7
    1 0 年前

    Me.ForeColor = Int(Rnd * (255 * 255 * 255))

    改成

    Me.ForeColor = Int(Rnd * (255& * 255 * 255))

    說也奇怪為何 Print 255 * 255 * 255 竟然會產生溢位錯誤?

    2008-06-03 23:45:47 補充:

    酷兒大大

    我執行Me.ForeColor = Int(Rnd * (255 * 255 * 255))一樣會溢位,除非改成Me.ForeColor = Int(Rnd * 255 * 255 * 255)

    其實光 Print 255*255 就會溢位,我想可能是VB6在純數字的運算是限制在Integer型別 255*255 = 65025 >32767所以就溢位了,不過我還不是很確定,我看還是來請教戊大看看.

    2008-06-04 01:29:24 補充:

    戊大:

    不會亂ㄚ,別想太多^_^

    ! 跟 & 結果會不同是否是VB6的bug(浮點運算的問題)?還有 255 * 255 為何會溢位實在搞不懂XD

    2008-06-04 23:55:33 補充:

    感謝C.M.H.大的解惑實在受益良多^_^

    查了一下MSDN關於浮點運算的問題不妨參考看看

    http://support.microsoft.com/kb/279755/zh-tw

還有問題?馬上發問,尋求解答。