배열변수는 동일한 성격을 가지는 여러 개의 값을 하나의 변수에 저장하는 구조입니다.
여러 개의 값을 하나의 변수에 저장하기 위해서는 공간을 여러개로 나누어야 하는데
이 분할된 공간들을 요소(방)라고 합니다.
각 요소(방)들은 0으로 시작해 순자적으로 1씩 증가하는 정수형 고유 번호를 가지게 되고
고유한 번호로 배열 내의 특정 요소(방)를 지정해 값을 저장하거나 변경할 수 있습니다.
1.
선언방법
Array : 변수명[방갯수](초기값), 변수명[방갯수](초기값);
배열변수의 선언 키워드는 Array, Arrays 입니다.
각 키워드는 사용상 차이는 없습니다. 기호에 따라 사용하시면 됩니다.
Array 뒤에 콜론(:)을 표시하고 변수들을 지정한 후 세미콜론(;)으로 마무리를 합니다.
예스랭귀지에서 콜론( : )은 선언시에만 사용하며 선언의 시작을 의미하며
변수명[크기](초기값) 형태로 지정하며 여러개 만드는 경우에는 콤마(,) 구분해 나열합니다.
문장의 마무리는 항상 세미콜론(;)입니다.
Array : value[10](0), STR[10](""), Cond[10](false);
value는 10개의 공간을 가지고 모두 초기값이 0인 숫자를 저장받는 배열변수
STR은 10개의 공간을 가지고 모두 초기값이 ""인 문자를 저장받는 배열변수
Cond는 10개의 공간을 가지고 모두 초기값이 True인 논리값을 저장받는 배열변수
C
복사
2.
일반변수와 배열변수의 차이
•
일반변수
일반변수는 봉마다 한개의 공간을 가지고 하나의 값만 저장이 가능한 변수입니다.
이전값을 참조할 때는 변수명 뒤에 [ ]를 붙이고 봉수를 지정합니다.
value[3] : value의 3봉전값
일반변수는 값을 여러개 저장하려면 필요한 만큼 변수를 선언해서 사용해야 합니다.
만약 값을 100개를 저장할 필요가 있는 상황이라면
아래와 같이 변수도 100개를 선언하고 사용해야 하므로
선언 과정에 시간이 걸리고 힘이 들게 됩니다.
var : A0(0), A1(0), A2(0), A3(0), A4(0),
A5(0), A6(0),A7(0) ,A8(0) ,A9(0),
A10(0), A11(0), A12(0), A13(0), A14(0),
A15(0), A16(0),A17(0) ,A18(0), A19(0),
A20(0), A21(0), A22(0), A23(0), A24(0),
A25(0), A26(0),A27(0) ,A28(0), A29(0),
A30(),....................................., A99(0);
C
복사
•
배열변수
배열변수로 선언이 되면 봉마다 지정한 갯수만큼 방이 만들어 지고
각 방을 지정해서 값을 저장할 수 있는 변수가 됩니다.
배열변수는 변수명 뒤에 [ ]를 붙이고 방번호를 지정하며
이전값 참조는 다시 그 뒤에 [ ]를 붙이고 봉수를 지정합니다.
value[0][3] : value 0번방의 3봉전 값
value[2][5] : value 2번방의 5봉전 값
값을 100개를 저장할 필요가 있는 상황이라면
아래와 같이 간단히 방의 갯수만 100개로 지정해 주면 됩니다.
Array : A[100](0);
C
복사
3.
배열변수를 사용했을 때 장점
배열변수를 사용하면 하나의 변수에 여러 값들을 저장하고 사용할 수 있기 때문에
코드의 가독성이 높아지고 변수의 수를 줄여주고 연산이 편리하게 됩니다.
배열변수가 이런 장점을 가질 수 있는 이유는 정수형 고유 번호로 각 방을 지정해서
값을 관리할 수 있기 때문에 For/while과 같은 루프문과 함께 사용을 할 수 있기 때문입니다.
배열선언 자체로는 일반변수 대비 선언의 수를 줄이는 이점만 있습니다.
루프문과 같이 사용해야 식을 간결하게 만들어 가독성을 높일 수 있습니다.
예를 들어 최근 20개의 양봉의 종가를 저장을 해야 하는 경우
일반변수를 사용하면 아래와 같이 작성이 됩니다.
//변수 20개 선언
var : A0(0),A1(0),A2(0),A3(0),A4(0),A5(0),A6(0),A7(0),A8(0),A9(0);
var : A10(0),A11(0),A12(0),A13(0),A14(0),A15(0),A16(0),A17(0),A18(0),A19(0);
var : mav(0);
//양봉 발생
if Close > Open Then
{
//각 이름별로 순차적으로 이전값을 가질 수 있게
//값을 옮기는 내용을 작성
A19 = A18; //A19의 값을 A18의 값으로 변경
A18 = A17; //A18의 값을 A17의 값으로 변경
A17 = A16; //A17의 값을 A16의 값으로 변경
A16 = A15; //A16의 값을 A15의 값으로 변경
A15 = A14; //A15의 값을 A14의 값으로 변경
A14 = A13; //A14의 값을 A13의 값으로 변경
A13 = A12; //A13의 값을 A12의 값으로 변경
A12 = A11; //A12의 값을 A11의 값으로 변경
A11 = A10; //A11의 값을 A10의 값으로 변경
A10 = A9; //A10의 값을 A9의 값으로 변경
A9 = A8; //A9의 값을 A8의 값으로 변경
A8 = A7; //A8의 값을 A7의 값으로 변경
A7 = A6; //A7의 값을 A6의 값으로 변경
A6 = A5; //A6의 값을 A5의 값으로 변경
A5 = A4; //A5의 값을 A4의 값으로 변경
A4 = A3; //A4의 값을 A3의 값으로 변경
A3 = A2; //A3의 값을 A2의 값으로 변경
A2 = A1; //A2의 값을 A1의 값으로 변경
A1 = A0; //A1의 값을 A0의 값으로 변경
//값을 순자적으로 옮긴 이후에 마지막에 최근값 저장
A0 = Close; //A0에 종가 저장
}
C
복사
먼저 20개의 변수를 선언해야 하며
양봉이 발생하면 A0을 시작으로 A19까지 최근순으로 값을 저장하기 위해
다음 이름의 변수에 값을 옮기는 내용도 각 변수 별로 작성을 해주어야 합니다.
또한 평균값을 계산하기 위해 각 변수를 합산하는 내용을 나열해서 작성해 주어야 합니다.
만약 20개가 아닌 40개를 저장한다면 그에 비례해서 변수 선언을 추가해 주어야 하고
값을 옮기는 문장도 늘어나게 됩니다.
하지만 위 내용을 배열변수를 처리하면 아래와 같이 작성됩니다.
//방을 20개 가지는 배열변수 하나만 선언
Array : A[20](0);
var : cnt(0),sum(0),mav(0);
//양봉 발생
if Close > Open Then
{
//for문을 이용해 배열방의 값을 다음방으로 옮김
for cnt = 19 downto 1
{
A[cnt] = A[cnt-1];
}
//A의 0번방에 현재봉 종가를 저장
A[0] = C;
}
C
복사
배열변수를 20개의 방을 가지는 변수로 선언합니다.
양봉이 발생하면 먼저 for문을 이용해 각 방의 값을 순차적으로 다음방으로 옮기고
마지막에 [0]번방에 가장 최근값이 저장하게 작성하면 됩니다.
일반변수를 사용하는 것보다 수식이 간결해 지게 되고
40개를 저장하게 변경을 해도 별도로 코딩의 늘어남이 없이 아래와 같이
배열변수 선언에 방갯수만 40으로 늘려주고 for문의 초기값만 39로 지정해 주면 됩니다.
또한 기본으로 제공되는 함수 중에는 배열변수 사용을 더욱 쉽게 하는 다양한 함수가 제공됩니다.
InsertArray함수를 이용하면 for문의 사용하지 않고 더욱 간결히 작성이 됩니다.
var : cnt(0);
Array : A[10](0);
//양봉 발생
if Close > Open Then
{
InsertArray(A,0,C);
}
C
복사
※ InsertArray(배열명, 방번호, 저장값)
지정한 배열의 특정방에 값을 삽입하는 함수로
특정방을 기준으로 값을 먼저 다음방으로 이동 시킨 후에 저장합니다.
4.
다차원 배열
다차원 배열은 하위 차원의 배열을 여러개 가지는 배열을 의미합니다.
2차원 배열은 1차원을 여러개 가지고, 3차원은 2차원을 여러개 가지게 됩니다.
//1차원
Array : 변수명[방갯수](초기값);
//2차원
Array : 변수명[1차원갯수, 방갯수](초기값);
//3차원
Array : 변수명[2차원갯수, 1차원갯수, 방갯수](초기값);
C
복사
1차원 배열
Array : value[5](0);
2차원 배열
Array : value[4, 5](0);
3차원 배열
Array : value[3, 4, 5](0);
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.