오늘은 프로그램에서 아주 필수적인 요소인 반복문에 대해 알아보겠습니다.
프로그램에서 ‘반복’은 없어서는 안될 중요한 구조입니다.
반복문이라는 것이 무엇일까요?
이름에서 알 수 있듯이 어떠한 동작(알고리즘)을 계속해서 반복하게 만드는 것입니다.
하지만 반복이라는 것이 멈추지 않고 계속해서 그 동작을 수행하고 있다면 어떻게 될까요?
사용자의 입장에서 볼 때 PC가 어떠한 동작을 계속해서 반복하고 있다면 그것은 오류가 됩니다. (무한루프)
계속해서 어떤 동작을 하고있으니 자원을 몽땅 끌어다 사용할테고 그러면 다른 작업을 할 수 없게 되는거죠.
이처럼 동작이 끝없이 반복되지 않도록 하려면 반복을 멈출 수 있는 ‘조건’을 걸어줘야해요.
랩뷰에는 두가지의 반복문이 있습니다.
for문과 while문.
왜 반복문이 두가지나 필요할까요? 이 두가지의 반복문은 무엇이 다를까요?
두 반복문은 동작을 멈추게 하는 ‘조건’이 다릅니다.
하나씩 더 자세하게 알아보도록 할게요.
while문
while문은 사용자가 걸어둔 조건이 참인 동안 계속해서 반복하는 구조입니다.
블록 다이어그램에서 함수패널을 열고 가장 앞에 있는 구조에서 while문을 꺼내보세요.
블록다이어그램에 하나의 박스가 생깁니다.
이 박스를 서브다이어그램이라 부르고 서브다이어그램 안에 있는 코드를 반복하게 돼요.
Ctrl + h를 누르면 화면 오른쪽 상단에 도움말이 나옵니다.
특정 조건이 발생할 때까지 서브다이어그램 내에서 코드를 반복합니다. while루프는 항상 한번 이상 반복됩니다.
축약하면 반복을 계속하다가 조건이 맞으면 정지한다는 것입니다.
서브다이어그램 안을 보면 반복터미널과 조건터미널이 있습니다.
반복터미널은 지금 반복을 몇회째 하고 있는지에 대한 index 번호를 뜻해요. 초기값은 0 부터 시작합니다.
조건터미널은 while문을 정지시키기 위한 터미널이에요.
불리언 타입을 입력 받고 기본값으로는 ‘참’값을 받았을 때 while문을 종료합니다.
조건터미널에서 마우스 우 클릭하여 ‘거짓’값을 입력 받았을 때 종료하도록 설정할 수도 있어요.
for문
for문도 조건을 건다는 점은 while문과 동일합니다.
하지만 for문의 조건은 참, 거짓으로 반복을 종료시키지 않고 몇번 반복할 것인지를 미리 지정해줘야 합니다.
‘지정된 수’가 for문의 정지 조건이고 지정된 수 만큼 반복하고 나면 for문이 종료됩니다.
서브다이아그램을 n번 실행합니다. 이 때 n은 카운트(N)터미널에 연결된 값입니다.
반복(i)터미널은 0부터 n-1범위의 현재 루프의 반복 수를 나타냅니다.
축약하자면 N터미널에 입력된 숫자만큼 반복한다는 것입니다.
for문에는 조건터미널 대신 카운터터미널이 있습니다.
카운터 터미널에서 마우스 우측 버튼을 클릭하고 상수 생성을 누르면 숫자를 입력할 수 있는 상수가 생깁니다.
여기에 들어가는 숫자만큼 반복하고 종료하게 됩니다.
만약 0이면 for문은 실행하지 않습니다.
for문에서도 while문 처럼 조건을 만들어 정지시킬 수 있습니다.
일정 수 만큼 반복하다 도중에 정지하고 for문을 빠져나갈 때 사용됩니다.
블록 다이어그램에서 for문을 선택(마우스로 서브다이어그램 가장자리를 누르면 선택됩니다. ppt처럼요!)하고 마우스 오른쪽을 눌러 조건터미널을 선택하면 while문과 동일한 조건터미널이 나타납니다.
조건터미널을 만들었을때는 for문의 카운터터미널의 수를 만족하거나 조건터미널의 조건을 만족하는 두 경우 중 하나라도 만족하게 되면 정지합니다.
실습을 해볼게요.
먼저 블록 다이어 그램에 for문을 하나 올립니다.
카운트 터미널에서 마우스 오른쪽을 클린한 뒤 상수생성을 눌러 숫자 입력을 만들고 숫자 5를 입력해 반복 횟수를 5회로 지정합니다.
그 다음 더하기 함수를 함수패널에서 꺼내 for문 안에 넣어주세요.
더하기 함수의 아래쪽 입력 부분에 마우스 오른쪽을 클릭한 뒤 상수생성을 눌러 숫자 입력을 하나 만듭니다.
거기에 숫자 1을 입력하세요.
나머지 하나의 입력에는 반복터미널을 입력시켜 주세요.
이렇게하면 for문이 반복하면서
반복터미널의 숫자 + 1 한 값이 계속해서 나오겠죠?
더하기 함수의 출력 부분의 값은 for문의 가장자리에 연결해주세요.
그럼 아래와 같이 for문 가장자리에 터널이 생깁니다.
터널에서 마우스 오른쪽을 클릭하고 생성 → 인디케이터를 눌러 배열 인디케이터를 만들어주세요.
저번 시간에 배웠습니다. 인디케이터는 결과값이 표시되는 창이에요!
아직 배우지 않았지만 배열은 문자, 숫자 등의 집합을 말합니다.
연결이 다 되었으면 아래와 같은 형태가 되고 실행 버튼이 깨져 있지 않아야 합니다.
실행 버튼이 깨져 있다면 어딘가 입력이 안되어 있다는 것이니 함수와 와이어를 잘 살펴보세요.
ctrl + E 를 눌러 프런트패널로 와주세요.
그럼 배열 인디케이터가 하나 있을텐데 배열 인디케이터의 가장 자리를 선택해주세요.
이 때 중요한 것은 위 사진의 오른쪽처럼 배열 안에 있는 원소가 아닌 배열 인디케이터를 선택해야 한다는 것.
선택 한뒤 배열 아래쪽을 적당히 잡아당겨서 배열 내의 원소들이 최소 5개는 보이게 해주세요.(지금 실습에 출력하는 숫자가 5개라서,,)
자 그럼 이제 ctrl + R을 눌러 코드를 실행합니다.
반복터미널의 초기 숫자 0에 +1한 값이 배열에 들어가고
그 다음은 반복터미널의 숫자가 1이니 1+1 값이 배열에 들어갑니다.
이어서 2+1, 3+1, 4+1한 값이 배열에 들어가고 마지막에 카운트 터미널이 5에 달했으니 코드가 정지됩니다.
for문이 돌아가며 나오는 결과값은 터널을 통해 배열 인디케이터로 출력됩니다.
이번에는 while문을 실습 해볼게요.
블록 다이어 그램에서 while 문을 올려놓고 함수 패널에서 더하기 함수와 '같음?' 함수를 올려 놓습니다.
같음 함수는 두 숫자 혹은 문자를 비교해서 값이 같으면 참을 값이 다르면 거짓을 출력하는 함수에요.
아까와 비슷하게 코딩합니다.
더하기 함수의 입력에 상수 1을 입력하고 나머지 입력에는 반복 터미널을 입력해 줍니다.
while문은 반복 횟수가 아닌 정지 조건이 필요하다고 했었죠?
더하기 함수의 나오는 출력 값을 같음 함수에 입력시키고 같음 함수의 나머지 입력에 상수 5를 입력합니다.
더하기 함수에서 출력된 값이 5가 아니면 while문이 한번 더 동작하고 5이면 정지하게끔 같음 함수의 출력값을 조건터미널에 입력합니다.
그리고 더하기 함수에서 나온 값을 배열에 입력해 결과값을 눈으로 보아야하니 더하기 함수의 출력값을 while문의 가장자리에 연결해주세요.
그런데 아까와 터널의 모양이 조금 다릅니다.
터널에는 '모드'가 있는데 반복문에서 출력된 값을 배열로 모두 표시할 것인지 아니면 마지막 반복문의 값만 출력할 것인지를 선택할 수 있어요.
for문에서는 기본 터널 값이 인덱스모드여서 배열로 출력이 되는 반면 while문은 마지막 값 모드여서 배열이 아니기 때문에 모양이 다릅니다.
터널을 선택하고 마우스 우측 버튼을 눌러 터널 모드를 인덱스 모드로 변경해주세요.
그런 다음 for문과 동일한 방법으로 배열 인디케이터를 만듭니다.
다 끝이나면 아래와 같은 모양이 되고 실행버튼이 깨지지 않아야 합니다.
프런트패널로 돌아와 while문에서 출력되는 배열 인디케이터를 for문처럼 길게 늘리고 코드를 실행해보세요.
코드가 실행되면 이렇게 결과값이 출력됩니다.
그런데 for문과 while문의 결과값이 동일합니다.
그럼 for문이랑 while문이랑 뭐가 다른거야? 라는 의문이 생기는데요.
실습을 조금 더 해볼게요.
for문의 반복 터미널은 0으로 바꾸고 while문의 더하기 함수에서 더하기 상수 1을 5로 바꿉니다.
for문은 반복을 0회로 설정했으니 반복문이 실행되지 않을테지만 while문은 어떨까요?
코드를 실행하여 결과값을 보면 아래처럼 결과값이 나옵니다.
while문이 최초 실행 될 때에도 서브다이어그램 내의 코드를 수행해서 배열 인디케이터에 결과값 5가 들어가 있습니다.
while문은 for문과 다르게 코드를 무조건 1회는 실행하는 구조라는 것을 알 수 있어요.
while문은 랩뷰에서 프로그램이 정지되기 전까지 계속해서 반복하도록 하는 역할을 합니다.
최초 한번!은 실행해야 정지 조건이 들어오기 전까지 어떤 동작을 수행할 수 있으니까요.
이렇게 랩뷰의 반복문을 알아보았습니다.
반복문은 앞서 설명한 것처럼 프로그램에서 필수적인 요소이니 많이 실습해보시면 되겠습니다.
다음 시간에는 배열에 대해 알아보고 배열 함수는 어떤 것이 있는지 공부해 보겠습니다.
'LabVIEW' 카테고리의 다른 글
[LabVIEW 강의]_3강 랩뷰의 배열 (0) | 2019.09.25 |
---|---|
[LabVIEW 강의]_1강 랩뷰의 프런트패널과 블록다이어그램 (0) | 2019.09.07 |
[LabVIEW 강의]_0강 랩뷰는 무엇이고 어디에 쓰이나요? (0) | 2019.09.06 |