1 / 45

計算機 概論 Visual BASIC 程式設計

計算機 概論 Visual BASIC 程式設計. 德霖技術學院 廖文淵 E-Mail: andres@dlit.edu.tw. Chapter 8. 迴圈. 8-1 For...Next 陳述式 8-2 Print 方法 8-3 多層迴圈 8-4 程式範例. 8-1-1 For...Next 迴圈陳述式. 8-1 For...Next 陳述式. 當我們在設計程式時,若碰到所要解決的問題程式行有其規則性或相似時,可以設計成迴圈結構。 Visual Basic 提供的迴圈指令是 For…Next 和 Do… Loop( 第10章)兩種結構 。

Télécharger la présentation

計算機 概論 Visual BASIC 程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 計算機概論Visual BASIC 程式設計 德霖技術學院 廖文淵 E-Mail: andres@dlit.edu.tw

  2. Chapter 8 迴圈 8-1 For...Next陳述式8-2 Print方法8-3 多層迴圈8-4 程式範例

  3. 8-1-1 For...Next迴圈陳述式 8-1 For...Next陳述式 • 當我們在設計程式時,若碰到所要解決的問題程式行有其規則性或相似時,可以設計成迴圈結構。 • Visual Basic提供的迴圈指令是For…Next和Do… Loop(第10章)兩種結構 。 • 當程式中某段敘述要重覆執行的次數是可以計數時,可用到計數迴圈For…Next陳述句。 • 利用迴圈的索引指標的定義來控制迴圈中的陳述句要執行幾次,且可使用索引指標的資料來計算 。

  4. 語法 • 語法 : • For counter = start To End [Step Step][statements][Exit For][statements]Next [counter] • For 計數變數 = 起始值 To 終止值 [Step 間隔值]陳述式[Exit For]陳述式Next 計數變數

  5. 語法說明

  6. 運作說明 • 一進入For迴圈,計數變數先等於起始值,「檢查終值條件」是否成立,若成立則開始執行敘述,一直執行到Next敘述時又跳回For處,此時計數變數等於起始值+間隔值,再繼續「檢查終值條件」,以此類推,直到「檢查終值條件」不成立為止。 • 「檢查終值條件」的法則有二 • 1.若間隔值是正數,則counter<=End代表條件成立。 • 2.若間隔值是負數,則counter>=End代表條件成立。 • 跳出迴圈時,可以利用Exit For指令和配合If...Then來控制。

  7. 【程式】CH08-01 密碼檢查程式 • Private Sub Form_Activate() • Rem 輸入三次密碼,若其中一次正確,即離開迴圈 • Rem XPASS1是系統的密碼,XPASS2是輸入的密碼 • XPASS1=”1234” : XFLAG =”False” • For I = 1 To 3 • XPASS2=InputBox(“請輸入密碼”) • If XPASS1=XPASS2 Then • XFLAG = “True” • Exit For • End If • Next I • If XFLAG = “True” Then • MsgBox “密碼正確” • Else • MsgBox “密碼不正確” • End If • End Sub

  8. 8-1-2 For...Next範例 8-1-2 For...Next範例 • 【程式】CH08-02 計算1到10的總和 • Private Sub Form_Activate( ) • Dim xsum As Integer • Form1.Font.Size=20 • xsum=0 • For i=1 To 10 • xsum=xsum+i • Next i • Print “1+2+3+........+10=” ; xsum • End Sub

  9. 程式說明-1 • 1.此段程式碼執行的結果如右圖: • 2.為了讓輸出的資料字體可以大一點,所以設定Form1的字體大小為20,其程式行如下,之後的範例中,若要顯示大一點的字體時,可以加入此行程式:Form1.Font.Size=20 • 3.此段程式說明如何應用For...Next來計算1+2+......+10之總和。首先宣告xsum為整數變數,並令其初值為0。 • 4.程式碼For i=1 To 10表示由i=1執行到i=10,每次計數變數自動加1,共執行10次。由於間隔值為1,故省略Step。

  10. 程式說明-2 • 5.程式碼xsum=xsum+i表示將計數變數i的值累計至總和xsum裡面,故迴圈執行時,會產生下列情形:第1圈xsum=xsum+1=0+1=1(當i=1時,原先xsum=0)第2圈xsum=xsum+2=1+2=3(當i=2時,原先xsum=1)第3圈xsum=xsum+3=3+3=6(當i=3時,原先xsum=3)...第10圈xsum= xsum+10=45+10=55 (當i=10時,原先xsum=45)

  11. For...Next範例2 • 【程式】CH08-03 計算1到100的奇數和 • Private Sub Form_Activate( ) • Dim xsum As Integer • Form1.Font.Size=20 • xsum=0 • For i=1 To 100 Step 2 • xsum=xsum + i • Next i • Print “1+3+5+........+99=” ; xsum • End Sub

  12. 程式說明 • 1.此段程式碼執行的結果如右圖: • 2.迴圈執行時,會產生下列情形:第1圈 xfact=xfact*1=1*1=1第2圈 xfact=xfact*2=1*2=2第3圈 xfact=xfact*3=2*3=6第4圈 xfact=xfact*4=6*4=24第5圈 xfact=xfact*5=24*5=120

  13. 8-2-1 基本輸出Print 8-2 Print方法 • Print是最基本的輸出陳述式 。 • Object.Print陳述式可以在object(物件)中顯示資料,object通常是表單(Form)或Debug。 • 例如之前我們以Debug.Print陳述式可在「立即視窗」中顯示資料。

  14. 語法&語法說明 • 語法: • object.Print [outputlist] • object.Print [輸出串] • 語法說明 : • Debug.Print “程式名稱:Print練習” ‘輸出文字 • Debug.Print ‘印一空白行 • Debug.Print “日期:2002/02/02” ‘輸出文字

  15. outputlist 引數語法說明 • 語法: • {Spc(n) | Tab(n)} expression charpos • {Spc(n) | Tab(n)} 運算式 位置控制符號 • Debug.Print Spc(10);“程式名稱:Print練習” • Debug.Print Tab(10);“日期:2002/02/02” • Debug.Print Tab(10);“指令:Print ”;Spc(2);”Spc ”; • Debug.Print “tab”

  16. Print範例1 • 【程式】CH08-05 輸出文字圖形 • Private Sub Form_Activate() • Form1.Font.Size=20 • For N=1 To 5 • Print string(N*2-1,”$”) • Next N • End Sub • 【說明】 • 1.String函數是產生指定的符號,語法 String(N,Character) • 2.N=1 時,N*2-1=1,輸出 $N=2 時,N*2-1=3,輸出 $$$N=3 時,N*3-1=5,輸出 $$$$$N=4 時,N*4-1=7,輸出 $$$$$$$N=5 時,N*5-1=9,輸出 $$$$$$$$$

  17. Spc函數範例1 • 【程式】CH08-06 用Spc函數輸出文字圖形 • Private Sub Form_Activate() • Form1.Font.Size=20 • For N=1 To 5 • Print Spc(6-N) ; String(N*2-1,”$”) • Next N • End Sub • 【說明】 • 1.String函數是產生指定的符號,語法 String(N,Character) • 2.N=1時,N*2-1=1,空5格再輸出,即 $N=2時,N*2-1=3,空4格再輸出,即 $$$N=3時,N*3-1=5,空3格再輸出,即 $$$$$N=4時,N*4-1=7,空2格再輸出,即 $$$$$$$N=5時,N*5-1=9,空1格再輸出,即 $$$$$$$$$

  18. Tab函數範例1 • 【程式】CH08-07 且用Tab排列N!的值 • Rem 計算N!的值,N!=N*(N-1)*……*3*2*1,且用Tab排列 • Private Sub Form_Activate() • Form1.Font.Size=20 • xfact=1:n=5 ‘注意XFACT的起始值是1 • Print Tab(10);”i”;Tab(20);;”i!” • Print Tab(9);”---”;Tab(19);;”------” • For i=1 To n • xfact=xfact*i • Print Tab(9);i;Tab(20);;xfact • Next i • End Sub

  19. Tab函數範例1 • 【說明】 • 1.此段程式碼執行的結果如右圖: • 2.迴圈執行時,會產生下列情形:第1圈 xfact=xfact*1=1*1=1第2圈 xfact=xfact*2=1*2=2第3圈 xfact=xfact*3=2*3=6第4圈 xfact=xfact*4=6*4=24第5圈 xfact=xfact*5=24*5=120

  20. 8-2-2 Space函數 8-2-2 Space函數 • Space函數可以傳回特定數目的空格,通常和字串合用 。 • 語法 : • Space(n) • 運作說明 : • n是必要引數,n是為我們想要的空格數。一般用來和字串結合使用。

  21. Space函數範例 • 【程式】CH08-08 用Space函數輸出文字圖形 • Private Sub Form_Activate() • Form1.Font.Size=20 • For N=5 To 1 Step -1 • Print Space(6-N)+String(N*2-1,”$”) • Next N • End Sub • 【說明】 • 1.Str函數是產生指定的符號,語法格式String(N,Character) • 2.N=1時,N*2-1=1,合併1格空白,即 $$$$$$$$$N=2時,N*2-1=3,合併2格空白,即 $$$$$$$N=3時,N*3-1=5,合併3格空白,即 $$$$$N=4時,N*4-1=7,合併4格空白,即 $$$N=5時,N*5-1=9,合併5格空白,即 $

  22. 8-3-1 巢狀式For…Next 8-3 多層迴圈 • 當我們要處理的問題可以用二個索引變數來控制迴圈時,可以設計成二層迴圈,它和巢狀式If...Then...Else結構相似 。 • 在巢狀式迴圈中,每層迴圈中的索引變數(或稱計數器),要使用不同的變數名稱,且要符合配對方式 。

  23. 8-3-2 巢狀式For...Next 範例 8-3-2 巢狀式For...Next 範例 • 【程式】CH08-09 顯示九九乘法表 • Private Sub Form_Activate( ) • For I=1 To 9 • For J=1 To 9 • Debug.Print J;”x”;I;”=”;I*J, • Next J • Debug.Print • Next I • End Sub • 【說明】 • 1.此段程式碼執行的結果如下圖:

  24. 巢狀式For...Next範例1 • 2.此段程式主要是運用兩層巢狀式For...Next來列出「九九乘法表」。 • 3.I變數控制從1到9,J變數也控制從1到9,第1行Print敘述印出I*J的結果,且不跳行。 • 4.當J迴圈結束時,執行Print敘述,會跳一行且回到I迴圈,I遞增1,繼續執行J迴圈。 • 5.當I迴圈執行完9次後,程式結束。

  25. 8-4-1 範例1:求某數最接近的倍數值 8-4 程式範例 • 「邏輯運算式」是用來處理二項資料之間的邏輯關係,其結果非真(True)即假(False)。 • Visual Basic所提供的邏輯運算子有以下六種:NOT、AND、OR、XOR、EQV、IMP。 • 右表是VB邏輯運算子的運算方式與優先順序。

  26. 題目和分析-1 • 【題目1】CH08-10 • 輸入數字X,求出比X大且最接近Y的倍數的數值。 • 例:X=3,Y=5,則比3大,最接近5的倍數值的數值是5。 • 例:X=9,Y=5,則比9大,最接近5的倍數值的數值是10。 • 【分析】 • 1.這個問題從字面上的文字不易看出解題的方法,不能夠一下子即開始編寫程式,但若經過仔細地分析其數值的關係時,這個題目並不難,還是可以用幾行程式行或一個運算式求得結果,這就是演算法和分析問題的重要性。

  27. 題目和分析-2 • 2.先觀察下列數值的推演:若X=3、Y=5,則答案是5,因為5=5*1若X=9、Y=5,則答案是10,因為10=5*2若X=13、Y=5,則答案是15,因為15=5*3 • 3.上式中最右邊的1、2、3是否和原來的3、9、13有規則嗎? 有的,若將3、9、13除以5取其整數再加1,即是1、2、3了。所以運算式應該是=5 * ( Int(X/5) + 1 )。例如:X=3、Y=5,則答案 = 5 * ( Int(3/5) + 1 ) = 5 * ( Int(0.6) + 1 ) = 5 * ( 0 + 1 ) = 5例如:X=9,Y=5,則答案 = 5 * ( Int( 9 / 5 ) + 1 ) = 5 * ( Int(1.8) + 1 )= 5 * (1+1) = 10例如:X=13,Y=5,則答案 = 5 * (Int( 13 / 5 ) + 1 ) = 5 * (Int(2.6)+1) = 5 * (2+1) = 15

  28. 設計和程式 • 【設計】 • 1.由InputBox輸入X值,令Y=5,答案為Z。 • 2.由上述分析知道運算公式 Z=5 * ( Int(X / 5) + 1 ) • 【程式】 • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 X=InputBox(“輸入數字”) • 4 Y=5 • 5 Z=Y*(Int(X/5)+1) • 6 Print “比”;X;”值大的5的倍數值=”;Z • 7 End Sub

  29. 【題目2】CH08-11 • 若要求得任何數值的倍數值,可將Y由鍵盤輸入,程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 X=InputBox(“輸入數字”) • 4 Y=InputBox(“輸入倍數數值”) • 5 Z= Y*(Int(X/Y)+1) • 6 Print “比”;X;”值大的”;Y;”倍數值=”;Z • 7 End Sub

  30. 8-4-2 範例2:計算數列加總 8-4-2 範例2:計算數列加總 • 【題目1】CH08-12 • 計算1到100的總和。 • 【分析】 • 計算數值數列的加總是用到累計技巧,只要設定一個要累計的變數,例如xsum,然後利用迴圈控制累計變數,每次加上正確的值。 • 【流程】 • 1.設定加總變數為xsum。 • 2.設計一個從1執行到100的迴圈,迴圈變數設定為i。 • 3.迴圈中做累加計算,程式為xsum = xsum + i

  31. 程式和說明 • 【程式】 • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 For i=1 To 100 • 5 xsum=xsum+i • 6 Next i • 7 Print ”1加到100總和=”;xsum • 8 End Sub • 【說明】 • 這是一個最簡單的加總計算模式,程式如下:xsum = xsum + i

  32. 【題目2】CH08-13 • 若將100設定為變數n,則上述程式可以計算1到n的總和,程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 : n=100 • 4 For i=1 To n • 5 xsum=xsum+i • 6 Next i • 7 Print “1加到100總和=”;xsum • 8 End Sub

  33. 【題目3】CH08-14 • 若起始值1也設定成變數xstart,終止值設定為xend,且xstart和xend由鍵盤輸入,則可以設計出計算xstart到xend的總和,例如輸入xstart=2,xend=7,則程式xsum=2+3+4+5+6+7=27,程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 xstart=InputBox(“輸入起始值”) • 5 xend=InputBox(“輸入終止值”) • 6 For i=xstart To xend • 7 xsum=xsum+i • 8 Next i • 9 Print “總和=”;xsum • 10 End Sub

  34. 8-4-3 範例3:求數列的偶數和 8-4-3 範例3:求數列的偶數和 • 【題目1】CH08-15 • 計算1到100的偶數和。 • 【分析】 • 計算數值數列的偶數加總會用到累計技巧,只要設定一個要累計的變數xsum,再控制迴圈的變數值的變化,且每次迴圈執行時,都將變數值加到累計變數中。 • 【流程】 • 1.設定加總變數為xsum。 • 2.設計一個可執行2到100的迴圈,且每次間隔值2,即迴圈變數出現奇數2,4,6,8,10……100。 • 3.迴圈中做累加計算,程式為xsum = xsum + i

  35. 程式和說明 • 【程式】 • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 For i=2 To 100 Step 2 • 5 xsum=xsum+i • 6 Next i • 7 Print “總和=”;xsum • 8 End Sub • 【說明】 • 此程式和範例2相似,只是此程式多了上間隔值2,控制迴圈指標變數只出現2,4,6,8,10.....。

  36. 【題目2】CH08-16 • 若要計算1到100的奇數和,則只要將起始值改為1,其餘程式皆不變。程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 For i=1 To 100 Step 2 • 5 xsum=xsum+i • 6 Next i • 7 Print “xsum=”;xsum • 8 End Sub

  37. 【題目3】CH08-17 • 若要計算某個倍數數列的和,例如1到1000中5,10,15,20...等5的倍數數值之和時,只要改變間隔值為5,且起始值是第一個5的倍數即可。程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 For I=5 To 1000 Step 5 • 5 xsum=xsum+i • 6 Next i • 7 Print “總和=”;xsum • 8 End Sub

  38. 【題目4】CH08-18 • 若要設計一個可以計算任何數字範圍,及任何數值倍數的程式時,可由InputBox輸入起始值、終止值和倍數數字。此程式較困難的一點是要由輸入的值,找出正確的起始值,才能套用上述程式模式,這個程式可參考範例CH08-10(找出比某數值大,且為另一數值的倍數)。程式如下: • 1 Private Sub Form_Activate() • 2 Form1.Font.Size=20 • 3 xsum=0 • 4 xstart=InputBox(“輸入起始值”) • 5 xend=InputBox(“輸入終止值”) • 6 xmul=InputBox(“輸入倍數值”) • 7 xstart=xmul*(Int(xstart/xmul)+1) • 8 For i=xstart To xend Step xmul • 9 xsum=xsum+i • 10 Next i • 11 Print “總和=”;xsum • 12 End Sub

  39. 8-4-4 範例4:用雙層迴圈輸出文字圖形 8-4-4 範例4:用雙層迴圈輸出文字圖形 • 【題目1】CH08-19 • 試設計一程式,可以印出下列圖形。 @ @@ @@@ @@@@ @@@@@ • 【程式】 • Private Sub Form_Activate( ) • Form1.Font.Size=20 • For I = 1 To 5 • For J = 1 To I • Print “@”; • Next J • Print • Next I • End Sub

  40. 【題目2】CH08-20 • 【題目】 • 試設計一程式,可以印出下列圖形。 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ • 【程式】 • Private Sub Form_Activate( ) • Form1.Font.Size=20 • For I = 5 To 1 Step -1 • Print Spc(I); • Next J • Print • Next I • End Sub

  41. 【題目2】CH08-20(續) • 【說明】 • 1.同樣地若欲顯示N行,可以將外圈的For I=5 To 1 Step -1 中的5改為N,而內圈的For J = 1 To 6-I 中的6更改為N-1即可。 • 2.若將Print Spc(I) 改成Print Spc(I+P),則整個圖樣會右移P個位置。

  42. 8-4-5 範例5:計算樂透彩的頭彩機率 8-4-5 範例5:計算樂透彩的頭彩機率 • 【題目】CH08-21 • 先算出42個號碼選6個的所有組合數(令其為X),中頭彩是6個號碼全中,即在所有的組合數中只有1個是頭彩,所以中頭彩機率是1/X。 • 42個號碼選6個的所有組合數=42!/(6!*36!)=(42*41*40*39*38*37)/(1*2*3*4*5*6) • 【程式】 • Rem 計算樂透彩的所有組合數 • Rem 組合數=(42*41*40*39*38*37)/(1*2*3*4*5*6) • Rem 令 XFACT=(42*41*40*39*38*37) • Rem 令 YFACT=(1*2*3*4*5*6) • Rem 令XNO=XFACT/YFACT,輸出XNO,機率即是1/XNO • Private Sub Form_Activate( ) • Dim XFACT,YFACT,XNO AS Single

  43. 程式(續) • Form1.Font.Size=16 • XFACT=1 : YFACT=1 : XNO=0 • For I=42 To 37 Step –1 • XFACT=XFACT*I • Next I • For I=1 To 6 • YFACT=YFACT*I • Next I • XNO=XFACT/YFACT • Print “樂透彩的所有組合數=”;XNO • Print “樂透彩的頭彩機率=”;1/XNO • End Sub

  44. 說明 • 【說明】 • 1.程式執行結果如下圖: • 2.計算(42*41*40*39*38*37)的值可以用遞減迴圈來處理,控制索引變數從42到37,間隔值是-1。For I=42 To 37 Step –1 XFACT=XFACT*INext I

  45. Chapter 8 學習評量 本章結束! 要記得做學習評量哦!

More Related