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)