루프와 함께 배열 다루기

    반응형

    이번 강의에서는 루프와 함께 배열을 다루는 방법에 대해서 알아보도록 하겠습니다. 대표적으로 꼭 알아야 할 내용은 오토인덱싱(Auto Indexing)입니다. 

     

      1. 오토 인덱싱

      For 루프나 While 루프에 배열을 연결하면 기본적으로 오토인덱싱이 활성화됩니다. 오토인덱싱은 루프에 배열을 연결했을 때 루프가 돌면서 배열의 원소를 자동으로 하나씩 꺼내거나 추가하는 것을 말합니다.  

      아래와 같이 오토인덱싱 활성화/비활성화는 루프에 연결된 터미널의 모양으로 알 수 있습니다. 오토인덱싱이 활성화된 경우 터미널에 대괄호[]모양이 나타나며, 비활성화된 경우 터미널의 속이 모두 파란색으로 채워집니다. 오토인덱싱 활성화/비활성화는 터미널을 오른쪽 클릭하여 Disable Indexing 또는 Enable Indexing을 선택하여 변경할 수 있습니다.

      1) 루프의 입력으로 배열의 오토인덱싱을 사용할 경우

      아래와 같이 루프의 입력으로 배열을 연결하여 오토인덱싱을 사용할 경우, 루프의 첫 번째 실행에서는 배열의 인덱스가 0인 원소가 출력(원소:1)되고, 두 번째 실행에서는 배열의 인덱스가 1인 원소가 출력(원소:2)됩니다. 루프의 반복 횟수는 오토인덱싱이 연결된 배열의 크기로 지정됩니다. 오토인덱싱을 비활성화할 경우, 루프의 반복 횟수를 따로 입력해 주어야 합니다.

      오토인덱싱 활성화(좌) / 오토인덱싱 비활성화(우)

       - For 루프의 반복횟수 결정 우선순위

      1. For 루프의 루프 카운트 터미널
      2. 오토인덱싱이 활성화된 경우 배열의 크기가 가장 작은 오토인덱싱 배열의 크기

      아래처럼 루프카운트 터미널(N)이 연결된 경우 루프카운트 터미널에 연결된 횟수만큼 루프가 반복합니다.

      또는 아래처럼 루프카운트 터미널이 연결되지 않은 경우, 오토인덱싱이 활성화된 입력 배열 중에서 배열의 크기가 가장 작은 배열의 배열의 크기만큼 루프가 반복됩니다. 개념은 쉬운데 말이 어렵네요.

       - 2차원 배열의 오토인덱싱

      1차원 배열을 오토인덱싱할 경우 각 원소가 순서대로 출력되지만, 2차원 배열에서는 배열의 행이 순서대로 출력됩니다. 아래 그림을 보도록 하겠습니다.

       

      2차원 배열을 루프에서 배열의 열을 순서대로 사용하기 위해서는 오토인덱싱 입력 전에 배열 뒤집기를 연결해 주거나, 오토인덱싱을 비활성화하고 배열 인덱스 함수를 사용하여 순서대로 출력하게 만들어야 합니다. 아무래도 배열 뒤집기 함수를 이용하는 게 간편합니다.

      2차원 배열의 열을 순서대로 출력하기 - 배열 뒤집기를 사용
      2차원 배열의 열을 순서대로 출력하기 - 배열 인덱스 사용

      배열 인덱스를 사용할 때 배열 인덱스의 열(col)대신 행(row)에 i 를 연결하면, 오토인덱싱을 사용한 것과 같은 결과가 출력됩니다.

       - 3차원 이상 배열의 오토인덱싱

      3차원 이상이 되는 배열의 오토인덱싱은 마찬가지로 차원이 높은 배열부터 순서대로 출력됩니다. 3차원 배열을 루프에 연결하면 3번째 차원인 페이지(Page)가 인덱싱되어 2차원 배열(행열)이 순서대로 출력됩니다.

      2) 루프의 출력으로 오토인덱싱을 사용하는 경우

      루프의 출력으로 오토인덱싱을 사용하면 배열 만들기(Build Array)함수를 사용하는 것과 비슷한 결과를 얻을 수 있습니다. 오토인덱싱을 사용하여 쌓는 배열의 차원을 늘릴수도 있고, 차원을 늘리지 않고 배열 아래에 추가할 수도 있습니다. 

      출력 터미널을 오른쪽 클릭하여 터널 모드(Tunnel Mode)를 선택하면 세 가지 모드를 선택할 수 있습니다.

      1. Last Value : 루프가 모두 반복되고 나서 맨 마지막 값이 출력됩니다. 예제에서는 루프가 4번 반복되므로 i는 0,1,2,3의 값이 차례로 출력되므로 마지막 값인 3이 출력됩니다.
      2. Indexing : 루프가 반복되는 동안의 출력값이 배열로 만들어집니다. 원소가 [0,1,2,3]인 1차원 배열이 출력됩니다.
      3. Concatenating : 배열 만들기 함수의 '입력 연결'과 같은 것으로 배열 아래에 배열이 추가됩니다. 예제에서는 배열이 아닌 상수가 연결되어 있는데, 이 경우 3번은 사용할 수 없습니다. (배열이 아니므로)

       

      1차원 배열을 4번 반복하여 출력하는 경우 각 모드에 대한 출력값은 아래와 같습니다. 어렵지 않죠?


      2. 2차원 배열의 모든 원소를 하나씩 빼서 +2 해보기

      아래와 같은 2차원 배열에 각 원소에 2를 더해보겠습니다.

      For 루프를 사용할 때에는 루프를 총 2개 사용하면 됩니다. 첫 번째 루프에서는 행을 순서대로 출력하고, 그 안의 루프에서는 행의 원소를 순서대로 출력하여 +2를 한 후에 다시 행으로 쌓고, 다시 행을 쌓아 2차원 배열로 만들어 출력하면 됩니다.

      숫자형 배열을 사용하는 경우 이 작업을 간단하게 더하기 함수에 배열과 원소를 연결하여 같은 결과를 얻을 수 있습니다. 배열에 사칙연산 함수에 원소 하나를 연결하는 경우, 배열의 모든 원소에 사칙연산이 적용됩니다. 또는 더하기 함수에 배열과 배열을 연결하는 경우 두 배열의 같은 인덱스의 값끼리 사칙연산이 적용되어 출력됩니다. 


      3. 시프트 레지스터를 이용하여 배열 쌓기

      루프를 사용할 경우 시프트 레지스터와 배열 만들기 함수를 이용하여 배열을 쌓을 수 있습니다. 아래 예제는 2차원 배열을 초기화하고, 1차원 배열을 루프를 반복하면서 쌓아 2차원 배열로 만드는 코드입니다. 루프의 반복 횟수 카운트 i에 따른 시프트 레지스터의 출력/저장값을 확인해 보세요.

      아래 예제는 특히 XY 그래프를 만드는 데 많이 사용하는 구조이므로, 익숙해지시면 좋겠습니다.

       

      다음 시간에는 배열을 이용하여 XY 그래프를 만드는 방법에 대해서 알아보도록 하겠습니다.

      'LabVIEW 랩뷰 > Labview 랩뷰 강의' 카테고리의 다른 글

      SubVI 란 무엇인가  (0) 2021.01.15
      XY 그래프 만들기 기초  (0) 2021.01.14
      랩뷰 배열 다루기  (0) 2021.01.11
      랩뷰의 루프(Loop) 사용하기  (4) 2021.01.10
      경합조건 : 랩뷰의 코드 실행 순서  (0) 2021.01.08

      댓글

      Designed by JB FACTORY