본문 바로가기

창고/Backup_2013_0121

2010년 전국 - 9급 프로그래밍언어론 VB 풀이

반응형

어떤 언어를 공부하면서 먼가 목적이 있어야 하므로-ㅅ-
프로그래밍언어론의 기출문제가지고 Visual Basic 공부를 해보도록 하겠습니다.

일단 목푠 문제를 풀수있다!! 정도가 되겠네요 =ㅁ=ㅎㅎ

그럼
준비물 : Visual Basic 6.0 (알아서들-_-);;
대상    : 기본적인 언어를 익히신분 ( C나 JAVA 등으로 함수나 루프는 만들줄안다!! )

때가 어느땐데 6.0이냐!! 라고 하실수 있지만;;
국가고시 VB 문제는 아직도 이거 기준입니다;;

머 그리고 익혀두면 Excel 과 Word 에 빌트인 되어 있는 VBA 도 잘쓸수 있으므로 ~
익힌다고 해서 나쁜건 아닙니다~

또 그러니 VB 6.0 이 없으신분은 MS Office 를 이용하셔도 되구요~ 그 방법은 또 다른 글에서 갈쳐드리도록 하죠^^

자 그럼 첨부파일의 [1번문제]부터 가도록 하겠습니다.

.. 문제는 잘읽으시고-ㅁ-;;ㅎㅎ

메뉴편집기에서 입력하는 내용에 관한 문제입니다.
VB6.0 을 설치하셨다면~
이내용을 따라하시면 문제를 푸실수 있을겁니다~

즉, index 내용은 시각적순서가 아닌 메뉴의 구분을 위한 키값인거죠~
위 ppt 파일을 꼭 한번 따라해보셔서 메뉴추가 관련 문제는 모두 푸실수 있길바랍니다.

그럼 다음문제인 [16번 문제]~

이미지를 시간이 지남 에 따라 오른쪽으로 조금씩 움직이고 싶을때 필요한 컨트롤의 속성을 묻는 문제입니다.
먼저 용어를 살펴 보겠습니다. 프로그램을 한번도 해보지 않았다면 이벤트 라는게 무엇인지 궁금할것 같네요.
여자친구가 생일이되면 해주는 이벤트? 이런거? -ㅁ-;;
음 ==;;  살펴봅시다~

이벤트라는 것은 컴퓨터가 감지할수 있는 일종의 신호입니다.
가령 버튼을 "누른다" 던지, 텍스트 박스에 글을 "입력한다" 등이 이벤트에 해당하지요.
이 문제에서는 일정한 "시간이 지난다 " 라는것을 알려줄수 있는 이벤트가 필요한데~
이건 사용자가 입력하는게 아닌 특정 컨트롤러에서 지정한 시간마다 컴퓨터에게 신호를 보내게 하는겁니다.
이 컨트롤러가 "Timer" 이고 특정한 시간이 Interval 속성입니다.

그럼 실제로 특정 시간마다 이미지가 움직이는 프로그램을 만들어보겠습니다.
1. 먼저 Visual Basic 6.0 을 실행합니다.
2. 왼쪽의 도구상자 ( 조그마한 아이콘들이 모여져 있는 도킹창) 에서 PictureBox 아이콘을 클릭하고 중앙의 Form패널의 적당한곳에 그립니다.
3. 방금 그린 PictureBox를 클릭하고 속성창의 Picture 항목을 보면 오른쪽에 ... 버튼이 보입니다. 이버튼을 클릭하면 파일오픈창이 뜨는데 적당한 그림을 선택해줍니다.
4. PictureBox 에 선택한 그림이 나타납니다.
5. 왼쪽의 도구상자에서 시계모양의 Timer 아이콘을 클릭하여 Form 패널을 클릭합니다.
6. Form패널을 더블클릭하여 코드창을 불러옵니다.
7. 코드창에는
Private Sub Form_Load()
End Sub
이렇게 써있는데 안쪽에
Timer1.Interval = 1000
즉,
Private Sub Form_Load()
Timer1.Interval = 1000
End Sub
를 써줍니다.
의미는 아까 추가한 Timer 컨트롤러의 Interval 속성 (interval 이벤트를 일으키는 주기 )을 1000 ms 초 한다는 이야기입니다. 1000ms 는 1초 입니다.

8. 폼패널의 아까 추가한 Timer 컨트롤을 더블클릭합니다.
9. 코드창에
Private Sub Timer1_Timer()
Picture1.Left = Picture1.Left + 50
End Sub
를 써줍니다.
Timer 의 Interval 시간마다 이벤트가 발생하고 그때마다 위에 써준코드를 실행하게 됩니다.
실행내용은 Picutre1 의 왼쪽 좌표를 50씩 증가해라이지요~
바로~ 오른쪽으로 50씩 이동하게 됩니다.
혹시나 == 먼말이여-_- ==  라고 하신분들을 위해 완성된 소스와 exe 파일을 첨부합니다^^

[17번 문제]
가장 많이 나오는 문제 유형이라고 할수 있는 코드 문제입니다.
소스를 주고 결과를 맞추라는거지요.
17번같은 경우에는 VB 에서 변수의 scope 와 함수의 인수 전달방식을 물어보는거라 할수 있습니다.
전체적인 내용은 단순합니다.
메인에서 변수를 하나 선언하고 함수를 호출하는데 함수에서 전달받은 값을 2배 합니다.
그리고 메인에서 다시 그값을 찍는거지요.
함수 전달에서 call by value 인지, call by reference 인지를 안다면 답은 금방 나옵니다.
위말을 풀어쓰면, 함수를 불렀을때 넘겨준 a값이 메인으로 그대로 전달되는지 그렇지 않은지 를 아는겁니다.
VB 에서는 메인으로 그대로 전달됩니다-_-ㅎㅎ
답은 그러니 4번이겠죠?

[18번 문제]
17번하고 비슷하지만 이번엔 함수가 아닌 Static 이라는 변수의 의미를 묻는것입니다.
일반적인 Dim 변수는 함수가 소멸하면 ( 문제에서는 클릭이후 ) 변수값도 사라집니다.
하지만 Static 으로 선언된 변수는 함수가 소멸해도 메모리에 계속 남아있습니다. c 의 static 하고 동일합니다.

[19번 문제]
코딩을 해보지 않은사람에게 가장 어려운 프로그램 로직 문제입니다.
하지만 걱정하지 않아도 되는게 9급 시험에서는 항상 그게그거-_-인걸 물어보기 때문이죠.
나올때마다 확실히 익히고 외워(?) 두면 나중에 계속 써먹을수가 있으니
이번에 잘익혀 두시기 바랍니다.^^

문제는 a 라는 10* 10 배열에 값을
 1  2  3  4  5  6  7  8  9  10
 11 ..생략                 
               ..  99  100
이렇게 넣을려고 하는겁니다.
두개의 for 반복문을 이용하고 x,y 좌표를 이용해서 해당되는곳의 값을 만들어 내면 됩니다.
세개의 변수를 사용하네요
i = 1부터 100까지 증가 배열에 들어갈 값
j 배열의 y 좌표
k 배열의 x 좌표
을 나타냅니다.

문제에 나온 예를 보면
a(1,1) = 1
a(1,2) = 2
a(1,10) = 10
...
a(2,2) = 12
..
a(10,10) = 100
즉,
y 좌표값이 증가할때 1의자리 증가
x 좌표값이 증가할때 10의 자리 증가 로 정리할수 있습니다.
그럼 들어가는 1~100 값을 이용하여 x,y 좌표를 결정한다고 하면
x 좌표는 10으로 나눈 몫
그리고 y 좌표는 10으로 나눈 나머지와 관계있는것을 알수가 있습니다.
13 이 들어갈 자리는
13 / 10 = 1
13 % 10 = 3
(1,3) 은 당연히 아니죠-ㅅ-?
(2,3) 이 되겠네요 그럼 식을 정리해보면
i(들어갈값) / 10 +1 = x 좌표 = j
i % 10 = y 좌표 = k
가 되는거지요~

하지만 문제가 있습니다. 10의 경우
10 / 10 = 1 이지만
10 % 10 = 0 이 되버리네요;; 10 이 나와야하는데말이죠;;

그래서 살짝 보기를 보면 힌트를 얻을수 있습니다.
4번보기대로 하면
( 10 - 1 ) % 10 + 1 = 10 !!  값이 나옵니다!
아까 13을 넣으면
(13-1) % 10 + 1= 3 제대로 나오네요
참쉽죠? ㅎㅎ

이렇게 보기가 쉽게 나올때도 있지만 보통 거의 다 찾아도
함수하나 (여기서는 Int) 가 무슨의민줄 몰라서 못풀수도 있습니다.
그러므로 저런 함수도 모두 알아두면 편리합니다.
여기서 Int 는 내림 정수값을 나타냅니다.
즉 Int(1.3) 은 1로 바꿔주는 역할을 하는거죠
흔히 아는 반올림 함수는 round 입니다. round(1.5) 는 2로 바꿔주는 역할을 합니다.

그리고..
이런게 눈에 안들어올때는 밑에 보기에 그냥 다 넣어봐서 찾는방법도 있습니다;;

이상 2010년 전국 9급 프로그래밍언어론 VB 문제풀이편을 마치겠습니다(__)

다음엔 2009년 전국 9급 프로그래밍언어론 VB 문제를 풀어보겠습니다^-^/
반응형