'프로그래밍/Visual Basic'에 해당되는 글 13건
- 2007/04/28 비주얼 베이직 - Study / 070427 / 소수 구하기
- 2007/04/28 비주얼 베이직 - (Report) / 070427
- 2007/04/13 Visual Basic 프로시저
- 2007/04/13 Visual Basic 배열
- 2007/04/13 Visual Basic 반복문
- 2007/04/13 Visual Basic 조건문
- 2007/04/07 Visual Basic 연산자
- 2007/04/07 Visual Basic 기본 데이터형
- 2007/04/04 비주얼 베이직 - 참고 사이트
- 2007/04/03 비주얼 베이직 - (Report) / 070330 / 연습문제1
- 2007/03/30 비주얼 베이직 - Study / 070330
- 2007/03/30 비주얼 베이직 - (Report) / 070330
- 2007/03/23 비주얼 베이직 - (Report) / 070323
※ 소수 10개 마다 다음라인
※ 소수의 개수을 출력
※ 소수의 합을 출력
방법1)
Option Base 1
Dim count As Integer
Dim sum As Integer
Dim result(100) As Integer
k = 1
If i Mod j = 0 Then
Exit For
End If
Next j
If j = i Then
result(k) = i
Print result(k);
If k Mod 10 = 0 Then Print:
k = k + 1
count = count + 1
sum = sum + i
End If
Next i
Print:
Print "1부터 100까지 소수의 개수:"; count
Print "1부터 100까지 소수의 합 :"; sum
방법2)
Option Base 1
Dim count As Integer
Dim sum As Integer
Dim result(100) As Integer
count = 0
If (i = 2) Or (i = 3) Or (i = 5) Or (i = 7) Or _
Not (i Mod 2 = 0) And Not (i Mod 3 = 0) And Not (i Mod 5 = 0) And Not (i Mod 7 = 0) Then
result(j) = i
sum = sum + i
count = count + 1
Print result(j);
If j Mod 10 = 0 Then Print:
j = j + 1
End If
Next i
Print:
Print "1부터 100까지 소수의 갯수:"; count
Print "1부터 100까지 소수의 합 :"; sum
실행결과
5장 연습문제2
문제1.
[결과] 버튼을 클릭하면 TextBox2에 "프로그램 문제입니다."가 나타나고,
[변환] 버튼을 클릭하면 Text1에 있는 내용과 Text2에 있는 내용을 바꾸며,
[종료] 버튼을 클릭하면 프로그램을 끝내는 프로그램을 작성하시오.
Text1.Text = "안녕하세요."
End Sub
Text2.Text = "프로그램 문제입니다."
End Sub
Dim temp As String
temp = Text2.Text
Text2.Text = Text1.Text
Text1.Text = temp
End Sub
End
End Sub
실행결과
1. 이벤트 프로시저
VB에서는 모든 객체는 자기 자신의 이벤트를 가지며, 이벤트는 각 객체를 사용할 때 자동으로 발생한다.
VB프로그램은 컨트롤을 사용하여 이벤트가 발생했을 때 해야 할 작업을 코드로 작성해주면 해당 이벤트가
발생할 때마다 작성된 코드를 실행시켜준다.
컨트롤을 사용할 때 발생하는 이벤트에 해야 할 작업을 작성한 코드를 이벤트 프로시저라 한다.
Private Sub 컨트롤이름_이벤트이름(인수들)
Private Sub Form_이벤트이름(인수들)
ex)
Private Sub Form_Load()
Private Sub Form_Click()
Private Sub Form_DbClick()
2. 서브 프로시저
공통적으로 반복되는 작업을 하나의 독립적인 기능을 수행하는 단위로 만들 때 이용되는 프로시저
반환되는 값은 없으며, 인수를 통하여 데이터를 주로 받는다.
[형식]
[Private | Public | Static] Sub 프로시저 이름[인수들]
선언들
문장들
End Sub
Private : 현재 모듈 안의 프로시저에서만 사용이 가능하다.
Public : 다른 모듈의 프로시저에서 공유가 가능하다.
Static : Sub 종료된 후에도 지역 변수의 값을 기억한다.
2) 프로시저 호출
[형식]
Call 프로시저 이름(인수1, ..., 인수n)
Option Explicit
Dim plus As Integer
Private Sub Form_Load()
Dim A As Integer, B As Integer
A=500: B=200
Call PLUS_SUB(A, B)
Print Plus
End Sub
Private Sub PLUS_SUB(X As Integer, Y As Integer)
plus = X + Y
End Sub
3. 함수 프로시저
서브 프로시저는 값을 반환하지 않지만 함수 프로시저는 값을 반환한다.
프로시저의 이름 자체에 값을 지정함으로서 값을 반환하며, 함수 프로시저에 반환되는 기본값은 Variant이고,
더 효과적인 코드를 위하여 As 예약어를 사용하여 반환값에 대한 데이터형을 명시한다.
[형식]
[Private | Public | Static] Function 프로시저 이름[인수들]
선언들
문장들
함수 프로시저 이름=결과값
End Function
Private : 현재 모듈 안의 프로시저에서만 사용이 가능하다.
Public : 다른 모듈의 프로시저에서 공유가 가능하다.
Static : Sub 종료된 후에도 지역 변수의 값을 기억한다.
2) 프로시저 호출
[형식]
결과 변수 = 함수 이름(인수1, ..., 인수n)
Option Explicit
Dim plus As Integer
Private Sub Form_Load()
Dim A As Integer, B As Integer
A=500: B=200
plus = PLUS_SUB(A,B)
Print Plus
End Sub
Private Function PLUS_SUB(X As Integer, Y As Integer) As Integer
PLUS_SUB = X + Y
End Function
Visual Basic 배열
배열 : 같은 이름을 갖는 연속적인 항목들이 같은 크기로 순서를 지니고 나열되어 있는 데이터 집합체
1. 인덱스는 0부터 시작한다.
2. 변수가 사전에 선언되어야 한다.
3. 각각의 요소는 모두 같은 데이터 형으로 구성되어 있어야 한다.
- 배열의 첨자는 0부터 시작하기 때문에 "상한값 + 1"개로 배열 요소가 설정된다.
- 하한값 설정 : 배열 요소의 하한값이 0으로 설정된 것을 1로 변경할 때 모듈의 선언부에 Option Base 문 사용.
ex) Option Base 1
[1차원 배열]
[형식] Dim 배열명[원소] [As 데이터형]
[형식] Dim 배열명[시작원소 To 마지막원소] [As 데이터형]
ex) Dim Sum(5) As Integer
ex) Dim Sum(5 To 8) As String
[다차원 배열]
[형식] Dim 배열명(행,열) [As 데이터형]
[형식] Dim 배열명(행 시작 원소 To 행 마지막 원소, 열 시작 원소 To 열 마지막 원소)
ex) Dim Sum(5,5) As Integer
ex) Dim Sum(1 To 5, 1 To 5) As String
[동적 배열]
프로그램 실행중에 배열의 크기를 바꿀 수 있는 배열
동적배열 선언 - [형식] Dim 배열명() [As 데이터형]
배열크기 재구성 - [형식] ReDim 배열명(원소의 개수)
ex) Dim Sum() As Integer
ex) ReDim Sum(5)
ReDim문은 실행할 때마다 배열의 저장된 값은 모두 초기화 된다.
기존의 값을 보존하고 크기만 변경하려면 예약어 Preserve 를 사용한다.
[형식] ReDim Preserve 배열명(UBound(배열명)+1)
UBound는 배열의 상한값을 나타낸다.
[배열 초기화]
한꺼번에 배열의 모든 요소들을 초기화, Erase문
숫자배열은 0, 문자형 배열은 길이가 0인 빈 공백, Variant 배열은 Empty로 초기화
[형식] Erase 배열 리스트
ex)
Dim Sum(5) As Integer
Erase Sum
1. For ~ Next 문
Step값이 생략되었을 경우 기본 증가값 1
반복중에 Exit For로 중지하면 For문을 빠져나온다.
...
문장들
[Exit For]
...
Next 변수
2. Do While ... Loop 문
코드를 수행하기 전에 조건을 검사하여 참이면 반복을 수행, 거짓이면 Do While ... Loop 문을 빠져나온다.
조건이 참인 동안 문장을 반복하여 실행하고, 조건이 거짓이 되면 반복을 종료한다.
반복중에 Exit Do로 중지하면 반복문을 빠져나온다.
...
문장들
...
[Exit Do]
Loop
3. Do ... Loop While 문
Do While ... Loop 문과 동일하지만 조건 판단문이 하단부에 있으므로 일단! 코드 블록을 "한 번 수행"하고
조건이 참인 동안 문장을 반복하여 실행하고, 조건이 거짓이 되면 반복을 종료한다.
반복중에 Exit Do로 중지하면 반복문을 빠져나온다.
...
문장들
...
[Exit Do]
Loop While 조건식
4. Do Until ... Loop 문
코드를 수행하기 전에 조건을 검사하여 참이면 반복을 수행, 거짓이면 Do ... Until Loop 문을 빠져나온다.
조건이 거짓인 동안 문장을 반복하여 실행하고, 조건이 참이 되면 반복을 종료한다.
반복중에 Exit Do로 중지하면 반복문을 빠져나온다.
...
문장들
...
[Exit Do]
Loop
5. Do ... Loop Until 문
Do Until ... Loop 문과 동일하지만 조건 판단문이 하단부에 있으므로 일단! 코드 블록을 "한 번 수행"하고
조건이 거짓인 동안 문장을 반복하여 실행하고, 조건이 참이 되면 반복을 종료한다.
반복중에 Exit Do로 중지하면 반복문을 빠져나온다.
...
문장들
...
[Exit Do]
Loop
6. While ~ Wend 문
코드를 수행하기 전에 조건을 검사하여 참이면 반복을 수행, 거짓이면 While ~ Wend 문을 빠져나온다.
조건이 참인 동안 문장을 반복하여 실행하고, 조건이 거짓이 되면 반복을 종료한다.
반복중에 중지할 수가 없다.
...
문장들
...
Wend
7. For Each ~ Next 문
컬렉션(collection)이나 배열 안에 있는 문자열을 찾거나 문자열 항목을 알아내고자 할 때 사용된다.
[그룹명]은 배열이나 컬렉션을 설정 할 수 있고 [구성요소]에는 그룹명의 내용을 넣을 수 있도록 variant
형식 또는 객체(object) 형식으로 설정한다.
...
문장들
[Exit For]
문장들
...
Next 구성요소
ex)
For i = 0 To 9
Num(i) = Int(10 * Rnd + 1)
Print Num(i)
Next i
For Each VarItem In Num
Sum = Sum + VarItem
Next
8. Exit 문
반복문이나 프로시저 수행중에 강제적으로 종료할 경우 사용
Exit Property - Property 프로시저 종료
Exit Sub - Sub 프로시저 종료
Exit For - For ... Next, For Each ... Next 문의 반복을 중지
Exit Do - Do ... Loop 문의 반복 중지
1. IF문
조건의 결과가 참인 경우 실행, 하나의 문장만을 처리한다면 end if는 넣지 않아도 된다.
If 조건 then 문장
[다중 IF문]
If 조건 Then
문장
ElseIf 조건2 Then
문장
...
Else
문장
End If
2. Select ~ Case문
조건의 결과 값이 Case의 값1부터 ~ 값n까지 비교하여 으면 문장을 실행하고
같은 값이 없으면 Case Else문 다음을 수행한다.
Case 값1
문장1
Case 값2
문장2
Case 값3
문장3
...
Case Else
문장n
End Select
|
연산자 종류 |
연산자 | 우선순위 | 예) | |
| 산술연산자 | + | 더하기 | 1 | Print 3 mod 5 Print 10 \ 3 Print 4 ^ 2 |
| - | 빼기 | |||
| * | 곱하기 | |||
| / | 나눗셈 (몫) (결과 실수값) | |||
| \ | 나눗셈 (몫) (결과 정수값) | |||
| Mod | 나눗셈 (나머지) | |||
| ^ | 지수 (제곱) | |||
| 관계연산자 | > | 크다 | 2 | a > 10 b <> 0 c <= 100 |
| < | 작가 | |||
| >= | 크거나 같다 | |||
| <= | 작거나 같다 | |||
| = | 같다 | |||
| <> | 같지 않다 | |||
| 논리연산자 | And | 논리곱 (모두 참일 때만 참) 그리고 |
3 | A And B A Or B Not A A Xor B A Eqv B A Imp B |
| Or | 논리합 (하나만 참이면 참) 또는 | |||
| Not | 논리부정 아니다 | |||
| Xor | 배타적 논리합(Exclusive Or) (같으면 거짓, 다르면 참) | |||
| Eqv | 등가(Equivalence) (모두 참이거나 거짓이면, 참, 아니면 거짓) | |||
| Imp | 논리적 내포(Implication) (왼쪽 값 기준으로 거짓이면 참, 참이면 그대로) | |||
| 결합연산자 | & | 문자열을 연결하는데 사용되는 연산자 (연결되는 데이터의 데이터 타입이 달라도 됨) |
||
| + | 문자열을 연결하는데 사용되는 연산자 (연결되는 데이터의 타입이 같아야 함) | |||
|
자 료 형 |
크 기(byte) |
범 위 |
| Byte | 1 | 0 ~ 255 |
| Boolean (논리형) |
2 | True, False |
| Integer (정수형) |
2 | -32,768 ~ 32,767 |
| Long (배정수형) |
4 | -2,147,483,648 ~ 2,147,483,647 |
| Single (단정도 실수) |
4 | 3.402823E38 ~ 1.401298E-45 |
| Double (배정도 실수) |
8 | ±4.94065645241247E-324 ~ ±1.79769313486232E308 |
| Date | 8 | 100년1월1일 ~ 999년12월31일 |
| Currency (통화형) |
8 | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
| Object | 4 | 모든 종류의 객체 |
| String (문자열 고정길이) |
문자열 길이 | 0 ~ 약 65,400 바이트 |
| String (문자열 가변길이) |
10 + 문자열 길이 | 0 ~ 약 2조 바이트 |
| Variant(문자) | 22 + 문자열 길이 | String(가변길이)와 같음 |
| Variant(숫자) | 16 | Double 형 범위와 같음 |
1) Name
2) 007K
3) My*Array
4) Function
2. 다음 설명 중 맞지 않는 것을 고르시오. 3
1) 변수명의 첫 글자는 반드시 영문자이어야 한다.
2) 실행이 종료된 프로시저의 지역 변수는 사라진다.
3) 긴 정수형 변수는 2 바이트가 필요하다.
4) 변수명 뒤에 #이 붙은 변수는 배정도 실수형 변수로 인식한다.
3. 다음 중 전역 변수의 특징이 아닌 것은 무엇인가? 4
1) 모듈의 선언 부분에서 선언된다.
2) 일반 모듈에서도 선언할 수 있으며, 전 프로그램 내에서 사용이 가능한 변수를 말한다.
3) Static이나 ReDim을 이용하여 변수의 형식을 정의할 수 있다.
4) 다음과 같은 방법을 사용하여 선언한다. Global version as Integer
4. 다음의 연산식을 비주얼 베이직의 코드로 바꾸시오.
1) y=4πr²
2) y=x²-2x+3
3) y=√a³+√b³
4) y=b² +√4ac/2
1) y=4*3.14*R^2
2) y=x^2-2*x+3
3) y=sqr(a^3+b^3)
4) y=b^2+sqr(4*a*c)/2
5. 아래의 선언문과 배열, 변수들의 값을 이용하여 다음의 값을 구하시오.
Dim i,j,Item(1 to 5) as Integer
i=4 : j=2
Item(1) = 40
Item(2) = 20
Item(3) = 12
Item(4) = 3
Item(5) = 18
1) Item(i/j)
2) i*Item(3*j-i)
3) Item(Item(4))
4) Item(i-j)
// 5번 문제
Dim item(1 To 5) As Integer
item(2) = 20
item(3) = 12
item(4) = 3
item(5) = 18
Print "2번"; i * item(3 * j - i)
Print "3번"; item(item(4))
Print "4번"; item(i - j)
1번 : 20
2번 : 80
3번 : 12
4번 : 20
6. 다음 중 틀린 것을 찾으시오.
1,2,3,4,5 모두 Array 를 변수명으로 사용(예약어)
Array 변수명을 제외하고 생각하면 1번 k 변수가 지정되어 있지 않고
2번 ReDim 에서 double 데이터 타입을 변경할 수 없음
1) Dim Array(k) As Integer
2) Dim Array()
ReDim Array(5) As Double
3) Static Array(8,8) As Long
4) Dim Array(2,5) As Integer
Array(1,3) = 30
5) Dim Array(4,4,4) As String
Array(1,2,3) = 45
7. 각 차원의 원소가 5개씩인 정수형 2차원 배열을 선언하고 루프를 사용하여 초기화하는 코드를 작성하시오.(단, 각 원소의 값은 두 인덱스 값의 곱으로 한다.)
// 7번 문제
Option Explicit
Dim i As Integer, j As Integer
For j = 1 To 5
ary(i, j) = i * j
Print ary(i, j); " = " & i; " * " & j
Next j
Next i
8. 배열 B(3,3)의 값을 이용하여 다음 프로그램의 변수 Total의 결과를 구하시오.(단, Option Base는 1로 한다.)
B(3,3)
1, 3, 5
7, 9, 11
13, 15, 17
// 연습문제1
// 8번 문제
Option Explicit
Option Base 1
Dim i As Integer, j As Integer, k As Integer, Total As Integer
k = 1
For i = 1 To 3
For j = 1 To 3
b(i, j) = k
k = k + 2
Next j
Next i
i = 1
Do While i <= 3
Total = Total + b(i, 3)
i = i + 1
Loop
9. 다음 프로그램의 결과를 출력하시오.
// 연습문제1
// 9번 문제
Private Sub Form_Load()
value(k) = 2 * k
k = k + 1
Loop
value(3) = value(3) + value(2)
10. 다음과 같이 변수가 정의되었을 때 아래 연산식의 결과를 구하시오. (단, Net, Easy는 실수형, Mean, Value는 정수형 변수이다.)
A = 3, B = 6, L = 2.0, C = 4, M = 4.0, N = 6.0
1) Easy = M / L - N
2) Value = B / C + N * A
3) Mean = A / C + B / C
4) Net = M / L + N / L
// 연습문제1
// 10번 문제
Option Explicit
Dim Net As Single, Easy As Single
Dim A As Integer, B As Integer, C As Integer
Dim L As Single, M As Single, N As Single
B = 6
C = 4
L = 2#
M = 4#
N = 6#
Value = B / C + N * A
Mean = A / C + B / C
Net = M / L + N / L
Print "2번 Value = "; Value
Print "3번 Mean = "; Mean
Print "4번 Net = "; Net
1번 Easy = -4
2번 Value = 20
3번 Mean = 2
4번 Net = 5
11. 배열 C(3,3)의 값을 이용하여 다음 프로그램의 변수 Sum의 결과를 구하시오.(단, Option Base는 1로 한다.)
C(3,3)
9 8 7
6 5 4
3 2 1
// 11번 문제
Option Explicit
Option Base 1
Dim i As Integer, j As Integer, k As Integer, sum As Integer
For i = 1 To 3
For j = 1 To 3
k = k - 1
c(i, j) = k
Print k
Next j
Next i
For i = 1 To 3
For j = 1 To 3
sum = sum + c(i, j)
Next j
Next i
결과 : 45
12. 각 차원의 원소가 4개씩인 정수형 2차원 배열을 선언하고 루프를 사용하여 초기화하는 코드를 작성하시오. (단, 각 원소의 값은 두 인덱스값의 누승으로 한다.)
// 12번 문제
Option Explicit
Dim i As Integer, j As Integer
For j = 1 To 4
ary(i, j) = i ^ j
Print i, j, ary(i, j)
Next j
Next i
13. 배열 C(3,3)의 값을 이용하여 다음 프로그램의 변수 Total의 결과를 구하시오. (단, Option Base는 1로 한다.)
C(3,3)
2 4 6
8 10 12
14 16 18
// 연습문제1
// 13번 문제
Option Explicit
Option Base 1
Dim i As Integer, j As Integer, k As Integer, Total As Integer
For i = 1 To 3
For j = 1 To 3
k = k + 2
c(i, j) = k
Next j
Next i
i = 1
Do
Total = Total + c(i, 3)
i = i + 1
Loop While i <= 3
14. 다음 프로그램의 결과를 출력하시오.
// 14번 문제
Option Explicit
value(k) = 2 ^ k
k = k + 1
Loop
value(3) = value(3) + value(2)
[예제 3-11] 주민등록번호에서 8번째 문자를 추출하여 성별을 출력하는 프로그램을 작성하시오.
strnum = "050101-1234567"
Print "성별="; "남"
Else
Print "성별="; "여"
End If
[문자열 함수]
Mid 함수 : string의 start로부터 length만큼의 숫자를 추출
연습문제2
1. 점수를 입력하여 70점 이상이면 합격, 70점 미만이면 불합격을 판정하는 프로그램을 작성하시오.
Private Sub Form_Load()
Print "점수 " + Str(jumsu) + "은 합격입니다."
Else
Print "점수 " + Str(jumsu) + "은 불합격입니다."
End If
End Sub
[실습2-12] 1부터 100까지 중에서 홀수만을 출력하는 프로그램을 작성하시오.
Option Explicit
Private Sub Form_Load()
If i Mod 2 = 1 Then
Print i
End If
i = i + 1
Loop
[실습2-13] 1부터 100까지 중에서 짝수만을 출력하는 프로그램을 작성하시오.
Option Explicit
Private Sub Form_Load()
If i Mod 2 = 0 Then
Print i
End If
i = i + 1
Loop While i <= 100
[실습2-14] 1부터 100까지 중에서 짝수만을 출력하는 프로그램을 작성하시오.
Option Explicit
Private Sub Form_Load()
If i Mod 2 = 0 Then
Print i
End If
i = i + 1
Loop
[실습2-15] 1부터 100까지 중에서 짝수만을 출력하는 프로그램을 작성하시오.
Option Explicit
Private Sub Form_Load()
If i Mod 2 = 0 Then
Print i
End If
i = i + 1
Loop Until i > 100
[실습2-16] 1부터 100까지 중에서 홀수만을 출력하는 프로그램을 작성하시오.
Option Explicit
Private Sub Form_Load()
If i Mod 2 = 1 Then
Print i
End If
i = i + 1
Wend
[실습2-17] 10명 학생의 점수의 평균을 구하는 프로그램을 작성하시오. (학생의 점수는 Rnd 함수를 이용하시오.)
Dim score(1 To 10) As Integer
Dim jumsu As Variant
For i = 1 To 10
score(i) = Int(100 * Rnd + 1)
Print score(i)
Next i
sum = sum + jumsu
Next
[실습2-18] 1부터 100까지 중에서 짝수의 합이 900을 넘으면 반복을 종료하는 프로그램을 작성하시오.
Private Sub Form_Load()
Dim total As Long
Do While i < 100
If i Mod 2 = 0 Then total = total + i
If total > 900 Then Exit Do
i = i + 1
Loop



q01.zip


Recent Comment