VB 程式語言 本節重點: 演算法 陣列 副程式 排序與搜尋.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第4章 VB.NET程式與 網頁製作的應用 主講人: 姚奉緒 M
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Java簡介.
物件導向程式設計 CH1, CH2.
程式語言(I)- Visual Basic 6.0 陣列&副程式.
4-4 程式設計之邏輯結構.
簡易C++除錯技巧 長庚大學機械系
第二章 Visual Basic语言基础.
Chapter 1 Introduction.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第7章 陣列 7-1 認識陣列 7-2 陣列的應用.
新觀念的 VB6 教本 第八章 陣列(Array).
第5章 数组 Visual Basic程序设计.
Visual Basic程序设计 第七章 数组
1、数组的概念 2、静态数组 3、动态数组 4、数组的基本操作 5、控件数组
第八章 利用SELECT查詢資料.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
安裝JDK 安裝Eclipse Eclipse 中文化
Visual Basic 物件導向程式設計簡介.
第6章 程式語言簡介及實例應用.
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
Java 程式設計 講師:FrankLin.
私立南山高中 信息組 電腦研習 電腦資料的備份 中華民國 99年4月20日 星期二.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
第一單元 建立java 程式.
VS.NET 2003 IDE.
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
第 19 章 XML記憶體執行模式.
小结 郭清溥.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
程序基础 2019/4/25.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
程式邏輯結構 Chapter 6 認知 認識何謂流程圖及流程圖各種符號的意義。
VS.NET 2003 IDE.
C qsort.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
第5章 数组 5.1 数组概述 5.2 静态数组和动态数组 5.3 数组的基本操作 5.4 控件数组 5.5 数组在自定义数据类型中的应用.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
資料表示方法 資料儲存單位.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
期末報告第一題 通訊四甲 B 湯智瑋.
開發Java程式語言的工具 JDK.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Array(陣列) Anny
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

VB 程式語言 本節重點: 演算法 陣列 副程式 排序與搜尋

演算法簡介 演算法(algorithm): 一組用來解決特定問題的有限指令或步驟。 演算法的特性: 演算法特性 條件 輸入(input) 輸出(output) 有限性(finiteness) 明確性(definiteness)有效性(effectiveness) 說明 演算法中經常需要輸入資料,但並非絕對必要 演算法至少要有一個以上的輸出資料 演算法應該在有限的處理步驟後得到結果 演算法的每個步驟都必須嚴謹,而不能有模稜兩可的情況 演算法中的每個步驟都必須是可執行的

演算法的實例 計算聯考成績總分的演算過程: 讀入原始資料 1. 讀入一筆學生的考試成績資料 2. 加總各科考試成績 准考證號碼 國文 英文 數學 專業科目(一) 專業科目(二) 總分 計算聯考成績總分的演算過程: 1101001 75 74 68 80 73 1101002 62 72 77 82 76 1101003 78 89 74 88 90 … … … … … … 讀入原始資料 1. 讀入一筆學生的考試成績資料 2. 加總各科考試成績 3. 輸出各科考試成績(含加總成績) 4. 重覆步驟1~3,直到所有考生的成績資料都處 理完畢 輸出原始資料並填入總分 准考證號碼 國文 英文 數學 專業科目(一) 專業科目(二) 總分 1101001 75 74 68 80 73 370 1101002 62 72 77 82 76 369 1101003 78 89 74 88 90 419 … … … … … … …

演算法的表示(1/3) 流程圖符號與說明: 常用的流程圖符號與說明 代表意義 符號 作用 開始或結束 螢幕 輸入或輸出 處理符號 決策或判斷 流向符號 連接符號 副程式符號 列印符號 磁碟符號 表示流程圖的 表示將資料輸 出於螢幕上 表示資料的輸 入或輸出 表示執行某些 工作 表示以符號內 的條件式作判 斷,決定執行 的流向 表示程式的執 行方向和順序 出口或入口 表示執行副程 式 表示資料由印 表機輸出 表示由磁碟輸 或輸出資料

演算法的表示(2/3) 流程圖表示法:透過簡明的圖示符號來表達解決問題步驟的示意圖。 1. 到商場購物 敘述表示法:利用語言敘述的方式來表達演算法的處理步驟 1. 到商場購物 判斷是否使用信用卡付費?如果是,就在簽帳單上簽名;否則就付現金 3. 拿發票離開 開始 是否 刷卡消費 在簽帳單上簽名 付現 購物 拿發票 結束 T F

演算法與程式設計的關係 撰寫程式碼 設計演算法 或 虛擬碼 流程圖

程式語言簡介 本節重點: 程式語言的類別 程式的翻譯

程式語言的類別(1/8) 程式語言的分類:以接近人類語言的程度分為低階語言與高階語言。 程式語言 應用軟體語言,如VBA、JavaScript 、ActionScript…等 低階語言 高階語言 機器語言 組合語言 程序性語言,如FORTRAN、COBOL、Pascal…等 物件導向語言,如Visual Basic.NET 、C++、Java等 程式語言

程式語言的類別(2/8) 低階語言: 機器語言: 唯一不需經由翻譯,電腦就能直接執行的語言。 以0與1兩種符號組合而成。 此為某種機器語言的程式範例 低階語言: 機器語言: 唯一不需經由翻譯,電腦就能直接執行的語言。 以0與1兩種符號組合而成。

程式語言的類別(3/8) 低階語言: 組合語言: 以一種稍接近人類語言的字組,來代替以0與1表示的機器語言符號。 須經過組譯器翻譯成機器語言之後,電腦才能執行。 126E:0000 LDA 1000 126E:0001 SUB 1001 126E:0010 ADD 1010 126E:0011 PSC 0000 126E:0100 STA 1111 126E:0101 HTL 0000 126E:0110 ES; 126E:0111 ES; 126E:1000 DW 0100 126E:1001 DW 0010 126E:1010 DW 0110

程式語言的類別(4/8) 高階語言: 比較接近人類語言的程式語言。 須經過編譯器或直譯器等軟體翻譯成機器語言指令後,電腦才能執行。 機器語言程式指令N 翻譯 機器語言程式指令1 一個高階語言程式敘述

程式語言的類別(5/8) 低階語言與高階語言的比較: 高階語言與低階語言的比較 高階語言 較容易 較大 較高 項目 程式的撰寫 可攜性 佔用記憶體的空間 可讀性 學習難易度 除錯 維護 低階語言 較困難 較小 較低

程式語言的類別(6/8) 高階語言: 程序性語言: 依照程式敘述的先後順序及流程來執行的語言。 必須利用程式敘述來告知電腦要完成什麼工作及完成這些工作的流程。 常見的程序性語言簡介 適用的領域 適合科學及工程方面的計算 適合程式設計教學 適合用來開發系統軟體及一般應用程式 程式語言 FORTRAN BASIC Pascal C

程式語言的類別(7/8) 高階語言: 物件導向語言: 以設計個別物件功能的方式來開發程式的語言。 具有封裝、繼承、多型等三種特性。 常見的物件導向語言簡介 適用的領域 適合用來開發視窗應用程式 適合用來開發各種系統軟體及應用軟體 適合用來開發網際網路的應用程式 程式語言 Visual Basic.NET C++ Java

十五、物件導向語言的特性 物件導向語言的三種特性 可以簡化程式的開發流程、降低程式的複雜度,及避免重覆撰寫相同的程式碼 封裝(encapsulation) 繼承(inheritance) 多型(polymorphism) 可以簡化程式的開發流程、降低程式的複雜度,及避免重覆撰寫相同的程式碼

讀取下一行程式敘述,直到每一行程式都翻譯、執行完為止 程式的翻譯(1/3) 高階語言的翻譯方式有直譯與編譯兩種。 直譯:將高階語言所撰寫的原始程式碼逐行翻譯成機器語言指令,並立即執行。 原始程式 直譯 機器語言指令 執行 每次一行程式敘述 讀取下一行程式敘述,直到每一行程式都翻譯、執行完為止

程式的翻譯(2/3) 高階語言的翻譯方式有直譯與編譯兩種。 編譯:將高階語言所撰寫的整個程式翻譯成機器語言指令,但不會立即執行。 編譯後的機器語言程式,還須使用連結程式來連結與該程式相關的檔案。 原始程式 編譯 機器語言程式 (目的碼) 連結 可執行的目的碼 程式庫 (函數、副程式)

程式的翻譯(3/3) 高階語言的翻譯方式有直譯與編譯兩種。 經編譯、連結後的程式,當要執行時,尚需透過作業系統的載入程式,將可執行的目的碼載入到主記憶體內執行。 可執行的目的碼 載入 可執行的程式 (在主記憶體中) 執行

陣列的宣告 Dim 陣列名稱(N) As 資料型別 或 Dim 陣列名稱+型別宣告符號(N) Dim Y(10) As Integer ’ 宣告一個含有11個元素的陣列而每 ’ 一個陣列元素的資料型別都是整數 Dim Z$(9) ’ $ 是字串的型別宣告符號,所以這個 ’敘述宣告了 10 個字串元素的陣列

使用陣列 在術語上,陣列中的每一項資料叫做一個元素(element),而用來指定某一個元素的 0、1、2、…順序叫做註標(subscript),如下: X(0) X(1) X(2) X(3) X(4) 陣列 X 陣列元素 X(0)~X(4) 陣列註標 0~4 名稱 資料順序 資料內容 1 2 3 4

陣列的優點 -- 實例練習 輸入5份數值資料,輸入完畢之後,將最大值及最小值顯示出來。 Dim X(4) For I = 0 To 4 X(I) = Val(InputBox("請輸入第 " & I & " 份資料")) Next Min = X(0) ' 先假設第0份資料為最小值 Max = X(0) ' 先假設第0份資料為最大值 For I = 1 To 4 ' 然後從第1份資料開始比較 If X(I) < Min Then Min = X(I) If X(I) > Max Then Max = X(I) Next Print "最大值 = ";Max, "最小值 = ";Min

註標範圍的設定 以「Dim 陣列名稱(N)」敘述所宣告的陣列, 其註標範圍是0~N,其中起始註標是固定的 (等於0),而終止註標則由宣告時的N值決定。 另外還有一種宣告格式則可設定非0的起始註 標,其格式如下: 註 :N 必須 ≧ M Dim 陣列名稱 ( M To N) 設定起始註標,若省略則等於 0

註標範圍的設定 例如: Dim X(4)‘ 等於 Dim X(0 To 4) ’ 如果前面有設定option base 1則等於Dim X(1 to 4) Dim A(-4 To 5)' 註標範圍從 -4 到 5, 共 5-(-4)+1=10 項資料

註標範圍的讀取 陣列的註標範圍可以設定,也可以讀取,其方法是呼 叫 Lbound 及 Ubound 函數: 例如: V1 = LBound(陣列名稱) ' 讀取起始註標 V2 = UBound(陣列名稱) ' 讀取終止註標 Dim A(-4 To 5) Print LBound(A) ' 印出 -4 Print UBound(A) ' 印出 5

註標範圍讀取 -- 實際應用 For I = 0 To 4 Print X(I) Next I Lbound 與 Ubound 若應用在程式中,可增加程式的彈性, 舉例來說,前面有一段列印陣列所有資料的程式,如下: 這個程式的缺點是:當我們修改陣列 X 的註標範圍時,必 須跟著修改 For 敘述中的 0 及 4。如果把它改成: 則將來即使註標範圍有所改變,我們也不必修改這段程式。 For I = 0 To 4 Print X(I) Next I For I = LBound(X) To UBound(X) Print X(I) Next I

可改變大小陣列 -- 保留陣列元素的值(1) ReDim Preserve 陣列名稱 (M To N) 表示保留原陣列中的資料 可改變大小陣列 -- 保留陣列元素的值(1) 請注意利用ReDim調整大小的陣列,原陣列中的所有資料都會被清成0或空值,如果想保留原陣列中的資料,則要在ReDim之後加上Preserve保留字,格式是: ReDim Preserve 陣列名稱 (M To N) 表示保留原陣列中的資料

二維陣列 除了一一排列的資料之外,我們也可能會處理表格式的資料,例如: 第0行 第1行 第2行 第3行 第0列 打擊者 長打率 上壘率 打擊率 第1列 Bill 0.5 0.42 0.387 第2列 David 0.453 0.39 0.333 第3列 Norman 0.36 0.34 第4列 Walter 0.392 0.32

二維陣列(2) 以這個表格為例,計有5列、4行,所以共有5×4 項資 料,如果我們想用陣列來儲存這個表格,則可以這樣 宣告: 像這樣含有兩個註標的陣列,稱為二維陣列,而存取 二維陣列的資料也會使用到兩個註標,例如: Dim X(4,3) 註標範圍: 0~3 0~4 列 行 X(1, 2) = 0.42 ' 將第 1 列、第 2 行的資料指定成 0.42 Print X(3, 2) ' 印出第 3 列、第 2 行的資料

二維陣列(3) 如果我們將整個陣列的註標標示出來,則是: 第0行 第1行 第2行 第3行 第0列 (0,0) (0,1) (0,2) (0,3) 第1列 (1,0) (1,1) (1,2) (1,3) 第2列 (2,0) (2,1) (2,2) (2,3) 第3列 (3,0) (3,1) (3,2) (3,3) 第4列 (4,0) (4,1) (4,2) (4,3)

多維陣列(1) 除了一維跟二維陣列之外,我們也可宣告一個任意維數的陣列,如下: Dim 陣列名稱 ( M, N, L, … ) [As 資料型別 ] 維數就看這裡有幾個註標

多維陣列(2) 例如: Dim Z(3, 4, 5, 6, 9) '宣告一個五維陣列,可儲存的資料數共有: ' (3+1)(4+1)(5+1)(6+1)(9+1)=8400

Array:讓「變數」變成「陣列」的函數(1) VB 提供了一個有趣的函數 Array,可以讓變數 變成陣列,例如: 結果顯示出來的內容分別等於 "春"、"夏"、"秋 "、"冬",證明X是一個陣列。 Dim X ‘ X 是一個不定型變數 X = Array("春", "夏", "秋", "冬") Print X(0), X(1), X(2), X(3) ' 檢驗X的值

Array:讓「變數」變成「陣列」的函數(2) Array 最方便的地方在於可以一次指定多個元素,以上 面的程式為例,如果不使用 Array 函數,則程式必須 寫成: 在書寫上確實比較不方便。 Dim Y(3) Y(0) = "春" Y(1) = "夏" Y(2) = "秋" Y(3) = "冬"

陣列的應用-資料排序 認識資料排序 排序是指利用「比較」與「交換」的方法,將資料依特定的順序(例如由小到大)予以排列。 氣泡排序法的原理是逐次比較相鄰的兩個資料,並依照由大到小或由小到大的排序條件交換資料的位置,直到所有資料排序完成。

氣泡排序法:N個資料從大排到小 每回合做N-I個比較 共需N-1個回合 22 17 63 5 14 35 FOR I=1 TO N-1 NEXT I FOR J=1 TO N-I NEXT J 63 17 14 5 5 35 IF N(J)<N(J+1) THEN TEMP=N(J) N(J)=N(J+1) N(J+1)=TEMP ENDIF 17 14 14 35 5 63 22 63 22 17 35 14 5 63 22 22 35 17 14 5 17 14 5 22 35 63

比較次數 N-1 次 比較次數=(N-1)+(N-2)+……..+2+1 N-2 次 =(((N-1)+1)*N)/2 =N2/2 2 次 1 次

陣列的應用-資料搜尋 … 3 1 2 認識資料搜尋 搜尋是指依照特定的條件及方法,在一群資料中尋找符合條件的資料。 例如統一發票對獎就是循序搜尋法的生活實例。 說明:在一疊發票中找出與頭獎號碼(40130146)相同的發票。 … Step 以此類推,直到對中頭獎號碼,或比對完畢確定未中獎時,結束搜尋 3 Step 比對第一張發票號碼是否與頭獎號碼相同 1 Step 比對第二張發票號碼是否與頭獎號碼相同? 2

陣列的應用-資料搜尋 二元搜尋法:適合用來在已排序的資料列中,尋找某一資料。 二元搜尋法的範例(找出 "L"): 1 2 3 Step 找出中央位置的序號4(=(1 + 7) / 2),比較兩字母(G < L),捨棄前半段 1 4 G 1 2 3 5 6 7 序號 A C E H K L 字母 Step 找出中央位置的序號6(=(5 + 7) / 2),比較兩字母(K < L),捨棄前半段 2 K 6 1 2 3 4 5 7 序號 A C E G H L 字母 Step 找出中央位置的序號7(=(7 + 7) / 2),比較兩字母(L = L),找到目標資料,搜尋結束 3 7 L 1 2 3 4 5 6 序號 A C E G H K 字母

陣列的應用-資料搜尋(3/3) 二元搜尋法的程式範例: 搜尋目標 30 L R M N(M) 1 6 3 20 1 2 1 40 已排序的資料(存放於陣列變數N (1) ~ N (6)中) 二元搜尋法的程式範例: 40 30 20 15 10 5 搜尋目標 30 : 210 Target = 30 220 L = 1: R = 6: Result = "找不到": T = 0 230 While L <= R And Result = "找不到" 240 M = (L + R) \ 2 250 T = T + 1 '計算搜尋的次數 260 If N(m) = Target Then 270 Result = "找到了" 280 Else 290 If N(m) > Target Then 300 L = M + 1 310 Else 320 R = M - 1 330 End If 340 End If 350 Wend L R M N(M) 1 6 3 20 使用二元搜尋法找尋目標資料的程式碼 1 2 1 40 2 2 2 30 顯示搜尋結果 第3次搜尋比對時找到目標資料30

88 77 73 ………… 12 8 3 N個資料 第1次找到的資料 最多1次找到的資料 1個 第2次找到的資料 最多2次找到的資料 3個 第3次找到的資料 最多3次找到的資料 7個 第4次找到的資料 最多4次找到的資料 15個 第5次找到的資料 最多5次找到的資料 16個 31個 32個 最多6次找到的資料 第6次找到的資料 63個 …… 2^(T-1)個 …… 第T次找到的資料 最多T次找到的資料 (2^T)-1個 如果有N個資料最多要找幾次? LOG2(N+1)

結構化程式設計的概念 結構化程式設計:一種可使程式的設計與維護較易於進行的程式設計技術。 未使用結構化程式設計的程式 副程式b : End b a goto b c goto d b goto e d goto a e goto c 主程式 呼叫副程式a 呼叫副程式b 副程式a End a 未使用結構化程式設計的程式 使用結構化程式設計的程式

結構化程式設計的概念 由上到下的程式設計:先由整個程式的主要功能開始設計,再依序往下設計各個子功能。 ~ 統一入學測驗成績處理系統 計分處理 成績統計 榜單服務 卡片讀取 分數計算 … 分數排序 級距統計 榜單列印 榜單查詢 ~ 檢查 記錄 比較 交換 顯示

結構化程式設計的實作 副程式: 一段獨立的程式區塊,由Sub與End Sub之間的程式敘述所組成。 使用呼叫(call)的方式來執行副程式。 . Call 副程式A Sub 副程式A End Sub 呼叫 返回 執行 主程式 副程式

結構化程式設計的實作 副程式: 語法說明: 呼叫副程式的語法: 副程式的語法: Call 副程式名稱(參數1, 參數2,…) Sub 副程式名稱(參數1 As 資料型別, 參數2 As 資料型別,…) 程式敘述區塊 End Sub

結構化程式設計的實作 副程式: 副程式的範例: 呼叫 Sub SUM_N(M As Integer) Dim I As Integer Dim Sum As Integer Sum = 0 For i = 1 To M Sum = Sum + i Next i Print "1 + 2 +… + " & M_ & "=" & Sum End Sub . N = InputBox("請輸入N_ 值:") Call SUM_N(N) 返回 主程式 副程式

結構化程式設計的實作 自定函數:由Function與End Function之間的程式敘述所組成。 . V = 自定函數A( ) Function 自定函數A( ) As Integer 自定函數A( ) = 100 End Function 將值100傳回給變數V 呼叫 返回 執行 主程式 自定函數

結構化程式設計的實作(7/10) 自定函數: 語法說明: 呼叫自定函數的語法: 自定函數的語法: 變數名稱 = 自定函數名稱名稱(參數1, 參數2,…) 自定函數的語法: Function 自定函數名稱(參數1 As 資料型別, 參數2 As 資料型別,…) As 資料型別 程式敘述區塊 自定函數名稱 = 傳回值 End Function

結構化程式設計的實作 自定函數: 自定函數的範例: 主程式 自定函數 . Functon r_area(r) As Double       . area = r_area(10) Print "圓面積為" & area Functon r_area(r) As Double Const pi As Double = 3.14159 r_area = pi * r ^ 2 End Function 呼叫 返回 主程式 自定函數