2018年6月16日 星期六
2018年6月15日 星期五
2018年6月12日 星期二
質數清單_VB
試題說明:
專案名稱:班號-質數+清單
表單大小:460x420、 表單標題「班級座號姓名-質數+清單」
標籤1個:位置(40,10),餘皆預設
文字方塊1個:位置(330 ,150 )
清單方塊ListBox1:位置(30 ,150 )、大小(250,196)、多欄
按鈕4個Button1~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
********************
幻方19_VB
試題說明:
專案名稱:班號-幻方19x19
表單大小:520x500、 表單標題「班級座號姓名-幻方19x19」
下拉式清單一個ComboBox1,位置(25 ,15 )顯非「請選擇」項目預設值 3,4,5,7,8,9
按鈕2個Button1,Button2,「產生格式」、「產生數字」位置(100,10)、(200,10)
程式規定:
1、載入時,將清單項目增加11,13,15,17,19及12,16
並新建標籤控制項陣列 19x19先隱藏, 兩個按鈕皆不啟動
2、選了下拉式清單的某一個 n 值時,改變表單大小
n>9則 寬、高皆 50*n ,否則 大小(520,500)
按鈕1啟動、按鈕2不啟動
3、按鈕1「產生格子」:左上角(40,40)起產生nxn個標籤,每個大小(35,35)
間距2,有外框,字型為("Arial", 9)、顯示值0
然後將按鈕1設為不啟動,將按鈕2設為啟動
4、按鈕2「產生數字」:產生幻方nxn的數字 ,規則如下
(1)以最上列中間格為1,左上為下1個數字
(2)上空則移至最下列
(3)左空則移至最右行
(4)已填則彈回往下1格 (5)兩空則同彈回
完成之幻方其橫、直、斜之和皆相同
參考程式碼
**** 共用區間之變數、常數 ****
Dim n As Integer 'nxn
Dim Maxr = 19, Maxc = 19 '列及行
Const stX = 40
Const stY = 40
Const GW = 35 '每小格寬
Const GH = 35 '每小格高
Const GP = 2 '每小格間距
Dim Lb(Maxr, Maxc) As Label '宣告為 公用陣列 Lb
Dim mtx(Maxr + 2, Maxc + 2) As Integer
*****************************
*** 程式一載入時 ***
For r = 0 To Maxr - 1
For c = 0 To Maxc - 1
Lb(r, c) = New Label '新增 控制項陣列
Lb(r, c).Visible = False ' 隱藏不顯現
Next
Next
For i = 11 To Maxr
If i Mod 4 <> 2 Then ComboBox1.Items.Add(i)
Next
Button1.Enabled = False '產生格子不啟動
Button2.Enabled = False '產生數字不啟動
********************
*** 選了清單某一項目時 ***
n = ComboBox1.Text
If n > 9 Then
Me.Height = n * 50
Me.Width = n * 50
Else
Me.Width = 520
Me.Height = 500
End If
Button2.Enabled = False '產生數字不啟動
Button1.Enabled = True '產生格子 啟動
********************
*** 按鈕1「產生格子」 ***
If n = 0 Then
MsgBox("請下拉選一個數字")
Exit Sub
End If
Dim r, c As Short
'隱
For r = 0 To Maxr - 1
For c = 0 To Maxc - 1
Lb(r, c).Visible = False
Next
Next
For r = 0 To n - 1 '列號
For c = 0 To n - 1 '行號
'仍須以 new 新增物件
Lb(r, c).AutoSize = False '自動大小取消
Lb(r, c).Top = stY + r * (GH + GP) '設定上邊距
Lb(r, c).Left = stX + c * (GW + GP) '設定左邊距
Lb(r, c).Width = GW '寬
Lb(r, c).Height = GH '高
Lb(r, c).Font = New Font("Arial", 9)
mtx(r, c) = 0
Lb(r, c).Text = mtx(r, c) '在 form_load 產生 mtx(r,c)
Lb(r, c).Visible = True
Lb(r, c).BorderStyle = BorderStyle.FixedSingle '加外框
Lb(r, c).Name = "LB" & (r & "_" & c)
Me.Controls.Add(Lb(r, c)) '加入控制項
' AddHandler Lb(r, c).Click, AddressOf LB_x '動態 新增事件
Next c
Next r
Button1.Enabled = False
Button2.Enabled = True
********************
*** 按鈕2「產生數字」 ***
If n Mod 2 = 1 Then
magic1() '奇階
ElseIf n Mod 4 = 0 Then
magic4() ' 4k 階
Else
' MsgBox(" 4K+2 階, 施工中! ")
'magic6()
End If
********************
*** 副程式magic1 為奇數階 ***
Dim p = 1
Dim n2 = n * n
Dim r As Integer = 0, c As Integer = n \ 2
Dim nr, nc As Integer
Do Until p > n2
mtx(r, c) = p
Lb(r, c).Text = mtx(r, c)
nr = r - 1 : nc = c - 1
If nr < 0 And nc < 0 Then
nr = r + 1 : nc = c
ElseIf nr < 0 Then
nr = n - 1
ElseIf nc < 0 Then
nc = n - 1
ElseIf mtx(nr, nc) > 0 Then
nr = r + 1 : nc = c
End If
r = nr : c = nc '下一座標
p += 1 '下一標號
Loop
********************
*** 副程式magic4 為 4k 階 ***
Dim p = 1
Dim n2 = n * n
Dim r, c, r1, c1 As Integer
For r = 0 To n - 1
r1 = r Mod 4
For c = 0 To n - 1
c1 = c Mod 4
If r1 = c1 Or r1 + c1 = 3 Then
mtx(r, c) = n2 + 1 - p
Else
mtx(r, c) = p
End If
p += 1
Lb(r, c).Text = mtx(r, c)
Next
Next
********************


















































