2017年1月12日 星期四

Quiz2

Quiz2

        'P1.成績檔處理
        '   讀入學生成績檔(P1.in,欄位:座號、國、英、數),計算所有學生的個人總分。
        '   將結果顯示出來,並輸出到輸出檔(P1.out)。
        '   輸出檔內容格式如下:(平均求到小數下 1 位,答案僅供參考)
        '開檔
        FileOpen(1, "P1.in", OpenMode.Input)
        '輸入 處理
        Dim no, ans As String
        Dim ch, en, ma As Integer
        Do Until EOF(1)
            Input(1, no) : Input(1, ch) : Input(1, en) : Input(1, ma)
            ans &= no & "," & ch + en + ma & If(EOF(1), "", vbNewLine)
        Loop
        '輸出
        Me.TextBox1.Text = ans
        My.Computer.FileSystem.WriteAllText("P1.out", ans, False)
        '關檔
        FileClose(1)


        'P2.文字檔十進位轉2 進位
        '   請設計一個程式讀取文字檔(P2.in,多筆),將每一列數字「十進位轉2 進位」。
        '   將結果顯示出來,並對應輸出到輸出檔(P2.out)。
        '   試用自定函式—Bin(n)來完成
        '輸入
        Dim s As String = ""
        s = My.Computer.FileSystem.ReadAllText("P2.in")
        '處理
        Dim ans As String = ""
        Dim row = Split(s, vbNewLine)
        For i = 0 To UBound(row)
               ans &= Bin(Val(row(i))) & If(i = UBound(row), "", vbNewLine)
        Next
        '輸出
        Me.TextBox2.Text = ans
        My.Computer.FileSystem.WriteAllText("P2.out", ans, False)
模組
    Function Bin(n)
        If n < 2 Then
            Return n
        Else
            Return Bin(n \ 2) & n Mod 2
        End If
    End Function

        'P3.直角三角形列印: 軟體設計丙級】利用迴圈控制指令
        '    由輸入檔(P3.in,1 筆)讀入整數數字,列印從1 開始直到該數字為止之直角三角形
        '    並輸出到輸出檔(P3.out)。
        '輸入
        Dim s As String = ""
        s = My.Computer.FileSystem.ReadAllText("P3.in")
        '處理
        Dim ans As String = ""
        Dim i, j As Integer
        For i = 1 To Val(s)
             For j = 1 To i
                    ans &= i
             Next
             ans &= If(i = Val(s), "", vbNewLine)
        Next
        '輸出
        Me.TextBox3.Text = ans
        My.Computer.FileSystem.WriteAllText("P3.out", ans, False)


        'P4.求最小公倍數lcm
        '   用inputbox 輸入兩個正整數A 及B,求出「最小公倍數」(l.c.m)。
        '   試用自定函式—GCD(a, b)來完成求A 及B 之最大公因數
        '   自定函式—lcm(a, b)來完成求A 及B 之最小公倍數
        '輸入
        Dim a, b As Integer
        a = InputBox("輸入一個正整數A", "輸入兩個正整數A 及B,求出「最小公倍數」", 0)
        b = InputBox("輸入一個正整數B", "輸入兩個正整數A 及B,求出「最小公倍數」", 0)
        '處理
        Dim ans As String = ""
        ans = lcm(a, b)
        '輸出
        Me.TextBox4.Text = ans
模組
Function GCD(a, b)
     If b = 0 Then
          Return a
     Else
          Return GCD(b, a Mod b)
     End If
End Function
Function lcm(a, b)
       Return a * b / GCD(a, b)
End Function

        'P5. 文字檔求 lcm
        '    續上題,請設計一個程式讀取文字檔(P5.in,多筆),輸入兩個正整數 A 及 B,求出「最小公倍數」(l.c.m)。
        '    並對應輸出到輸出檔(P5.out)。 
        '開檔
        FileOpen(1, "P5.in",OpenMode.Input)
        '輸入 處理
        Dim a, b As Integer
        Dim ans As String = ""
        Do Until EOF(1)
            Input(1, a) : Input(1, b)
            ans &= lcm(a, b) & If(EOF(1), "", vbNewLine)
        Loop
        '輸出
        Me.TextBox5.Text = ans
        My.Computer.FileSystem.WriteAllText("P5.out", ans, False)
        '關檔
        FileClose(1)
 
      
       'Q1.直角三角形列印: 軟體設計丙級】利用迴圈控制指令
        '    由輸入檔(Q1.in,1 筆)讀入整數數字,列印從1 開始直到該數字為止之直角三角形
        '    並輸出到輸出檔(Q1.out)
        '輸入
        Dim s As String = ""
        s = My.Computer.FileSystem.ReadAllText("Q1.in")
        '處理
        Dim ans As String = ""
        Dim i, j As Integer
        For i = 1 To Val(s)
            For j = 1 To i
                ans &= j
            Next
            ans &= If(i = Val(s), "", vbNewLine)
        Next
        '輸出
        Me.TextBox6.Text = ans
        My.Computer.FileSystem.WriteAllText("Q1.out", ans, False)
 
        'Q2.文字檔十進位轉4 進位
        '    請設計一個程式讀取文字檔(Q2.in,多筆),將每一列數字「十進位轉4 進位」。
        '    將結果()顯示出來
        '    並對應輸出到輸出檔(Q2.out)。
        '    試用自定函式—Quo(n)來完成。
        '輸入
        Dim s As String = ""
        s = My.Computer.FileSystem.ReadAllText("Q2.in")
        '處理
        Dim ans As String = ""
        Dim row = Split(s, vbNewLine)
        For i = 0 To UBound(row)
            ans &= Quo(row(i)) & If(i = UBound(row), "", vbNewLine)
        Next
        '輸出
        Me.TextBox7.Text = ans
        My.Computer.FileSystem.WriteAllText("Q2.out", ans, False)
模組
Function lcm(a, b)
       Return a * b / GCD(a, b)
End Function


'Q3.求GCD
        '    用inputbox 輸入兩個正整數A 及B,求出「最大公因數」(G.C.D)。
        '    試用自定函式—GCD(a, b)來完成求A 及B 之最大公因數。
        '輸入
        Dim a, b As Integer
        a = InputBox("輸入一個正整數A", "輸入兩個正整數A 及B,求出「最大公因數」", 0)
        b = InputBox("輸入一個正整數B", "輸入兩個正整數A 及B,求出「最大公因數」", 0)
        '處理
        Dim ans As String = ""
        ans &= GCD(a, b)
        '輸出
        Me.TextBox8.Text = ans
模組
Function GCD(a, b)
      If b = 0 Then
            Return a
      Else
            Return GCD(b, a Mod b)
      End If
End Function
 
        'Q4 文字檔求 GCD
        '    續上題,請設計一個程式讀取文字檔(Q4.in,多筆),輸入兩個正整數 A 及 B,求出「最大公因數」(G.C.D)。
        '    並對應輸出到輸出檔(Q4.out)。
        '開檔
        FileOpen(1, "Q4.in", OpenMode.Input)
        '輸入 處理
        Dim a, b As Integer
        Dim ans As String = ""
        Do Until EOF(1)
            Input(1, a) : Input(1, b)
            ans &= GCD(a, b) & If(EOF(1), "", vbNewLine)
        Loop
        '輸出
        Me.TextBox9.Text = ans
        My.Computer.FileSystem.WriteAllText("Q4.out", ans, False)
        '關檔
        FileClose(1)

        'Q5.成績檔處理
        '   讀入學生成績檔(Q5.in,欄位:座號、國、英、數),計算所有學生的個人平均。
        '   將結果顯示出來,並輸出到輸出檔(Q5.out)。
        '開檔
        FileOpen(1, "Q5.in", OpenMode.Input)
        '輸入 處理
        Dim no, ans As String
        Dim ch, en, ma As Integer
        Do Until EOF(1)
            Input(1, no) : Input(1, ch) : Input(1, en) : Input(1, ma)
            ans &= no & "," & Format((ch + en + ma) / 3, "#0.0") & If(EOF(1), "", vbNewLine)
        Loop
        '關檔
        FileClose(1)
        '輸出
        Me.TextBox10.Text = ans
        My.Computer.FileSystem.WriteAllText("Q5.out", ans, False)

2016年12月19日 星期一

函式


  • 內建數值函數

        Dim ans As String = ""
        ans &= "Math.Abs(2)=" & Math.Abs(2) & vbNewLine
        ans &= "Math.Abs(-2)=" & Math.Abs(-2) & vbNewLine
        ans &= "Cint(2.5)=" & CInt(2.5) & vbNewLine
        ans &= "Cint(-2.5)=" & CInt(-2.5) & vbNewLine
        ans &= "Cint(-2.51)=" & CInt(-2.51) & vbNewLine
        ans &= "Cint(3.5)=" & CInt(3.5) & vbNewLine
        ans &= "Cint(-3.5)=" & CInt(-3.5) & vbNewLine
        ans &= "Int(2.4)=" & Int(2.4) & vbNewLine
        ans &= "Int(-2.4)=" & Int(-2.4) & vbNewLine
        ans &= "Fix(2.4)=" & Fix(2.4) & vbNewLine
        ans &= "Fix(-2.4)=" & Fix(-2.4) & vbNewLine
        ans &= "Math.Round(5/3,2)=" & Math.Round(5 / 3, 2) & vbNewLine
        ans &= "Math.Round(1.665,2)=" & Math.Round(1.665, 2) & vbNewLine
        ans &= "Math.Ceiling(7.03)=" & Math.Ceiling(7.03) & vbNewLine
        ans &= "Math.Ceiling(-7.03)=" & Math.Ceiling(-7.03) & vbNewLine
        ans &= "Math.Floor(7.03)=" & Math.Floor(7.03) & vbNewLine
        ans &= "Math.Floor(-7.03)=" & Math.Floor(-7.03) & vbNewLine
        ans &= "Math.Truncate(7.03)=" & Math.Truncate(7.03) & vbNewLine
        ans &= "Math.Truncate(-7.03)=" & Math.Truncate(-7.03) & vbNewLine
        ans &= "Int(Rnd()*10)+5=" & Int(Rnd() * 10) + 5 & vbNewLine
        ans &= "Math.Sqrt(4)=" & Math.Sqrt(4) & vbNewLine
        ans &= "Math.Sign(4)=" & Math.Sign(4) & vbNewLine
        ans &= "Math.Sign(0)=" & Math.Sign(0) & vbNewLine
        ans &= "Math.Sign(-4)=" & Math.Sign(-4) & vbNewLine
        ans &= "Math.Log(2)/Math.Log(10)=" & Math.Log(2) / Math.Log(10) & vbNewLine
        ans &= "Math.Exp(1)=" & Math.Exp(1) & vbNewLine
        ans &= "Math.Pow(2,10)=" & Math.Pow(2, 10) & vbNewLine
        ans &= "Math.Max(2,3)=" & Math.Max(2, 3) & vbNewLine
        ans &= "Math.Min(2,3)=" & Math.Min(2, 3) & vbNewLine
        ans &= "Math.PI=" & Math.PI & vbNewLine
        ans &= "Math.E=" & Math.E & vbNewLine
        Dim data(10, 3) As Integer
        ans &= "UBound(Data)=" & UBound(data) & vbNewLine
        ans &= "UBound(Data, 2)=" & UBound(data, 2) & vbNewLine
        ans &= "LBound(data)=" & LBound(data) & vbNewLine
        ans &= "LBound(data, 2)=" & LBound(data, 2) & vbNewLine
        Dim PI = 3.14159265358979
        ans &= "Math.Sin(PI / 6)=" & Math.Sin(PI / 6) & vbNewLine
        Me.TextBox1.Text = ans
    End Sub




  • 內建字串函數

        Dim ans As String = ""
        ans &= "Chr(65)=" & Chr(65) & vbNewLine
        ans &= "Asc(A)=" & Asc("A") & vbNewLine
        ans &= "Asc(A)=" & Hex(Asc("王")) & vbNewLine
        ans &= "ChrW(65)=" & ChrW(65) & vbNewLine
        ans &= "AscW(A)=" & AscW("A") & vbNewLine
        ans &= "Hex(16)=" & Hex(16) & vbNewLine
        ans &= "Oct(16)=" & Oct(16) & vbNewLine
        ans &= "Val(123)=" & Val("123") & vbNewLine
        ans &= "Val(52A)=" & Val("52A") & vbNewLine
        ans &= "Val(xxx)=" & Val("xxx") & vbNewLine
        ans &= "Str(23)=" & Str("23") & vbNewLine
        ans &= "Len(ABCDE)=" & Len("ABCDE") & vbNewLine
        ans &= "Left(ABCDE,2)" & Strings.Left("ABCDE", 2) & vbNewLine
        ans &= "Right(ABCDE,2)" & Strings.Right("ABCDE", 2) & vbNewLine
        ans &= "Mid(ABCDE,2,3)=" & Mid("ABCDE", 2, 3) & vbNewLine
        ans &= "UCase(AbcDe)=" & UCase("AbcDe") & vbNewLine
        ans &= "LCase(AbcDe)=" & LCase("AbcDe") & vbNewLine
        ans &= "Trim(  A B  )=" & Trim("  A B  ") & vbNewLine
        ans &= "LTrim(  A B  )=" & LTrim("  A B  ") & vbNewLine
        ans &= "RTrim(  A B  )=" & RTrim("  A B  ") & vbNewLine
        Dim data(10, 3) As Integer
        ans &= "UBound(data)=" & UBound(data) & vbNewLine
        ans &= "UBound(data,2)=" & UBound(data, 2) & vbNewLine
        ans &= "LBound(data)=" & LBound(data) & vbNewLine
        ans &= "LBound(data,2)=" & LBound(data, 2) & vbNewLine
        Dim PI = 3.14159265358979
        ans &= "Math.Sin(PI / 6)=" & Math.Sin(PI / 6) & vbNewLine
        ans &= "StrDup(4,65)=" & StrDup(4, "65") & vbNewLine
        ans &= "StrReverse(ABCDE)=" & StrReverse("ABCDE") & vbNewLine
        ans &= "RSet(2.3,5)=" & RSet(2.3, 5) & vbNewLine
        ans &= "LSet(2.3,5)=" & LSet(2.3, 5) & vbNewLine
        ans &= "InStr(ABCDABCD,D)=" & InStr("ABCDABCD", "D") & vbNewLine
        ans &= "InStr(ABCDEF,CC)=" & InStr("ABCDEF", "CC") & vbNewLine
        ans &= "InStr(6,ABCDABCD,D)=" & InStr(6, "ABCDABCD", "D") & vbNewLine
        ans &= "InStr(6,ABCDABCD,Ab)=" & InStr(6, "ABCDABCD", "Ab") & vbNewLine
        ans &= "InStrRev(ABCDABCD,D)=" & InStrRev("ABCDABCD", "D") & vbNewLine
        ans &= "InStrRev(ABCDABCD,D,7)=" & InStrRev("ABCDABCD", "D", 7) & vbNewLine
        ans &= "Replace(ABCDE,BCD,xxx)=" & Replace("ABCDE", "BCD", "xxx") & vbNewLine
        Me.TextBox2.Text = ans
    End Sub

12/9 訂正

sumEven

'Q1:sumEven(n) 己知正整數 n,求 2+4+6..+ n 之和'偶數
Dim n As Integer
n = InputBox("n=", "Q1:sumEven(n) 己知正整數 n,求 1+3+5..+ n 之和", 1)
n = If(n Mod 2 = 1, n - 1, n)
Me.TextBox3.Text = sumEven(n)
模組  
'Q1:sumEven(n) 己知正整數 n,求 2+4+6..+ n 之和
'偶數

 Function sumEven(n)
        If n <= 2 Then
              Return n
        Else
              Return sumEven(n - 2) + n
        End If
End Function
最小公倍數lcm
       '輸入
        Dim a, b As Integer
        a = InputBox("輸入一個正整數A", "求出「最小公倍數」", 0)
        b = InputBox("輸入一個正整數B", "求出「最小公倍數」", 0)
        '處理
        Dim ans As String = ""
        ans = lcm(a, b)
        '輸出
        Me.TextBox4.Text = ans
模組 
'GCD(a, b) 求A 及B 之最大公因數
Function GCD(a, b)
     If b = 0 Then
          Return a
     Else
          Return GCD(b, a Mod b)
     End If
End Function 
'lcm(a, b) 求A 及B 之最小公倍數
'a * b = lcm(a, b) * GCD(a, b)

Function lcm(a, b)
      Return a * b / GCD(a, b)
End Function

2016年11月11日 星期五

程式設計一 上機小考1 訂正

程式設計一 上機小考1 訂正

Q3. 不換行在螢幕上印出 -19  -28  -37 . . .  -73  -82  (限用 For Next)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Q3. 不換行在螢幕上印出 -19  -28  -37 . . .  -73  -82  (限用 For Next)
        Dim ans As String = ""
        For i = -19 To -82 Step -9
            ans &= i & "  "
        Next
        Me.TextBox1.Text = ans
    End Sub


2016年11月10日 星期四

偶數卷

偶數卷

  • B1 求 1^2 + 3^2 + 5^2 ...+ 99^2
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'B1 求 1^2 + 3^2 + 5^2 ...+ 99^2
        Dim ans As Integer
        For i = 1 To 99
            ans += If(i Mod 2 = 1, i, 0) ^ 2
        Next
        Me.TextBox1.Text = ans
    End Sub


  • B2 輸入 a , b , c 三個邊長,若能夠成三角形,則印出計算此三角形面積;否則印出 " 非三角形 "。

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'B2 輸入 a , b , c 三個邊長,若能夠成三角形,則印出計算此三角形面積;否則印出 " 非三角形 "。
        Dim a, b, c As Single
        Dim ans As String
        a = InputBox("a=", "", 0)
        b = InputBox("b=", "", 0)
        c = InputBox("c=", "", 0)
        Dim s = (a + b + c) / 2
        If a + b > c And a + c > b And b + c > a Then
            ans = (s * (s - a) * (s - b) * (s - c)) ^ 0.5
        Else
            ans = "非三角形"
        End If
        Me.TextBox2.Text = ans
    End Sub
               

  • B3 限用Do while...Loop結構,由外部讀入整數數字,列印從1開始直到該數字為止之直角三角形
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        'B3 限用Do while...Loop結構,由外部讀入整數數字,列印從1開始直到該數字為止之直角三角形。
        Dim ans As String
        Dim n As Integer
        n = InputBox("n=", "", 0)
        Dim j = 1
        Do While j <= n
            Dim i = 1
            Do While i <= j
                ans &= i
                i += 1
            Loop
            ans &= vbNewLine
            j += 1
        Loop
        Me.TextBox3.Text = ans
    End Sub
  • B4 輸入整數a,b,c 求一元二次方程式AX^2+BX+C的解。(有相異實根、重根、相異虛根)限用select case
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        'B4 輸入整數a,b,c 求一元二次方程式AX^2+BX+C的解。(有相異實根、重根、相異虛根)限用select case
        Dim ans As String
        Dim a, b, c As Integer
        a = InputBox("a=", "", 0)
        b = InputBox("b=", "", 0)
        c = InputBox("c=", "", 0)
        Select Case b ^ 2 - 4 * a * c
            Case Is > 0
                ans = "有相異實根" & -b + (b ^ 2 - 4 * a * c) ^ 0.5 / (2 * a) & "  " & -b - (b ^ 2 - 4 * a * c) ^ 0.5 / (2 * a)
            Case Is < 0
                ans = "有相異虛根"
            Case Else
                ans = "有重根" & -b / (2 * a)
        End Select
        Me.TextBox4.Text = ans
    End Sub
  • B5 輸入 0 到 100 之間的成績 s ,印出 優 甲 乙 丙 丁 五等第。限用 if 結構
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        'B5 輸入 0 到 100 之間的成績 s ,印出 優 甲 乙 丙 丁 五等第。限用 if 結構
        Dim ans As String
        Dim s As Single
        s = InputBox("s=", "", 0)
        If s <= 100 And s >= 90 Then
            ans = "優"
        ElseIf s < 90 And s >= 80 Then
            ans = "甲"
        ElseIf s < 80 And s >= 70 Then
            ans = "乙"
        ElseIf s < 70 And s >= 60 Then
            ans = "丙"
        Else
            ans = "丁"
        End If
        Me.TextBox5.Text = ans
    End Sub
  • B6 不換行輸出 -2.5  -2  -1.5  -1  ...  2  2.5 。 限用 Do...Loop while
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        'B6 不換行輸出 -2.5  -2  -1.5  -1  ...  2  2.5 。 限用 Do...Loop while
        Dim ans As String = ""
        Dim i = -2.5
        Do
            ans &= i & "  "
            i += 0.5
        Loop While i <= 2.5
        Me.TextBox6.Text = ans
    End Sub

2016年11月9日 星期三

單元:ch04. 迴圈陳述式

單元:ch04. 迴圈陳述式

  • 我知道 For ...next 結構

For 迴圈變數 = 初值 To 終值 Step 增量 
Next 迴圈變數 

  • 我會計算 for...next 迴圈的執行次數
【( 終值-初值) / 增量】+ 1

  • 印出 5 10 15 ... 50
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '印出 5 10 15 ... 50
        Dim ans As String = ""
        For i = 5 To 50 Step 5
            ans &= i & " "
        Next
        Me.TextBox1.Text = ans
    End Sub


  • 印出 20 16 12 ...-12 -16
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        '印出 20 16 12 ...-12 -16
        Dim ans As String = ""
        For i = 20 To -16 Step -4
            ans &= i & " "
        Next
        Me.TextBox2.Text = ans
    End Sub


  • 我知道 do while....loop 結構
Do while 條件
      程式區塊
Loop 

  • 我知道 do until....loop 結構

Do until 條件
      程式區塊
Loop 

  • 我知道 do ...loop while 結構
Do 
      程式區塊
Loop while 條件

  • 我知道 do...loop until 結構

Do 
      程式區塊
Loop until 條件

  • 如何將 For...Next 改成 Do While...Loop 或 Do...Loop While?

For i = 初值 To 終值 Step 增量  ==>  Dim  i  = 初值
                                                              Do While  i <= 終值
Next                                             ==>        i += 增量
                                                              Loop
實例:
For x = 20 To -16 Step -4   ==>Dim x = 20  
                                                  Do While x <= -16
    ans &= x & " "           ==>         ans &= x & " "
Next                              ==>         x -= 4
                                                  Loop
Msgbox (ans)               ==>      MsgBox(ans)

  • 印出九九乘法表。(三種不同樣式)





2016年11月3日 星期四

10/28 隨堂練習訂正

10/28 隨堂練習訂正

  •  'p27 輸入正整數 n,求(1-1/2)(1-1/3)(1-1/4)...(1-1/n) =
  •     Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
            'p27 輸入正整數 n,求(1-1/2)(1-1/3)(1-1/4)...(1-1/n) =
            Dim ans As Single
            Dim n As Integer
            n = InputBox("n=", "p27 輸入正整數 n,求(1-1/2)(1-1/3)(1-1/4)...(1-1/n) =", 4)
            ans = 1
            For i = 2 To n
                ans *= 1 - 1 / i
            Next
            Me.TextBox17.Text = ans
        End Sub