Computer I Chapter 04. 제어문과배열 Spring, 2015 박정근교수
04-01. 01. 조건문에따라처리하기
조건문 조건문 조건에따라두가지이상서로다르게처리하는구문 조건문의종류 IF 문 IF~Then 형식 IF~Then~Else 형식 Select Case 문 3
IF 문 (If~Then 형식 ) If~Then 형식 If 조건식 Then 조건식을만족할때의실행문 End If 조건식 : 비교연산자와논리연산자를사용한식 (Boolean) 4
IF 문 (If~Then 형식 ) 예제 e.keychar: 현재입력받은문자 Chr(Keys.Escape): ESC 문자 Chr(Keys.Enter): Enter 문자 Enter 5
중첩 IF 문 중첩 If 문 If 조건식1 Then If 조건식2 Then 조건식 1 과조건식 2 를만족할때의실행문 End If End If If 조건식 1 And 조건식 2 Then 조건식을만족할때의실행문 End If 6
IF 문 (If~Then~Else 형식 ) If~Then~Else 형식 If 조건식 Then 조건식을만족할때의실행문 Else 조건식을만족하지않을때의실행문 End If ElseIf 문 If 조건식1 Then 실행문1 ElseIf 조건식2 Then 실행문2... ElseIf 조건식n Then 실행문n Else 조건식1~ 조건식n을모두만족하지않을때의실행문 End If 7
IF 문 (If~Then~Else 형식 ) 예제 TextMath TextEng TextComp 8
Select Case문 Select Case 문 조건검사결과가다양하게나올경우사용 중첩 If 문으로도가능하나복잡함 Select Case 검사식 Case 값1 실행문 1 Case 값2 실행문2... Case Else 실행문 End Select Case 문 예 Case 값1 [, 값2, 값3,...] Case 화공, 기계 Case Is 비교연산자값 Case Is >= 999 Case 최소값 To 최대값 Case 0 To 100 Case Else 9
Select Case문 예제 TextGrade TextSalary TextBonus 10
예제 목적 Select Case 문을이용해여러가지상황을처리하는방법과문자와날짜관련함수를사용하는방법에대해알아봄 실행내용 주민등록번호을입력하면, 생년월일과탄생요일, 성별을표시 잘못된주민등록번호를입력하면오류메시지창표시 TextNum TextBirth TextDay TextSex 11
코드 12
04-02. 02. 반복작업간단하게처리하기
반복문 반복문 특정문장을반복해서처리하는구문 조건에의해반복회수를제어 반복문의종류 For~Next 문 For Each 문 Do~Loop 문 Do While 형식 Do Until 형식 While 문 14
For ~ Next 문 카운터변수를사용해반복횟수를지정하는반복문 For ~ Next 형식 For < 카운터변수 > = < 시작값 > To < 종료값 >[Step 증가값 ] 실행문 [Exit For] [Continue For] Next < 카운터변수 > < 카운터변수> 가 < 시작수 >, < 시작수 + 1>, < 시작수 + 2>,..., < 끝수 > 까지변하면서실행문을수행 증가값을주면증가값만큼변함 ( 생략하면증가값 = 1) Ei Exit For 는 For ~ Next 문을강제로중단 Continue For는다음 < 카운터변수 > 값으로 For 문실행 Next 는 < 카운터변수 > 를다음값으로설정하고실행문을수행 15
예제 Debug.WriteLine 직접실행창에출력 Console.WriteLine 출력창에출력 16
예제 Step 문연습 For i = 1 To 10 Step 2 For i = 10 To 1 Step -1 For i As Double = 1 To 2 Step 0.2 17
중첩 For ~ Next 문 For ~ Next 문을중첩해서사용 서로다른카운터변수를사용해야함 For < 카운터변수 1> = < 시작값 > To < 종료값 >[Step 증가값 ] 실행문 For < 카운터변수2> = < 시작값 > To < 종료값 > [Step 증가값 ] 실행문... [Exit For] [Continue For] ] Next < 카운터변수2> 실행문 [Exit For] ] [Continue For] Next < 카운터변수1> 18
예제 목적 단일 For 문과중첩된 For 문을잉용해원하는구구단을출력 실행내용 콤보박스를이용해원하는단을선택하면해당단이출력 구구단전체버튼을누르면전체구구단이출력 19
폼디자인 컨트롤속성 Label1 ComboBox1 Button1 번호종류속성 1 Form Text: 구구단 2 Label Text: 몇단을출력할 까요? 3 ComboBox (Name): ComboBox1 Items: 2 3 4 5 6 7 8 9 4 TextBox (Name): TextBox1 ScrollBars: Vertical Multiline: True 5 Button (Name): Button1 Text: 구구단전체 TextBox1 20
코드 ComboBox 에서선택된 item 참조 ComboBox.SelectedItem 문자반복 StrDup( 반복회수, 문자 ) 21
Do ~ Loop 문 조건식을만족할경우원하는실행문을계속반복 True 일경우반복 : Do While ~ Loop / Do ~ Loop While False 일경우반복 : Do Until ~ Loop / Do ~ Loop Until Do ~ Loop 형식 Do {While 또는 Until} < 조건식 > 실행문 [Exit Do] [Continue Do] Loop Do 실행문 [Exit Do] [Continue Do] Loop {While 또는 Until} < 조건식 > 22
Do ~ Loop 문 Flow Chart Do While ~ Loop 문 Do Until ~ Loop 문 Do While < 조건식 > False Do Until < 조건식 > True True False 실행문 실행문 Loop Loop Do ~ Loop While 문 Do ~ Loop Until 문 Do 실행문 Do 실행문 True Loop While < 조건식 > False False Loop Until < 조건식 > True 23
Do ~ Loop 문 For ~ Next 문과 Do ~ Loop 문 Do ~ Loop 문이더욱일반적인형태의반복문을나타낼수있음 For 카운터변수 = 시작값 To 종료값 Step 증가값실행문 Next Dim 카운터변수 = 시작값 Do While 카운터변수 <= 종료값실행문카운터변수 = 카운터변수 + 증가값 Loop 24
예제 목적 0~99 사이에랜덤으로생성된정수를맞추는프로그램 25
코드 사용함수 Randomize(): 랜덤넘버생성기를초기화 Rnd(): 0 <= x < 1 사이의랜덤실수값을리턴 26
04-03. 03. 오류처리와디버깅
디버그 버그 (bug) 프로그램의오류 디버그 (debug) 버그를제거하는작업 단계실행 중단점지정 28
디버그 직접실행창 중단점에서변수값을확인
디버그 조사식 조사식창에변수값의변화를표시
04-04. 04. 배열이해하기
배열 배열 (Array) 동일한데이터형을가지는연속된여러개의자료를하나의변수이름으로정의해서사용 배열선언 Dim 변수명 ( 마지막인덱스 ) As 데이터형 인덱스 :0 0, 1, 2,..., 마지막인덱스 변수의개수 = 마지막인덱스 + 1 배열변수사용 변수명 ( 인덱스 ) 32
배열 예제 Dim No(5) As Integer No(0) No(1) No(2) No(3) No(4) No(5) No(1) = 10 No(4) = No(3) + 1 No(i + 1) = No(i) + 1 시작과종료인덱스지정 Dim 변수명 ( 시작인덱스 To 종료인덱스 ) As 데이터형 VisualBasic 2010 에서는시작인덱스가 0 만지정가능 33
예제 목적 5개의이름을 InputBox() 로입력받아배열에저장 인덱스번호를입력하면해당이름을 MsgBox() 에출력 에러가발생하면다음라인수행 34
배열의차수 2 차원배열 Dim 변수명 (m, n) As 데이터형 예제 : Dim No(3,5) As Integer No(0,0) No(0,1) No(0,2) No(0,3) No(0,4) No(0,5) No(1,0) No(1,1) No(1,2) No(1,3) No(1,4) No(1,5) No(2,0) No(2,1) No(2,2) No(2,3) No(2,4) No(2,5) No(3,0) No(3,1) No(3,2) No(3,3) No(3,4) No(3,5) 3 차원배열 Dim 변수명 (l, m, n) As 데이터형 35
동적배열과정적배열 정적배열 배열을선언할때배열의크기를지정 동적배열 배열선언시크기를지정하지않고실행중에크기를조절 ReDim 명령으로크기조절 차원을바꿀수는없음 배열의크기를조절하면서내용을초기화 Dim myarray() As String ReDim myarray(5) 배열의크기를조절하면서내용을유지 Dim myarray() As String ReDim Preserve myarray(5) 36
For ~ Next 를이용한배열변수사용 GetUpperBound() 메서드 배열의가장높은인덱스를반환 1차원배열 Dim numbers = {10, 20, 30} For i As Integer = 0 To numbers.getupperbound(0) Debug.WriteLine(numbers(i)) Next 2 차원배열 Dim numbers = {{1, 2}, {3, 4}, {5, 6}} For index1 = 0 To numbers.getupperbound(0) For index2 = 0 To numbers.getupperbound(1) Debug.Write(numbers(index1, ( index2) & ) Next Debug.WriteLine( ) Next 37
배열의초기화 {} 를사용하여초기값지정 초기값에의해차원과타입이자동지정 배열의크기는지정할수없고초기값개수에의해결정 예제 Dim values() As Double = {1, 2, 3, 4, 5, 6} values.getupperbound(0) = 5 Dim matrix(,) As Double = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}} matrix.getupperbound(0) = 2, GetUpperBound(1) = 2 Dim grid = {{1, 2}, {3, 4}} Dim a = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}} a.getupperbound(0) = 3, GetUpperBound(1) = 1 Dim values = {({1, 2}), ({3, 4, 5})} values.getupperbound(0) = 1, values(0).getupperbound(0) = 1, values(1).getupperbound(0) = 2 38
예제 목적 ReDim을사용하여배열의크기를 2배로늘리기 For ~ Next를사용하여배열변수출력 ReDim과 ReDim Preserve의차이점파악 39
예제 목적 다차원배열의사용 2 x 2 matrix A, B를입력받아 C = A + B, C = A * B를계산 40
예제 폼디자인 TextBox1 ReadOnly: True Multiline: True TextBox2 ReadOnly: True Multiline: True Label Button1 Button3 Button4 Button2 TextBox2 ReadOnly: True Multiline: True 41
예제 코드 42
예제 코드 ( 계속 ) 43
04-05. 05. 사용자정의데이터형선언하기
사용자정의데이터형 사용자정의데이터형 사용자가임의로여러데이터형을묶어새로운데이터형을선언 배열 vs. 사용자정의데이터형 배열 동일한데이터형을하나의이름으로묶음 사용자정의데이터형 서로다른데이터형을가진여러개의변수들을하나의공통된이름으로묶음 45
사용자정의데이터형 Structure Structure type_name Dim var_name_1 As data_type_1 Dim var_name_2 As data_type_2type... Dim var_name_n As data_type_n End Structure 예제 Structure Student Dim name As String Dim id As String Dim age As Integer End Structure Dim cheng_student(50) As Student 46
사용자정의데이터형 Structure 변수의사용 Structure Student Dim name As String Dim id As String Dim age As Integer End Structure Dim cheng_student(50) As Student cheng_student(0).name = 강건 cheng_student(0).id = 201510980 cheng_student(0).age = 19 cheng_student(1) = cheng_student(0) 47
예제 목적 사용자정의데이터형사용 검색을누르면인덱스에해당하는데이터출력 입력을누르면해당인덱스에성명, 학번, 점수데이터를입력 평균을누르면평균값을메시지박스에출력 TextBox1 Button1 TextBox2 TextBox3 TextBox4 Button2 Button3 48
예제 코드 49
예제 코드 ( 계속 ) 50
04-06. 06. 데이터정렬하기
데이터정렬 데이터를크기순으로재배치 오름차순정렬 값이적은데이터먼저배치 내림차순정렬 값이큰데이터먼저배치 정렬예제 정렬전 ( 입력데이터 ) 인덱스 1 2 3 4 5 값 100 94 65 95 80 오름차순정렬후 인덱스 1 2 3 4 5 값 65 80 94 95 100 52
데이터정렬알고리즘 셀렉션소트 (selection sort) 버블소트 (bubble sort) 삽입소트 (insertion sort) 머지소트 (merge sort) 퀵소트 (quick sort) 53
셀렉션소트 소트과정 인덱스 1 2 3 4 5 값 100 94 65 95 80 최소 65, 100 과 65 교환 인덱스 1 2 3 4 5 값 65 94 100 95 80 최소 80, 94 와 80 교환 인덱스 1 2 3 4 5 값 65 80 100 95 94 최소 94, 100 과 94 교환 인덱스 1 2 3 4 5 값 65 80 94 95 100 최소 95, 교환없음 인덱스 1 2 3 4 5 값 65 80 94 95 100 최소 100, 교환없음 인덱스 1 2 3 4 5 값 65 80 94 95 100 정렬종료 54
예제 55
버블소트 소트과정 인덱스 1 2 3 4 5 값 100 94 65 95 80 인덱스 1 2 3 4 5 값 94 65 95 80 100 인덱스 1 2 3 4 5 값 65 94 80 95 100 인덱스 1 2 3 4 5 값 65 80 94 95 100 인덱스 1 2 3 4 5 값 65 80 94 95 100 인덱스 1 2 3 4 5 값 65 80 94 95 100 56
예제 57