C Visual Basic Programming - 조건문과 루프

Cugain 2007.02.21 11:33 조회 수 : 325 추천:100

sitelink1 http://myhome.hanafos.com/~log0/visual_basic.htm 
sitelink2  
extra_vars5  
extra_vars6  

 

비베강좌(5)<--조건문과루프

 

 


 

 

 

 


비베 한달이면 한국불패만큼 한다. -5 . 조건문과 루프-

품을 꾸미는 일은 무척 재밌는 작업입니다. 오늘은 좀 재미없는 시간이될거 같네요.

하지만 쓴약이 몸에 좋은 법이니까 잘읽어 주세요. 조건문이 뭐라는것에 대해서는 이미 다들 알고 계실것입니다.

하지만 모르고 계신분을 위해 설명을 해드리겠습니다. 식의 값에 따라 문 그룹을 조건부로 실행합니다.

구문

If condition Then [statement] [Else elsestatement]

또는, 다음과 같이 블록 형태의 구문을 사용할 수 있습니다.

If condition Then
[statement]
[ElseIf condition -n Then
[elseifstatement]...
[Else]
[elsestatement]
End If

라고 비베도움말에 나와 있는데요.

무슨말이냐 하면 if 만약이란 뜻이죠.

then그러하면 이란 뜻입니다.

else 그렇지 않다면의 뜻입니다. 그렇다면

IF A<10 THEN
A=A+1
ELSE
A=A-1
END IF

이소스의 의미는 A값이 10보다 작다면 A값을 1증가 시켜주고 그렇지 않다면 1을 감소 시켜 주라는 뜻이됩니다.

더욱 자세한 사항은 도움말을 참조하시고요. 이번에는 도움말에 없는 내용을 설명 드리겠습니다.

IF A>10 AND B>10 THEN A=A+1

이라는 문장의 의미는 도움말에 나와 있지는 않지만 흔히 사용하는 문법입니다.

이것은 말그대로 A가 10보다 크고 그리고 B가 10보다 클때 A값을 1증가 시키라는 것이죠.

A>10, B>10 두조건을 모두 만족시켜야 A=A+1을 합니다.

IF A>10 OR B>10 THEN A=A+1

이문장의 의미는 A값이 10보다 크던지 또는 B값이 10보다 크다면 A값을1증가시키라는 의미입니다.

말그대로 이죠. A>10,B>10 이들 중 하나만 성립해도 A=A+1을 실행합니다.

IF만약으로 THEN 이면으로 ELSE를 그렇지 않으면으로 바꾸어 그대로 읽어주면 소스의 의미를 알 수 있을 것입니다.

여기서 그러면 어떻게 컴퓨터가 조건문을 수행하는지 원론적인 말씀을 드리겠습니다.

만약에 A=3이고 B=4일때 A>B 했다면 이문장은 틀린문장입니다.

왜냐하면 3>4 라고 한것과 같기 때문이죠.

이럴때 컴퓨터는 A>B대시 FALSE값을 냅니다.

C=A>B 라고 하고 C를 찍어보면 PRINT C 를 해보면요.

c값은 0임을 알수 있습니다.

이번에는 C=A < B 로하고 C를 찍어보면 C값은 -1 입니다.

-1과 1은 TRUE값을 의미하기 때문이죠.

A=8
IF -1 THEN A=A+1
PRINT A

라고 했다면 A값으로 9가 찍히며(-1대신 1을 해도 마찬가지임)

A=8
IF 0 THEN A=A+1
PRINT A

라고 했다면 A값은 8이 찍힙니다.

IF (상태) THEN (구문)

일때 상태가 1(TRUE)이냐 0(FALSE)이냐에 따라 구문을 실행하기도 하고 실행하지 않기도 합니다.

그리고 AND와 OR은 +, -, *, /, 등과 같은 연산자로써 논리 연산을 합니다.

AND연산을 하는 회로를 설명하자면 스위치가 두개이상있는 직렬 회로를 생각하시면 됩니다.

어린시절 전지와 전선, 스위치, 꼬마전구등으로 회로를 만들어 본적이 있으실겁니다.

이때 스위치를 닫으면 전구에 불이 들어오고 열면 전구에 불이 꺼집니다.

이회로에 직렬로 스위치를 하나더 붙여서는 실험을 해보면 스위치 두개가 모두 닫혀 있지 않는한 전구에는 불이 오지 않는 것을

알 수 있는데요. AND연산도 이와 같습니다.

1 AND 1 만이 1이며

1 AND 0, 0 AND 1, 0 AND 0은 모두 0 입니다.

OR연산자는 역시 어린시절 만들어본 회로에 병렬로 스위치를 하나더 연결 한것과 같은 것인데요.

이때는 스위치중 어느 하나만 닫혀 있어도 꼬마 전구에 불이 옵니다.

1 OR 0, 0 OR 1 그리고 1 OR 1은 1이며 0 OR 0 은 0 입니다.

이런 이유로 A=3이고 B=14일때 A>10은 0 이고 B>10 은 1이며 A>10 AND B>10 은 0이며 A>10 OR B>10 은 1인 것입니다.

IF~ THEN ~ ELSE ~ 문을 이것으로 대충 설명을 마치고 IF~ THEN~ ELSE문을 사용할때 유의 사항을 몇가지 설명하겠습니다.

1. 부등호를 정확하게 사용하라.

'>=' 을 써야 할자리에 '>'을 '<='을 써야하는데 '<' 을 사용하므로써 숫자를 빠뜨리는 일이 없어야 겠습니다.

배열등을 사용할때 이런 실수를 하면 한칸 모자름에러(OFF-BY-ONE)를 일으킬수 있습니다.

2. 정상적인 것들을 앞에다 모으고 비정상적인 것들을 뒤에 모아라.

만약 많은 조건을 처리 하는 상황에서 순서에 대한 규칙없이 조건을 만나는 그때 그때 조건문을 사용한다면

코드의 구조성이 떨어집니다. 이럴때는 정상적인 경우는 앞에 모으고 비정상적인 경우는 뒤에 모으는 것이 좋습니다.

OpenFile( InputFile,Status)
if Status < Error then
ReadFile( InputFiles,FileData, Status ) '정상
if Status=Success then
   SummanizeFileData( FileData, SummaryData, Status ) '정상
 if Status <> Error then
     printSummary( SummaryData ) '정상
     SaveSummaryData( SummaryData )
     if Status <> Error then
       UpdataAllAccount '정상
       EraseUndoFile
       ErrorType = None
     else
       ErrorType=SummarySaveError '비정상
     end if
 else
ErrorType=DataSummaryError '비정상
 end if
else
     ErrorType=FileReadError '비정상
end if
else
Errortype=FileOpenError '비정상
end if

이렇게 규칙을 적용하면 코드를 이해하기 쉽습니다. 아래는 좋지 못한 예입니다.

OpenFile( InputFile, Status )
if Status=Error then
ErrorType=FileOpenError '비정상
else
ReadFile( InputFile,FileData, Status) '정상
if Status=Success then
   SummarizeFileData( FileData,SummaryData,Status) '정상
   if Status=Error then
     ErrorType=DatasummaryError '비정상
   else
     PrintSummary( SummaryData) '정상
     SaveSummaryData(SummaryData,Status)
     if Status=Error then
       ErrorType=SummarySaveError '비정상
     else
       UpdataAllAcount '정상
       EraseUndoFile
       ErrorType=None
     end if
   end if
 else
   ErrorType=FileReadError '비정상
 end if
end if

않좋은 예가 되겠습니다.

코드를 짧게 만드는 것보다 약간 길이가 길어지더라도 분석하기 쉬운 구조를 가지게 코딩을 하는 것이 더 좋습니다.

위 예는 '프로그래밍 완정정복(STEVE McCONNELL)-역)1996년 높이깊이사' 에서 인용합니다.

내일은 루프에 대해 공부하겠습니다. 그리고 위의 소스는 전혀 이해할 필요가 없습니다.

단지 이해를 돕기위한 예입니다. 하지만 찬찬히 보시면 알 수 있습니다.

그리고 정상,비정상은 코드가 좋고 나쁨을 말하는 것이 아니라

프로그램이 정상적으로 작동 할때 발생하는 상태(contision)와 비정상(ERROR)적으로 작동하는 상태를 의미 합니다.


--------------------------------------------------------------------------------