학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2
6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3
프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등 개발자들을위해공통적으로많이사용되는기능들을사전에만들어놓은프로시저 모든개발자들이공유할수있다. sin() 함수는모든개발자가새로만들필요가없는내장프로시저이다. => 개발시간단축 사용자정의프로시저 비주얼베이직에서제공하는기본적인내장프로시저이외의사용자의필요에의해만들어진프로시저 리턴값 (return value) 의유무에따라구분 서브프로시저 (Sub Procedure) 함수프로시저 (Function Procedure) 4
함수프로시저 함수프로시저 (Function Procedure) 리턴값을가지는프로시저 형식 Function procedurename ( 매개변수리스트 ) As 반환형 statement(s) 처리코드 Return expression 반환할식 procedurename = 반환할값 ( 둘다가능 ) End Sub 5
예제 6-1 1 부터 10 까지의합을함수이용하여작성 6
예제 6-1 컨트롤속성설정 컨트롤이름속성설정 Form Text 함수이용 Label Label1 Text 1부터 10까지의합 TextBox TxtResult Text Button btnsum Text 서브덧셈 7
예제 6-1 코드작성 1. Function subsum(byval n As Integer) As Integer 2. Dim sum As Integer = 0 3. For i As Integer = 0 To n 4. sum = sum + i 5. Next i 6. Return sum 7. End Function 8. Private Sub Button1_Click(...) Handles Button1.Click 9. Dim input=10, resum As Integer 10. resum = subsum(input) 11. txtresult.text = CStr(reSum) 12. End Sub 8
예제 6-2 입력받은숫자까지의합을함수이용하여작성 9
예제 6-2 컨트롤속성설정 컨트롤이름속성설정 Form Text 함수를이용한합구하기 Label Text 숫자입력 Text 결과값 TextBox txtinput TabIndex 1 txtresult Button btnsum TabIndex 2 10
예제 6-2 코드작성 1. Function subsum(byval n As Integer) As Integer 2. Dim sum As Integer = 0 3. For i As Integer = 0 To n 4. sum = sum + i 5. Next i 6. Return sum 7. End Function 8. Private Sub Button1_Click(...) Handles Button1.Click 9. Dim input, resum As Integer 10. input = CInt(txtInput.Text) 11. resum = subsum(input) 12. txtresult.text = CStr(reSum) 13. End Sub 11
예제 6-3 함수를이용하여입력받은수의홀수, 짝수판단 12
예제 6-3 컨트롤속성설정 컨트롤이름속성설정 Form Text 함수이용 Label Text 수입력 lblresult Text 입력한수의짝홀수판단 TextBox txtinput TabIndex 1 Button BtnCheck TabIndex 2 Text 짝, 홀수알아보기 13
예제 6-3 코드작성 1. Function IsEven(ByVal su As Integer) As Integer 2. If su Mod 2 = 0 Then 3. IsEven = True 4. Else 5. IsEven = False 6. End If 7. End Function 1. Private Sub btncheck_click(...) Handles btncheck.click 2. Dim input As Integer 3. Dim result As Boolean 4. input = CInt(txtInput.Text) 5. result = IsEven(input) 6. If result = True Then 7. lblresult.text = " 입력한수는짝수입니다." 8. Else 9. lblresult.text = " 입력한수는홀수입니다. 10. End If 11. End Sub 14
6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 15
서브프로시저 서브프로시저 (Sub Procedure) 리턴값이없이주어진코드만을실행하는프로시저 형식 Sub procedurename ( 매개변수리스트 ) statement(s) 처리코드 End Sub 16
예제 6-4 숫자를입력받아서숫자만큼 * 를텍스트박스에출력하는프로그램을함수이용하여작성 17
예제 6-4 컨트롤속성설정 컨트롤이름속성설정 Form Text 서브프로시저 Label Text 숫자입력 TextBox txtinput TabIndex 1 txtresult Multiline Both ScrollBars 2 Button TabIndex 2 Text 별찍기 18
예제 6-4 코드작성 1. Sub subprint(byval input As Integer) 2. For i = 1 To input 3. txtresult.text = txtresult.text + "*" 4. Next i 5. txtresult.text = txtresult.text + vbcrlf 6. End Sub 7. Private Sub Button1_Click(...) Handles Button1.Click 8. Dim input As Integer 9. input = CInt(txtInput.Text) 10. subprint(input) 11. End Sub 19
6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 20
값에의한호출 (By Value) 데이터의주소값이아닌실제값을넘기는방식 원본데이터의값이복사되어넘어간다. 복사본을아무리수정해도원본은바뀌지않는것이특징 ByVal 키워드사용 Public Sub procedurename(byval a As Integer) : 처리코드 : End Sub 따라하며배우는 Visual Basic Programming 21
값에의한호출 예제 6-5 폼디자인 22
예제 6-5 코드작성 1. Private Sub btnsum_click(...) Handles btnsum.click 2. Dim a, b As Integer 3. GetNums(a, b) 4. AddSum(a, b) 5. End Sub 6. Sub GetNums(ByVal num1 As Integer, ByVal num2 As Integer) 7. num1 = CInt(txtNum1.Text) 8. num2 = CInt(txtNum2.Text) 9. End Sub 10. Sub AddSum(ByVal num1 As Integer, ByVal num2 As Integer) 11. Dim sum As Integer 12. sum = num1 + num2 13. txtresult.text = "hap of " & num1 & " and " & num2 & " is " & sum 14. End Sub 23
참조에의한호출 (By Reference) 호출하는측에서프로시저에게데이터를넘겨줄때, 데이터의주소를넘기는방식 매개변수앞에 ByRef 키워드를적어주어야함 비주얼베이직에서기본적으로참조에의한호출을이용 ByRef 는생략할수있음. Public Function procedurename(byref a As Integer) End Sub : 처리코드 : 따라하며배우는 Visual Basic Programming 24
참조에의한호출 예제 6-6 폼디자인 25
예제 6-6 코드작성 1. Private Sub btnsum_click(...) Handles btnsum.click 2. Dim a, b As Integer 3. GetNums(a, b) 4. AddSum(a, b) 5. End Sub 6. Sub GetNums(ByRef num1 As Integer, ByRef num2 As Integer) 7. num1 = CInt(txtNum1.Text) 8. num2 = CInt(txtNum2.Text) 9. End Sub 10. Sub AddSum(ByVal num1 As Integer, ByVal num2 As Integer) 11. Dim sum As Integer 12. sum = num1 + num2 13. txtresult.text = "hap of " & num1 & " and " & num2 & " is " & sum 14. End Sub 26
예제 6-7 폼디자인 참조에의한호출 그림 6.13: 실행화면 그림 6.14: 원본데이터의값으로 10 입력후 변경유무 버튼클릭시결과화면 27
예제 6-7 컨트롤속성설정 컨트롤이름속성설정 Form Text 참조에의한호출 Label Text 원본데이터의값은 : Text 변경후의원본데이터의값은 : TextBox txtbefore TabIndex 1 txtafter Button btncheck TabIndex 2 Text 변경유무 28
예제 6-7 코드작성 1. Dim k As Integer 2. Sub MySubTest(ByRef a As Integer) 3. a = 0 4. End Sub 5. Private Sub btncheck_click( ) Handles btncheck.click 6. k = CInt(txtBefore.Text) 7. Call MySubTest(k) 8. txtafter.text = CStr(k) 9. End Sub 29
예제 6-8 폼디자인 값에의한호출 그림 6.16: 실행화면 그림 6.17: 원본데이터의값으로 10 입력후 변경유무 버튼클릭시결과화면 30
예제 6-8 컨트롤속성설정 컨트롤이름속성설정 Form Text 값에의한호출 Label Text 원본데이터의값은 : Text 변경후의원본데이터의값은 : TextBox txtbefore TabIndex 1 txtafter Button btncheck TabIndex 2 Text 변경유무 31
예제 6-8 코드작성 1. Dim k As Integer 2. Sub MySubTest(ByVal a As Integer) 3. a = 0 4. End Sub 5. Private Sub btncheck_click( ) Handles btncheck.click 6. k = CInt(txtBefore.Text) 7. Call MySubTest(k) 8. txtafter.text = CStr(k) 9. End Sub 32
6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 33
예제 6-9 폼디자인 키를입력하면표준몸무게를출력해주는프로그램을함수이용하여작성 34
예제 6-9 컨트롤속성설정 컨트롤이름속성설정 Form Text 표준몸무게알아보기 Label Text 키 (Cm) : Text 당신의표준몸무게는 lblresult Text 표준 Text Kg입니다. TextBox TabIndex 1 Button btnresult TabIndex 2 Text 내표준몸무게는어떻게되나요? 35
예제 6-9 코드작성 1. ' 표준체중 (Kg)= ( 신장 (cm)-100) * 0.9 2. Function GetStandardWeight(ByVal Height As Double) As Double 3. Dim stdweight2 As Double 4. stdweight2 = (Height - 100) * 0.9 5. GetStandardWeight = stdweight2 6. End Function 7. Private Sub btnresult_click( ) Handles btnresult.click 8. Dim myheight, stdweight As Double 9. myheight = CDbl(txtHeight.Text) 10. stdweight = GetStandardWeight(myHeight) 11. lblresult.text = CStr(stdWeight) 12. End Sub 36