데이터 저장

플레이어가 복잡하고 친근하지 않은 컴퓨터 인터페이스와 경쟁하는 "User Hostile"이라는 컴퓨터 게임을 개발했다고 가정해 보겠습니다. 이제 5년 동안 이 게임의 월별 판매를 추적하는 프로그램을 작성해야 합니다. 또는 Hacker Hero 트레이딩 카드의 인벤토리가 필요하다고 가정해 보겠습니다.
곧 정보를 저장하고 처리하기 위해 단순한 기본 데이터 유형 이상이 필요하다는 결론에 도달하게 될 것입니다.
 

배열(목록). 소개

많은 양의 데이터로 작업하기 편리하도록 셀 그룹에 공통 이름이 지정됩니다. 이러한 셀 그룹을 배열이라고 합니다.
배열 – 나란히 위치하고 공통 이름을 갖는 동일한 유형의 메모리 셀 그룹입니다. 그룹의 각 셀에는 고유 번호가 있습니다.

배열로 작업할 때 세 가지 작업을 해결하는 방법을 배워야 합니다.
엑스 배열에 필요한 크기의 메모리 할당
엑스 원하는 셀에 데이터 쓰기
엑스 셀에서 데이터 읽기


Pascal의 배열


전통적으로 Pascal은

와 같은 정적 배열을 사용합니다. <예비> var a: 정수 배열 [1..10];

배열의 경계는 상수로 설정해야 하며 프로그램 실행 중에는 배열의 크기를 변경할 수 없습니다. 그러나 정수뿐만 아니라 문자나 열거 유형의 인덱스도 만들 수 있습니다. 예를 들어 각 문자의 발생 횟수를 계산하려면 배열을 사용할 수 있습니다.

<예비> var LettersCount: 정수 배열 ['a'..'z'];

열심히 작업하세요.

<예비> LettersCount['z'] := 1; LettersCount['d'] := LettersCount['d'] + 1;

이러한 배열의 단점은 알려져 있습니다. 얼마나 많은 요소를 사용해야 하는지 미리 알 수 없는 경우 최대 크기의 메모리가 배열에 할당됩니다. 결과적으로, 대부분의 경우 우리는 "미래를 위해 비축"하고 때로는 이 "비축" 충분하지 않은 것으로 밝혀졌습니다. 이것이 이러한 배열을  정적이라고 부르는 이유입니다. 크기는 정적이며 프로그램 컴파일 단계에서 설정해야 합니다. 그러나 파스칼에는    크기를 설정할 수 있을 뿐만 아니라 프로그램 과정에서 변경할 수도 있는 동적 배열이 있습니다. 이러한 배열과 이를 사용할 때의 이점에 대해 자세히 설명하겠습니다.

배열 만들기

배열 생성 시 메모리에 공간 할당(일정 개수의 셀) <예비> 1) 배열은 다음과 같을 수 있습니다. 단순히 요소를 나열하여 생성됨: <예비> var a: 정수 배열; SetLength(a, 3); a[0] := 1; a[1] := 2; a[2] := 3;
2) 배열은 정수 또는 실수, 문자열 등 모든 유형의 데이터로 구성될 수 있습니다. <예비> var a: 문자 배열; SetLength(a, 3); a[0] := 'a';; a[1] := 'b';; a[2] := 'c';; 3) 배열은 항상 "인식" 너의 사이즈.  length 함수는 배열의 크기를 결정하는 데 사용됩니다. 종종 배열의 크기는 별도의 변수에 저장되므로 다른 배열 크기로 작업하도록 프로그램을 쉽게 변경할 수 있습니다. 예: <예비> 엔 := 10; // 변수 N에 배열의 크기를 저장합니다. SetLength(a, N); // 배열 및 크기 N 설정 writeln(길이(a)); //배열의 크기 표시 배열의 크기는 키보드에서 설정할 수 있습니다.

배열 요소 참조

배열의 유용성 대부분은 해당 요소에 개별적으로 액세스할 수 있다는 사실에서 비롯됩니다.
이를 수행하는 방법은 인덱스를 사용하여 요소에 번호를 지정하는 것입니다.
인덱스 는 특정 배열 요소를 가리키는 값입니다.

기억하세요!
파스칼의 배열 번호 매기기는 0부터 시작합니다!

(필수 사항입니다. 처음부터 시작해야 합니다. 기억해야 할 특히 중요합니다.)

배열 A에 액세스하는 예: <예비> x := (A[3] + 5) * A[1] // A[3]과 A[1]의 값 읽기 A[0] := x + 6 // A[0]에 새 값 쓰기 배열 요소 작업을 위한 프로그램을 분석해 봅시다. <예비> 변수 i: 정수; a: 정수 배열; 시작하다     나는 := 1;     setlength(a, 5); //5개 요소의 배열 생성      a[0] := 23; // 배열의 5개 요소 각각에 대해(인덱스는 0에서 4까지)     a[1] := 12; // 특정 값 쓰기     a[2] := 7;     a[3] := 43;     a[4] := 51;     a[2] := a[i] + 2 * a[i - 1] + a[2 * i]; // 인덱스가 2인 요소의 값을 표현식의 결과로 변경     // i=1이므로 변수 i의 값을 우리가 얻는 표현식으로 대체합니다.     // 다음 표현식  a[2] := a[1] + 2*a[0] + a[2];     writeln(a[2] + a[4]); 끝.
실행한 결과 이 프로그램은 인덱스 2와 인덱스 4가 116인 배열 요소의 합계 값을 화면에 표시합니다. 예제에서 볼 수 있듯이 배열의 모든 요소에 액세스할 수 있습니다. . 또한 다양한 공식을 사용하여 필요한 요소 수를 계산합니다(예: 프로그램 A[i-1] 또는 A[2*i]에서와 같이 이러한 경우 요소의 인덱스가 계산되고 i의 가치.)

예제 프로그램을 살펴보겠습니다 <예비> var a: 정수 배열; 시작하다     setlength(a, 5);     a[5] := 5; a[-1] := 0; 끝.

왜냐하면 배열은 5개의 요소로 선언되므로 요소는 0에서 4까지 번호가 매겨집니다. 여섯 번째 줄의 프로그램이 존재하지 않는 요소를 참조하는 것을 볼 수 있습니다 а [5] 그리고 7번째 줄에도 존재하지 않는 a[-1].

프로그램이 배열의 범위를 넘어간 것으로 나타났습니다.
범위를 벗어난 배열이 배열에 존재하지 않는 인덱스를 가진 요소에 액세스하고 있습니다.
이러한 경우 프로그램은 일반적으로 런타임 오류
와 함께 충돌합니다.

 
 

배열로 작업할 때 일반적으로 배열의 모든 요소를 ​​한 번에 작업해야 합니다.
요소 반복: 배열의 모든 요소를 ​​살펴보고 필요한 경우 각 요소에 대해 작업을 수행합니다.
이를 위해 변수가 있는 루프가 가장 자주 사용되며 0에서 N-1로 변경되며 여기서 N은 배열 요소의 수입니다.
N에서 우리는 배열의 현재 크기를 고려할 것입니다.
N := 길이(A) <예비> ... for i := 0 ~ n - 1 시작 // 여기서 우리는 a[i]로 작업합니다. 끝; ... 지정된 루프에서 변수 i는 0, 1, 2, ..., N-1 값을 갖습니다.  따라서 루프의 각 단계에서 숫자 i로 배열의 특정 요소에 액세스합니다.
따라서 배열 a[i]의 한 요소로 수행해야 하는 작업을 설명하고 이러한 작업을 이러한 주기 내에 배치하는 것으로 충분합니다.

첫 번째 N & nbsp; 자연수로 배열을 채우는 프로그램을 작성해 보겠습니다. 즉, 프로그램이 끝나면 배열의 요소가 같아야 합니다. <예비> a[0] = 1 a[1] = 2 a[2] = 3 ... a[N - 1] = N 패턴을 보는 것은 쉽습니다: 배열 요소의 값은 요소의 인덱스보다 1만큼 커야 합니다.
루프는 다음과 같습니다 <예비> i에 대해 := 1에서 n - 1 수행 a[i] := i + 1; 작업을 완료하세요.