학습목표 제어구조를 익히자 모듈과 프로시저를 마스터하자 배열을 공부하자
제어문 ■ 제어문 False True Grade >= 60 Print “Failed” Print “Passed”
■ 제어구조 제어구조를 익히자 교육 목표 If …. Then …. else 문 Select Case 문 For … Next 문 / For Each … Next 문 while … Wend문 제어문 예제
IF문 ■ IF문 단일 선택구조 IF 이중 선택구조 IF 다중 조건 구조 IF
단일 선택구조IF ■ 단일 선택구조IF 형식 If 조건 Then 실행 문장 End IF 또는 If 조건 Then 실행문
Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) if n=0 then End ■ 예제 Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) if n=0 then End Print n End Sub
어떤 문자 하나를 InputBox로 입력 받아 “A”부터 “Z”사이가 아니라면 “에러”라고 출력하는 프로그램을 작성. IF문 문제 ■ 문제 어떤 문자 하나를 InputBox로 입력 받아 “A”부터 “Z”사이가 아니라면 “에러”라고 출력하는 프로그램을 작성. Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) If ( ) then Print “에러” ( ) End Sub
■ 이중 선택구조 IF 이중 선택 구조 IF 형식 If 조건 Then 참인 경우 실행문장 Else 거짓인 경우 실행문장 End If
■ If…then…else문(1) If…then…else문 Double-selection structure Single- selection structure Double-selection structure True True False Grade >= 60 Grade >= 60 False Print “Passed” Print “Failed” Print “Passed”
■ If…then…else문(2) If…then…else문 Single Selection Structure Format 명령문 End If Code If ( grade >= 60 ) then lblGrade.caption=“Passed” ; End If
■ If…then…else문(3) If…then…else문 Double Selection Structure Format 명령문 1 else 명령문 2 End If Code If ( grade >= 60 ) then lblGrade.caption=“Passed” ; else lblGrade.caption=“Failed” ; End If
■ 예제 If…then…else문 Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) If n>0 then Print “양수” else Print “음수” End if End Sub
두수를 입력 받아 가장 큰 수를 출력하는 프로그램 작성. If…then…else문 문제 ■ 문제 두수를 입력 받아 가장 큰 수를 출력하는 프로그램 작성. Private Sub CommEx_Click() A=InputBox(“숫자를 입력하세요”) B=InputBox(“숫자를 입력하세요”) If( ) Then Print A ( ) Print B End Sub
■ 다중 조건IF 다중 조건IF 형식 If 조건1 Then 실행문장1 ElseIf 조건2 Then 실행문장2 Else 실행문장3 End If
■ 예제 다중 조건IF 예제 Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) If n>0 then Print “양수” ElseIf n=0 Then Print “영” Else Print “음수” End if End Sub
■ 문제1 다중 조건IF 문제 하나의 문자를 입력받아 v, V 이면 비주얼 베이직, d, D 이면 델파이, j, J이면 자바 로 출력하는 프로그램을 작성하시오.
■ code를 완성하시오 다중 조건IF 문제 Private Sub CommEx_Click() n=InputBox(“숫자를 입력하세요”) If ( ) then Print “비주얼베이직” ElseIf ( ) Then Print “델파이” Else Print “자바 ” End if End Sub
■ Select Case문 (1) Select Case문 Multiple- selection structure True strHakjum = “A” Score >= 90 False True strHakjum = “B” Score >= 80 False True strHakjum = “D” Score >= 60 False
■ Select Case문 (2) Select Case문 Format Select Case 평가식 Case 평가값 명령문 1 명령문 2 명령문 3 Case Else 명령문 n End Select
■ Select Case문 (3) Select Case문 Coding Select Case intScore Case 90 strHakjum = “A” Case 80 strHakjum = “B” Case 70 strHakjum = “C” Case Else strHakjum = “F” End Select
■ 예제 1 Select Case문 예제 Select Case Num Case 0 : Print “영” End Select
■ 예제 2 Select Case문 예제 Select Case aa Case is < 12 Msgbox “유년기” Case 14 to 20 Msgbox “청년기” End Select
Select Case문 문제 ■ 문제1 하나의 문자를 입력받아 “A”나 “a”이면 “America”로 “K”나 “k”이면 “Korea”로 그외 문자는 “에러”로 출력하는 프로그램을 작성하시오.
Select Case문 문제 Aa = inputbox(“문자를 입력하세요”) Select Case aa Case ( ) Print “America” Print “Korea” ( ) Print “에러” End Select
Select Case문 문제 ■ 문제2 국어, 영어, 수학점수를 InputBox로 입력받아 합계와 평균을 계산하여, 평균이 90점이상이면 “A”, 평균이 80점이상 90점미만이면 “B”, 평균이 70점이상 80점미만이면 “C”, 평균이 60점이상 70점미만이면 “D”, 평균이 60점미만이면 “F”로 학점을 출력하는 프로그램을 작성하시오
■ For…Next문(1) For…Next문 지정된 범위를 지정한 횟수만큼 반복 실행한다 형식 For 변수 = 초기치 To 최종치 Step 증가치 처리문장 Next 변수
■ For…Next문 (2) For…Next문 True count <= 10 False count = 1 sum = 0 sum = sum + count count++ False
For 카운터 변수 = 시작값 To 종료값 Step 증가치 명령문 [ Exit For ] Next [카운터 변수] Format 예 For 카운터 변수 = 시작값 To 종료값 Step 증가치 명령문 [ Exit For ] Next [카운터 변수] sum =0; For( i=0 To 10 Step 1 ) sum = sum + i Next
For…Next문 예제 예제) 1 부터 10 까지 출력하기 For i = 1 to 10 Step 1 Print i Next i
For…Next문 문제 문제 1 ) 다음 아래와 같은 결과를 출력하시오. ( For문, Do While .. Loop문, Do .. Loop While문, Do Until .. Loop문 사용) 500 400 300 200 100 문제 2 ) 다음 아래와 같은 결과를 출력하시오. 10 9 8 7 . . 1
문제 3 ) 1 부터 100까지의 합을 출력하시오. ( For문, Do While .. Loop문) For…Next문 문제 문제 3 ) 1 부터 100까지의 합을 출력하시오. ( For문, Do While .. Loop문) 문제 3) 1 부터 100까지에서 홀수의 합을 출력하시오. ( For문, Do While .. Loop문) 문제 4) 1 부터 100까지에서 7의 배수의 합을 출력하시오. ( For문, Do While .. Loop문)
■ For Each…Next문 For Each 구성요소 In 그룹 명령문 [ Exit For ] Next [구성요소] 기능 배열/컬렉션의 각 요소에 명령문 반복 실행 Format For Each 구성요소 In 그룹 명령문 [ Exit For ] Next [구성요소]
■ Do While…Loop문 Do While…Loop문 조건을 검사한 후 참이면 반복문 실행한다. 형식 Do While 조건 조건을 검사한 후 참이면 반복문 실행한다. 형식 Do While 조건 처리문장 Loop 예제) i=1 Do While i<=0 Print i i=i + 1 Loop
■ Do Loop…While문 Do Loop…While문 일단 한번 문장들을 실행 시킨 뒤 조건을 검사한다. 형식 Do 처리문장 Loop While 조건 예제) i=1 Do Print i i=i + 1 Loop While i <= 10
■ Do Until…Loop문 Do Until…Loop문 조건이 거짓이면 반복하고 참이면 끝낸다. 형식 Do Until 조건 처리문장 Loop 예제) i=1 Do Until i > 10 Print i I = i + 1 Loop
Do…Loop문 ■ Do…Loop문(1) Count++ True Counter <= 10 False
■ Do…Loop문(2) Do…Loop문 Format Do [{While | Until} 조건식] 명령문 [Exit Do] 예 sum = 0 Do While boolEnd = False sum= isum + 3 If sum > 500 Then boolEnd = True End If Loop
■ Do…Loop문(3) Do…Loop문 Format Do 명령문 [Exit Do] Loop [{While | Until} 조건식] 예 Sum = 0 Do Sum = Sum + 1 If Sum = 100 Then Exit Do End If Loop Until boolEnd = True
While…Wend문 ■ While…Wend문(1) True Count++ name[count] > 0 False
■ While…Wend문(2) While…Wend문 Format While 조건식 명령문 Wend 예 While i < 10 Sum = Sum + i i = i + 1 Wend
■ Exit문 예) a=10 Do While a <= 60 Print a if a=40 then Exit Do 현재 블록을 강제로 빠져 나올 때 사용한다. For문 : Exit For에서 빠져 나옴 Do문 : Exit Do에서 빠져 나옴 예) a=10 Do While a <= 60 Print a if a=40 then Exit Do i=i+10 Loop
Goto문 ■ Goto문 점프해서 지정된 곳에서 실행한다 예제) Goto Line .... Line : 명령문
■ 제어문 예제(1) 제어문 예제 Form Name 지정: frmControl Caption 지정: 제어문 예제 1. 더블 클릭 (frmControl 입력) 2. 더블 클릭 (제어문 예제 입력)
■ 제어문 예제(2) 제어문 예제 3. Control 배치 Control 배치 Label Label 1 Label 2 TextBox Text 1 CommandButton Command 1 Command 2
■ 제어문 예제(3) 제어문 예제 Control 속성지정 속 성 Control Name Caption Appearance Label 속 성 Control Name Caption Appearance BorderStyle Label 1 Label 2 Label 1 lblResult 찾을 이름은 ? 1: 3D 0: 평면 0: 없음 1: 단일고정 속 성 Control Name Text Text 1 txtName
■ 제어문 예제(4) Name Caption 제어문 예제 속 성 Control Command 1 Command 2 Command Button 속 성 Name Caption Control Command 1 Command 2 cmdFind cmdExit 찾기(&F) 종료(&X) Control 배치 및 속성 지정 완료 화면
제어문 예제 ■ 제어문 예제(5) Code 작성 일반선언부 이름을 저장할 String형 배열 변수 선언 4. Code 작성
제어문 예제 ■ 제어문 예제(6) Code 작성 Form 개체의 Load Event 프로시저 5. Code 작성
제어문 예제 ■ 제어문 예제(7) Code 작성 [ 찾기 ] 버튼 개체의 Load Event 프로시저 6. Code 작성
제어문 예제 ■ 제어문 예제(8) Code 작성 [ 종료 ] 버튼 개체의 Click Event 프로시저 7. Code 작성
제어문 예제 ■ 제어문 예제(9) 실행 8. “늘푸름” 입력 9. 클릭
모듈과 프로시저를 마스터하자 프로시저 사용이유 서브 프로시저 함수 프로시저 값에 의한 호출과 참조에 의한 호출 정적변수와 정적 프로시저 기타 매개변수
■ 프로시저 사용이유 프로시저 사용이유 프로시저는 프로그램을 작은 논리단위로 나누어 관리가 용이하다. 다른 프로그램에서도 사용이 가능하다.
단위프로그램으로 작성해서 필요할 때마다 사용한다. 객체에 대한 이벤트가 발생했을 때 호출된다. 서브 프로시저 ■ 서브 프로시저(1) 이벤트에 대해서 실행되는 코드의 블록이다. 단위프로그램으로 작성해서 필요할 때마다 사용한다. 객체에 대한 이벤트가 발생했을 때 호출된다. 예제) Private Sub am_Click() Print “이벤트” End Sub
■ 서브 프로시저(2) 서브 프로시저 프로시저 내에 놓여진 코드를 실행할 뿐 어떤 값도 반환하지 않는다. 호출 문장이 필요하다 형식 Private Sub 프로시저이름(매개변수) 처리문장 End Sub
서브 프로시저 예제 예제) Private Sub Cmd_Click( ) My 3 ‘ Call My(3)과 같다 End Sub Public Sub My(Cnt As Integer) For i=1 to Cnt Print “안녕하세요” Next i End Sub
■ 함수 프로시저 함수 프로시저 프로시저 이름을 통해 하나의 값을 반환한다. 함수 프로시저는 변수처럼 자신의 자료형을 가진다.(기본형은 Variant형이다) 형식 Function 프로시저이름(매개변수) As 반환형 처리문장 변수 = 반환값 End Function
함수 프로시저 예제 예제) Private Sub Cmd_Click( ) Dim K As Integer K=My(10) Print K End Sub Public Function My(Su As Integer) As Integer My=Su*Su End Function
함수 프로시저 예제 함수 프로시저 예제2) Private Sub Cmd_Click() Dim k As Integer k=My(10) Select Case k Case -1 : Print “음수” Case 0 : Print “영” Case 1 : Print “양수” End Select End Sub Public Function My(su As Integer) As Integer If su=0 then ( ) =0 elseif su > 0 then ( ) =1 elseif su < 0 then ( ) =-1 EndIf End ( )
(문제1) 1부터 입력받은 수까지의 합을 계산하는 프로그램을 완성시키시오. 함수 프로시저 문제 (문제1) 1부터 입력받은 수까지의 합을 계산하는 프로그램을 완성시키시오. Private Sub Command1_Click( ) Dim k As Integer k=Inputbox(“수치를 입력”) Call My(k) End Sub
(문제2) 1부터 입력받은 수까지의 합을 계산하는 프로그램을 완성시키시오. 함수 프로시저 문제 (문제2) 1부터 입력받은 수까지의 합을 계산하는 프로그램을 완성시키시오. Private Sub Command1_Click( ) Dim k As Integer Dim m As Integer k=Inputbox(“수치를 입력”) m=My(k) Print m End Sub
■ 값에 의한 호출과 참조에 의한 호출 값에 의한 호출과 참조에 의한 호출 Call By Reference : 호출하는 측에서 프로시저에게 데이터를 넘겨줄때, 데이터의 주소가 넘어간다. : 프로시저 작성시 매개변수 앞에 ByRef키워드를 사용한다. : 형식 Private Sub Sam(ByRef k As integer) ...... End Sub
값에 의한 호출과 참조에 의한 호출 Call By Value : 호출하는 프로시저에게 데이터를 넘겨 줄때 데이터 값이 넘어간다. : 프로시저 작성시 매개변수 앞에 ByVal 키워드를 사용한다. : 형식 Private Sub(ByVal k As Integer) ..... End Sub
(문제 1) 다음 프로그램의 결과 값을 작성하시오. 값에 의한 호출과 참조에 의한 호출 문제 (문제 1) 다음 프로그램의 결과 값을 작성하시오. Dim k As Integer Private Sub Form_Load() k=20 End Sub Private Sub Cmd_Click() Call My(k) Print k Public Sub My(ByRef D As Integer) Print D D=0 End Sub
(문제2) 다음 프로그램의 결과 값을 작성하시오. 값에 의한 호출과 참조에 의한 호출 문제 (문제2) 다음 프로그램의 결과 값을 작성하시오. Dim K As Integer Private Sub Form_Load() K=20 End Sub Private Sub Cmd_Click() Call My(K) Public Sub My(ByVal D As Integer) Print D D=0 End Sub
■ 정적 변수와 정적 프로시저 정적 변수와 정적 프로시저 Static 예약어 정적변수나 정적 프로시저를 선언할 때 사용한다. 지역변수의 값을 유지하는데 사용
정적 변수와 정적 프로시저 ■ 정적 변수 블록이 시작되기 전에 이미 메모리에 생성되었다가 블록이 끝나도 그대로 그 값을 보존하며 메모리에 남아있다 Sub Main_Proc() Call Total(1) Call Total(2) End Sub Sub Total(Num) Static Sum Sum=Sum+Num Print Sum End Sub
■ 정적 프로시저 정적 변수와 정적 프로시저 프로시저 안에 선언된 모든 변수를 정적변수로 생성할 때 사용한다. 예제) Static Sub Total(Number) Sum Sum = Sum + Number Print Sum End Sub
■ 기타 매개변수 기타 매개변수 선택적인 매개변수의 이름 앞에는 예약어 Optional을 추가한다. 선택적인 매개변수에 대해서는 가변형인 Variant형만이 허용된다. 매개변수 리스트는 마지막에 선언한다.
기타 매개변수 예제 예제) A_Pro “안녕하세요”, “홍길동씨” A_Pro “안녕하세요” Sub A_Pro(X As String, Optional y As Variant) If IsMissing (y) Then Print x & “아무개씨” Else Print x & y End If End Sub
기타 매개변수 예제 예제) A_Pro “안녕하세요”, “홍길동씨” A_Pro “안녕하세요” Sub A_Pro(x As String, Optional y As Variant =“아무개씨” ) Print x & y End Sub
배열을 공부하자 배열의 기초 1차원 배열 다차원 배열 동적 배열 컨트롤 배열
배열의 기초 ■ 배열의 기초 배열(Array) : 크기와 자료형이 같은 변수의 집합입니다. 여러 개의 변수를 모아서 처리할 때 사용한다. 요소(Element) : 배열을 구성하는 각각의 값이다. 첨자(Subscript) : 요소를 구분하기 위해 사용하는 번호이다. 예제) Dim K(5) As Integer A(0) A(1) A(2) A(3) A(4) A(5)
■ 1차원 배열 1차원 배열 첨자가 하나인 배열 (예제) Dim a(5) As Integer 배열요소의 하한 값은 0으로 시작한다. Option Base (예제) Option Base 1 Dim A(5) As Integer A(1) A(2) A(3) A(4) A(5)
1차원 배열 배열의 범위를 변경 Dim A(10 To 14) As Integer A(10) A(11) A(12) A(13) A(14)
(문제1) 다음 프로그램의 결과 값을 작성하시오. 1차원 배열문제 (문제1) 다음 프로그램의 결과 값을 작성하시오. Private Sub Form_Load() Dim a(1 to 26) As String*1 Dim i As integer Dim j As integer j=65 For i= 1 to 26 a(i) = Chr(j) j=j+1 Next i For i=1 to 26 Print a(i) Next i End Sub
1차원 배열 문제 (문제2) 다음 프로그램의 결과를 작성하시오. Private Sub Form_Load() Dim Code(10 to 20) As Integer For i=10 To 20 Step 3 Code(i) = 100 Next i Print Code(i) End Sub
■ 다차원 배열 다차원 배열 첨자가 2개 이상인 배열 (예제) Dim A(2,3) As Integer A(0,0) A(0,1)
(문제1) 다음 프로그램의 결과값을 작성하시오 다차원 배열 문제 (문제1) 다음 프로그램의 결과값을 작성하시오 Private Sub Form_Load() Dim a(1,2) As Integer a(0,0)=10 : a(0,1) = 10 : a(0,2) = 10 a(1,0)=20 : a(1,1) = 20 : a(1,2) = 20 For i = 0 To 1 For j = 0 To 2 Print a(i,j) Next j Next i End Sub
Print a(i,0),a(i,1),a(i,2),a(i,3),a(i,4) 다차원 배열 문제 (문제2) 다음 프로그램 결과값을 작성하시오. Private Sub Form_Load() Dim a(1 To 3, 4) a(1,0)=“Sung” : a(1,1) =90 a(1,2)=80 : a(2,0)=“Kim” a(2,1)=100 : a(2,2)=90 a(3,0)=“lee” : a(3,1) =40 a(3,2)=50 For i= 1 to 3 a(i,3)=a(i,1)+a(i,2) Next i For i= 1 to 3 suk=1 For j= 1 to 3 If a(j,3)>a(i,3) Then suk=suk+1 End If Next j a(i,4)=suk Next i For i= 1 to 3 Print a(i,0),a(i,1),a(i,2),a(i,3),a(i,4) End Sub
■ 동적 배열 동적 배열 프로그램 실행 중에 크기를 바꿀수 있는 배열이다. ReDim 을 사용해서 기존의 배열을 다시 선언한다. ReDim은 Dim과 달리 프로시저 안에서만 사용할 수 있다. 예제) Dim Mat() As Integer Sub A_Proc() ReDim Mat(3,4) ‘ 배열의 크기는4*5 .... End Sub
동적 배열 동적배열의 데이터 보존 ReDim문을 사용하면 각 형에 대해 초기값을 갖는다. 가변형 => Empty 숫자 => 0 문자열형 => 원소값이 0인 문자열 Preserve예약어를 사용해 값을 보존 첨자의 범위 최소값 : LBound(배열이름, 차수) 최대값 : UBound(배열이름, 차수)
(문제1) 다음 프로그램의 결과값을 작성하시오. 동적 배열 문제 (문제1) 다음 프로그램의 결과값을 작성하시오. For i=1 To 3 Print b(i) Next i End Sub Option Base 1 Private Sub Form_Load() Dim a() As Integer Dim b() As Integer ReDim a(3) ReDim b(3) For i=1 To 3 a(i)=i Print a(i) Next i
동적 배열 문제 For i=1 To 3 Print b(i) Next i End Sub Option Base 1 Private Sub Form_Load() Dim a(3) As Integer Dim b(3) As Integer For i=1 To 3 a(i)=i Print a(i) Next i b=a For i=1 To 3 Print b(i) Next i End Sub
동적 배열 문제 Option Base 1 Private Sub From_Click() Dim a(2 To 5) As Integer For i= Lbound(a) To Ubound(a) a(i)=i Print a(i) Next i End Sub
동적 배열 문제 Private Sub Form_click() Dim a(2 To 3, 1 To 3) As Integer Print LBound(a,1) Print LBound(a,2) Print UBound(a,1) Print UBound(a,2) End Sub
■ 컨트롤 배열 컨트로 배열 컨트롤의 모음을 하나의 집합으로 처리할 때 사용한다. 이벤트 프로시저 하나를 공유하며, Index를 매개변수로 구분한다
컨트로 배열 예제 프로그램 ■ 컨트롤 배열 예제 프로그램 실행
컨트로 배열 예제 프로그램 Private Sub optArray_Click(Index As Integer) '컨트롤 배열 첨자값 출력 Cls Print Print "Index = "; Index '선택된 모양으로 바꿈 Select Case Index Case 0 shpShape.Shape = vbShapeCircle Case 1 shpShape.Shape = vbShapeRectangle Case 2 shpShape.Shape = vbShapeRoundedRectangle End Select End Sub