精華區beta WesleyS3F-36 關於我們 聯絡資訊
常用關於陣列使用的問題: (以副程式方式描述) (1) 輸入一個陣列 Open "d:\a.txt" For Input As #1 ReDim a(10) n = 0 Do While Not EOF(1) Input #1, i Print i n = n + 1 If (n > UBound(a)) Then ReDim Preserve a(UBound(a) + 10) End If a(n) = i Loop Close #1 Print "+++++++++" For i = 1 To n Print a(i) Next i (2) 輸出一個陣列 Dim small, small_i, temp As Integer For i = 1 To n small = a(i) small_i = i For j = i + 1 To n If a(j) < small Then small = a(j) small_i = j End If Next j a(small_i) = a(i) a(i) = small Next i Print "+++++++++" For i = 1 To n Print a(i) Next i (3) 反向輸出一個陣列 Open "d:\c.txt" For Output As #3 For i = n To 1 Step -1 Print #3, a(i) Next i Close #3 (4) 輸出陣列中大於 x 的所有資料值 x = Text1.Text For i = 1 To n If a(i) > x Then Print "a("; i; ")= "; a(i) End If Next i (5) 輸出陣列中是否有值為 x 的資料(直線搜尋) x = Text1.Text For i = 1 To n If a(i) = x Then Print "I found "; x Exit Sub End If Next i Print "I found nothing." (6) 輸出陣列中資料值的總和 Dim sum As Integer sum = 0 For i = 1 To n sum = sum + a(i) Next i Print "sum = "; sum (7) 輸出陣列中資料的最大值 Dim max_v As Integer max_v = a(1) For i = 2 To n If (max_v < a(i)) Then max_v = a(i) Next i Print "nax_v = "; max_v (8) 將陣列中的第 k 個位置的資料刪除, 原來在第 k 個位置後的資料均往前前進一個位 置,原先在第 k 個位置的資料將傳回給呼叫程式。 k = Text2.Text For i = k To n - 1 a(i) = a(i + 1) Next i n = n - 1 Print "+++++++++" For i = 1 To n Print a(i) Next i (9) 輸出陣列的第 k 大值(注意陣列中的資料順序不可改變) Dim counter As Integer k = Text2.Text For i = 1 To n counter = 0 For j = 1 To n If a(i) < a(j) Then counter = counter + 1 End If Next j If counter + 1 = k Then Print "第"; k; "大值="; a(i) End If Next i For i = 0 To k - 1 : Print a(i) : Next : Print "第" ; k ; "大值是" ; a(k - 1) (10) 假設陣列中的資料已經排序好了,輸出陣列中是否有值為 x 的資料(二元搜尋) Dim l, h, m As Integer x = Text1.Text l = 1 h = n Do While l <= h m = (l + h) / 2 If a(m) = x Then Print "a("; m; ")= "; a(m) Exit Sub ElseIf a(m) > x Then h = m - 1 Else l = m + 1 End If Loop (12) 撲克牌計算兩對、三條、Full house、同花等問題。(假設給定 Number, Flower) For i = 0 To 4 number(i) = card(i) Mod 13 '牌號 flower(i) = card(i) \ 13 '花色 Next '判別同花 For j = 0 To 3 If flower(j) <> flower(j + 1) Then Exit For Next If j > 11 Then lbloutput.Caption = "你有一副" & "同花" '判別其他牌 For i = 0 To 12 time(i) = 0 Next For i = 0 To 4 k = number(i) time(k) = time(k) + 1 Next For i = 0 To 4 total_time(i) = 0 Next For i = 0 To 12 k = time(i) total_time(k) = total_time(k) + 1 Next If total_time(4) = 1 Then lbloutput.Caption = "你有一副" & "鐵隻" ElseIf total_time(3) = 1 Then lbloutput.Caption = "你有一副" & "三條" ElseIf total_time(3) = 1 And total_time(2) = 1 Then lbloutput.Caption = "你有一副" & "Full House" ElseIf total_time(2) = 2 Then lbloutput.Caption = "你有一副" & "Two Pairs" ElseIf total_time(2) = 1 Then lbloutput.Caption = "你有一副" & "One Pair" Else lbloutput.Caption = "你什麼也沒有" End If (13) 利用兩階層的迴圈畫出下列三角形 * ** *** **** ***** Dim i, j As Integer For i = 1 To 4 For j = 1 To 4 - i Print " "; Next j For j = 1 To i Print "*"; Next j Print Next i (14) 計算1*2*3*….*n Dim i, n As Integer Dim prod As Single n = Text1.Text prod = 1 For i = 1 To n prod = prod * i Next i Print prod (15) 計算1+2!+3!+....+n! , 計算 Dim i, n As Integer Dim prod, s As Single n = Text1.Text s = 0 prod = 1 For i = 1 To n prod = prod * i s = s + prod Next i Print s -- 聽天使在唱歌 我們都要快樂 你手心傳來的愛我已接收到了 聽天使在唱歌 世界換新顏色 感動會放射 暖暖的熱 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.87.192
lakers:嗯...謝謝...看起來真難啊...= = 推 218.167.15.230 11/22