Labview: 반복문 (4)

4. 쉬프트 레지스터


랩뷰의 반복문에서 이전 연산의 결과를 참조할 수 있는 방법이 없을까??
쉬프트 레지스터가 이런 의문을 해결해 줄 수 있다.


쉬프트 레지스터는 반복 구조를 나타내는 사각형의 왼쪽이나 오른쪽에 마우스 우클릭을 해서 추가할 수 있다.

쉬프트 레지스터를 이용하여 다음과 같은 프로그램을 작성해보자.


그리고 '입력'으로 크기가 5이고 원소로 {1, 2, 3, 4, 5}를 갖는 배열을 두었을 때,


이 프로그램의 결과인 '출력'은 1부터 5까지의 합인 15가 출력이 될 것이다.


< 이렇게 말이다. ㅎㅎㅎ >

몇 가지 눈에 거슬리는 부분에 대해서는 좀 있다가 이야기하는 것으로 하고,
쉬프트 레지스터에 의한 연산 과정만을 살펴보자면,
프로그램이 실행되면 먼저 입력 배열의 첫번째 원소인 1이 반복문으로 들어와서
쉬프트 레지스터를 통해 이전 연산의 결과 값 (첫 번째 반복이므로 0)과 더하기 연산을 진행한다.
그 다음 반복에서 오토 인덱싱 기능에 따라 입력의 두번째 원소인 2가 입력되어
쉬프트 레지스터를 통해 이전 연산의 결과 값인 1과 마찬가지로 더하기 연산을 진행한다.
반복된 연산 결과는 결국 입력 배열의 모든 원소들의 합을 구하는 결과로 나타난다.

여기서 눈에 거슬리는 것 중 하나는 'For 반복인데, 반복 터미널에 값이 없다.' 라는 점이다.
랩뷰에서는 For 반복문에 배열을 오토 인덱싱으로 입력할 때, 반복의 횟수를 지정하지 않더라도,
입력 배열의 크기만큼 반복문이 연산된다.
따라서, 이 프로그램에서도 반복의 횟수를 지정하지 않았지만 입력 배열의 크기 만큼 반복이 진행되었다.

두번째로, C나 Java의 프로그래밍 경험을 가진 사람들은 거의 무의식적으로 거슬릴 것이라 생각하는데,
Temporary하게 사용되는 쉬프트 레지스터에 초기값을 주지 않아도 되는가? 라는 점이다.

위의 결과를 통해 추측할 수 있듯이, 쉬프트 레지스터는 초기 값으로 '0'을 가진다는 것을 예상할 수 있다.
그런데, 동일한 프로그램을 연속적으로 실행했을 경우에도 항상 '초기화'를 해줄 것인지는 의심이 간다.
가장 좋은 방법은 테스트 해보는 것!!



.
.
.
.
계속 실행할수록 정확히 '15'만큼 결과가 늘어나는 것을 확인할 수 있다.
이것을 통해 쉬프트 레지스터는 프로그램의 실행과 초기화와는 관계가 없다는 것을 확인할 수 있다.
다시 말해, 내가 몇 번을 실행하든 같은 결과를 얻기 위해서는 초기화가 필요하다.


이번에는 쉬프트 레지스터 앞에 '0'이라는 상수 값을 연결해주었다.



쉬프트 레지스터에 초기화가 정상적으로 되고 있는 것을 확인할 수 있다.


다음에는 반복문 만큼이나 프로그래밍에 중요한 조건문을 공부해보자... ㅎㅎㅎ



요약
- 반복문에서 이전 연산의 결과는 쉬프트 레지스터를 통해 참조할 수 있다.
- 쉬프트 레지스터는 프로그램을 실행할 때 초기화 해주지 않는다.



Share:
spacer

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.