StartprogrammingusingObjectPascal:Arrays

From 흡혈양파의 번역工房
Jump to: navigation, search

배열

배열은 같은 형을 지닌 변수들의 연속입니다. 10개의 Integer 변수에 대한 배열을 선언하려 한다면, 다음과 같이 할 수 있습니다.

Numbers: array [1 .. 10] of Integer;

배열의 인덱스를 사용하여 배열의 단일 변수에 접근할 수 있습니다.

Numbers[1] := 30;

두번째 변수에 값을 넣으려면, 인덱스 2를 사용합니다.

Numbers[2] := 315;


다음 예제에서는, 10명의 학생들의 성적을 입력하도록 요구하고 이들을 배열에 넣습니다. 심지어 통과/탈락 결과까지 바로 뽑아낼 것입니다.

var
    Marks: array [1 .. 10] of Integer;
    i: Integer;
begin
    for i:= 1 to 10 do
    begin
        Write('Input student number ', i, ' mark: ');
        Readln(Marks[i]);
    end;

    for i:= 1 to 10 do
    begin
        Write('Student number ', i, ' mark is : ', Marks[i]);
        if Marks[i] >= 40 then
            Writeln(' Pass')
        else
            Writeln(' Fail');
    end;

    Writeln('Press enter key to close');
    Readln;
end.

최대 최소 학생 성적을 가져오기 위해 이전 코드를 수정할 수 있습니다.

var
    Marks: array [1 .. 10] of Integer;
    i: Integer;
    Max, Min: Integer;
begin
    for i:= 1 to 10 do
    begin
        Write('Input student number ', i, ' mark: ');
        Readln(Marks[i]);
    end;



    Max := Marks[1];
    Min := Marks[1];

    for i:= 1 to 10 do
    begin
        // Check if current Mark is maximum mark or not
        if Marks[i] > Max then
            Max := Marks[i];
        // Check if current value is minimum mark or not
        if Marks[i] < Min then
            Min := Marks[i];

        Write('Student number ', i, ' mark is : ', Marks[i]);

        if Marks[i] >= 40 then
            Writeln(' Pass')
        else
            Writeln(' Fail');
    end;

    Writeln('Max mark is ', Max);
    Writeln('Min mark is ', Min);
    Writeln('Press enter key to close');
    Readln;
end.

참고로, 첫번째 성적(Marks[1])을 최대 최소 성적으로 가정하고, 나머지 성적들과 비교할 것입니다.

   Max := Marks[1];
   Min := Marks[1];

순환문 안에서 각각의 성적에 대해 MaxMin을 비교합니다. Max보다 큰 수를 찾으면 Max의 값을 더 큰 수로 바꾸고, Min보다 작은 수를 찾으면 Min의 값을 더 작은 수로 바꿉니다.

앞의 예제에서 주석을 도입했습니다.

// Check if current value is minimum mark or not

이 줄은 주석이라는 것을 의미하는 // 문자들로 시작했으며, 코드에 영향을 주지 않고 컴파일되지 않을 것입니다. 이 기술은 코드의 일부분을 다른 프로그래머들에게 설명하거나 프로그래머 자신에게 설명할 때 사용합니다.

// 는 짧은 주석에 사용합니다. 주석을 여러 줄로 작성하려 한다면, { } 또는 (* *)로 주석으로 삼을 문자열들을 감쌀 수 있습니다.

예제:

    for i:= 1 to 10 do

    begin
        { Check if current Mark is maximum mark or not
           check if Mark is greater than Max then put
           it in Max }
        if Marks[i] > Max then
            Max := Marks[i];
        (* Check if current value is minimum mark or not
             if Min is less than Mark then put Mark value in Min
        *)
        if Marks[i] < Min then
            Min := Marks[i];
        Write('Student number ', i, ' mark is : ', Marks[i]);
        if Marks[i] >= 40 then
            Writeln(' Pass')
        else
            Writeln(' Fail');
    end;

또한 코드 일부를 주석처리하여 일시적으로 비활성화 할 수 있습니다.

    Writeln('Max mark is ', Max);
    // Writeln('Min mark is ', Min);
    Writeln('Press enter key to close');
    Readln;

위의 코드에서 학생 최소 성적을 기록하는 프로시저를 비활성화 했습니다.



참고

C언어에서와 같이 0을 기반으로 하는 인덱스를 가진 배열을 선언할 수 있습니다.

Marks: array [0 .. 9] of Integer;

이 배열도 10개의 요소를 지닐 수 있지만, 첫번째 항목은 인덱스 0을 사용하여 접근할 수 있습니다.

Numbers[0] := 30;

두번째 항목

Numbers[1] := 315;

마지막 항목

Numbers[9] := 10;

또는 다음과 같이 접근하기도 합니다.

Numbers[High(Numbers)] := 10;