2018年6月12日 星期二

質數清單_VB

試題說明:
專案名稱:班號-質數+清單
表單大小:460x420 表單標題「班級座號姓名-質數+清單」
標籤1個:位置(40,10),餘皆預設
文字方塊1個:位置(330 ,150 )
清單方塊ListBox1:位置(30 ,150 )、大小(250,196)、多欄
按鈕4Button1~4,「產生質數」、「質數否?」、「第幾個?」、「[A,B]間質數」
位置(330,190)(330,230)(330,270)(330,310)

程式規定:
1、載入時,按鈕2~4皆不啟動,並將標籤的背景設黑色,
   Lime色、字型改為微軟正黑,11

2、按鈕1「產生質數」:由文字方塊讀入N {範圍需1~300}
   產生質數加入 ListBox1,然後在 Label1顯示1~N共幾個質數{假設Cnt }

3、按鈕2「質數否?」:由文字方塊讀入P {範圍需1~N}
   判斷P值是否為質數? 是則顯示第幾個,若非則顯示第0

4、按鈕3「第幾個?」:由輸入窗輸入K {範圍需1~Cnt}
   顯示第K個質數的數值

5、按鈕4[A,B]間質數」:由輸入窗輸入A{範圍需1~N}B{範圍需A~N}

   顯示A~B之間的所有質數

參考程式碼:

**** 共用區間之變數、常數 ****

    Dim N As Integer = 300
    Dim c(N) As Boolean '篩法求質數的篩表

    *****************************


*** 程式一載入時 ***

       Label1.ForeColor = Color.Lime
        Label1.BackColor = Color.Black
        Label1.Font = New Font("微軟正黑", 11)
        Button2.Enabled = False
        Button3.Enabled = False
        Button4.Enabled = False

    ********************



*** 按鈕1「產生質數」 ***

         N = TextBox1.Text '預設為 300
        If (N < 10 Or N > 300) Then
            MsgBox("請輸入10~300")
            Exit Sub
        End If
        ListBox1.Items.Clear()
        c(0) = True : c(1) = True
        Dim j, k As Integer
        For k = 2 To N
            If Not c(k) Then
                ListBox1.Items.Add(k)
                For j = k * k To N Step k
                    c(j) = True
                Next
            End If
        Next
        Label1.Text = "1 ~ " & N & " 的質數個數共 " & ListBox1.Items.Count
        Button2.Enabled = True
        Button3.Enabled = True
        Button4.Enabled = True

    ********************



*** 按鈕2「質數否?」 ***

        '輸入 p 是否為質數?,非則輸出0,是印出第幾個
        Dim p As Integer = TextBox1.Text
        If (p < 1 Or p > N) Then
            MsgBox("請輸入1 ~ " & N)
            Exit Sub
        End If
        Label1.Text = p & "是第 " & ListBox1.Items.IndexOf(p) + 1 & " 個質數"

    ********************



*** 按鈕3「第幾個?」 ***

         Dim K As Integer = InputBox("查第幾個?")
        If (K < 1 Or K > ListBox1.Items.Count) Then
            MsgBox("請輸入1 ~ " & ListBox1.Items.Count)
            Exit Sub
        End If
        Label1.Text = "第 " & K & " 個是 " & ListBox1.Items.Item(K - 1)

    ********************



*** 按鈕4「[A,B]間質數」 ***

        Dim A As Integer = InputBox("輸入A")
        If (A < 1 Or A > N) Then
            MsgBox("請輸入1 ~ " & N)
            Exit Sub
        End If
        Dim B As Integer = InputBox("輸入B")
        If (B < A Or B > N) Then
            MsgBox("請輸入A ~ " & N)
            Exit Sub
        End If

        Dim pr(100) As Integer '查出的質數表
        Dim pcnt As Integer = 0
        Dim s As String = ""
        For k = A To B
            If c(k) = False Then
                pr(pcnt) = k
                pcnt += 1
                s &= k & " "
                If pcnt Mod 10 = 0 Then s &= vbNewLine
            End If
        Next
        Label1.Text = s & vbNewLine & A & " ~ " & B & " 總個數:" & pcnt
    ********************

0 意見:

張貼留言