January 12, 2009

VB程式小教學 - 期末考練習題篇

這是課本5-46的練習題,我只寫第5題
其他題目應該不難,同學自己做做看
還有這題公尺數那邊我懶得用CInt取值,有需要同學自己加
---------------------分隔線---------------------
嗯,覺得下面解釋太複雜請自行略過,先試著看程式碼
不會的地方再來看解釋,而程式本來就有很多種寫法
各位可以自己去實驗自己喜歡的作法

方法1 - 巢狀判別式

介面

程式碼


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim counter As Integer
counter = 0
If TextBox1.Text < 1500 Then
TextBox2.Text = 80
Else
If TextBox1.Text Mod 500 > 0 Then
counter = 1 + ((TextBox1.Text - 1500) \ 500)
Else
counter = (TextBox1.Text - 1500) \ 500
End If
TextBox2.Text = 80 + 5 * counter
End If
End Sub


解釋
Dim counter As Integer
counter = 0

首先這行是設定一個叫做counter的變數
這個counter我是拿來當最下面計算用的
也就是跳了幾次錶
題目說1500公尺前算80元,1500公尺以後每500公尺就要加5元嘛
所以1500公尺以後的計算式子就變成
總價 = 80 + 5 x counter
這樣各位了解了嗎?

If TextBox1.Text < 1500 Then
TextBox2.Text = 80

這兩行就是說如果公尺數小於1500的話,那車資就等於80元了

Else
If TextBox1.Text Mod 500 > 0 Then
counter = 1 + ((TextBox1.Text - 1500) \ 500)

*運算符號功能課本3-30頁有,忘了請回去看
這裡的Else是說如果公尺數沒有小於1500的情況下所做的動作
判別是將它除以500取餘數,也就是用運算子"Mod",而後看看它有沒有剩餘
比如說1600 / 500 = 3於100,那麼它有剩,那照課本上說不滿500以500公尺來算
那麼多出來的100公尺要等於直接加一次跳錶囉,那麼
我們記得要把跳錶數+1,其他部分就直接取"整數除法" 也就是符號"\"而不是用"/"

Ex:2100公尺丟進去
那麼我們用算的是車資 = 90元;也就是跳錶兩次,那看看程式有沒有符合
2100 Mod 500 = 100
100 > 0
而後counter = 1 + ((2100 - 1500) \ 500)
= 1 + (600 \ 500)
= 1 + 1
= 2
符合結果


下面這行就接續上面的判別,如果除以500沒有餘數的話呢?
那就是整除了,整除就不用再跳錶一次了,所以計算式子不同
Else
counter = (TextBox1.Text - 1500) \ 500
End If

跳錶數就不用再多算一次了,而到這裡跳錶數(counter)已經計算完畢

TextBox2.Text = 80 + 5 * counter
End If

這邊就是輸出的部份了,就是放面所說的
總價 = 80 + 5 x 跳錶數

方法1解決

---------------------分隔線---------------------

方法2 - IIf

用簡單的IIf解決,可以省事很多
一樣打在Button1的底下
程式碼
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim counter, point As Integer
        counter = 0
        If TextBox1.Text < 1500 Then
            TextBox2.Text = 80
        Else
            point = (TextBox1.Text - 1500) \ 500
            counter = IIf(TextBox1.Text Mod 500 > 0, 1 + point, point)
            TextBox2.Text = 80 + 5 * counter
        End If
    End Sub

主要是再多加一個point變數
另它等於(TextBox1.Text - 1500) \ 500
而後使用IIf來搞定就OK了
IIf格式:
IIf(判別條件,成立的值,不成立的值)

再來就是用迴圈了

---------------------分隔線---------------------

方法3 - While迴圈

看得懂的就看,基本上我寫爽的,但是簡單非常多
一樣打在Button1的底下

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x, change As Integer
        x = TextBox1.Text - 1500
        While x > 0
            change += 5
            x -= 500
        End While
        TextBox2.Text = 80 + change
    End Sub


嗯,簡單多了,有沒有覺得程式越寫越短的感覺啊XD?
迴圈這學期因為教太慢的關係,所以都沒機會碰到
但是下學期會碰到,等有碰到再說吧,看爽就好

---------------------分隔線---------------------
嗯,方法4
別學我,偷懶是不好的習慣
好孩子不要學,寫出來很靠背
一行寫出來,看得懂的就看吧

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox2.Text = 80 + IIf(TextBox1.Text >= 1500, Math.Ceiling((TextBox1.Text - 1500) / 500) * 5, 0)
    End Sub


簡單明瞭
本來還想PO副函式寫的版本,後來想說算了
副函式不適合用在這簡單的東西上面,寫出來會更多行 (茶


就這樣

0推薦此文章
Today's Visitors: 0 Total Visitors: 202
Personal Category: 程式相關 Topic: feeling / personal / murmur
Previous in This Category: VB程式小教學 - 真值表概念   Next in This Category: 程式考題練習
[Trackback URL]

Reply
  • 1樓

    1樓搶頭香

    感動感動~
    您真是我們電腦白癡的救星

    大推~

    ps:那些看過不回文的~你們會有現世報的

  • 林宗靖 at January 12, 2009 11:35 PM comment
  • 0.0 今天才看到回覆
    對你們有幫助就好~

  • Blog Owner at January 13, 2009 12:36 PM Reply
  • 2樓

    2樓頸推

    感恩感恩!!!

  • blue79608 at January 12, 2009 11:48 PM comment | prosecute
  • 不會=w=

  • Blog Owner at January 13, 2009 12:35 PM Reply
  • 3樓

    3樓坐沙發

    我頂~~~~~

  • at January 13, 2009 12:32 PM comment
  • 別頂太兇XD

  • Blog Owner at January 13, 2009 12:36 PM Reply
Post A Comment









Yes No



Please input the magic number:

( Prevent the annoy garbage messages )
( What if you cannot see the numbers? )
Please input the magic number

誰來收藏
Loading ...
unlog_NVPO 0