Table of Contents

Arrays

Arrays คือ ตัวแปรที่มีลักษณะเป็นโครงสร้าง (Structured Type) ชนิดหนึ่ง ที่มีสมาชิกเป็น Data Type ชนิดเดียวกันทั้งหมด

Type of Arrays

โดยทั่วไป Array จะสามารถแยกได้เป็น 2 ชนิด คือ Static Array และ Dynamic Array (หรือ เรียกว่า Open Array) รายละเอียดของแต่ละชนิดสามารถสรุปได้ตามนี้

Array Type การประกาศ (Declaration)
Static Array
var
  ArrX1:array[3..10] of real;
  ArrX2:array[1..2,1..3] of integer;
  ArrX3:array[1..2] of array[1..3] of integer;
  
  //static array with initial value
  Arr1:array[1..2] of integer = (10,20);
  Arr2:array[1..2,1..3] of integer = 
             ((10,20,30),(40,50,60));
  Arr3:array[1..2] of array[1..3] of integer = 
             ((10,20,30),(40,50,60));
  
Dynamic Array
var 
   ArrY1:array of real;
   ArrY2:array of array of real;
    
begin
    setlength(ArrY1,3); //Set array[0..2]
    setlength(ArrY2,3,5); //Set array[0..2,0..4]
end.


การกำหนด/เรียกดู ค่าสมาชิกของ Arrays

การกำหนดค่าสมาชิกของ Arrays สามารถทำได้ดังตัวอย่างต่อไปนี้

Defining/Reporting Arrays

Defining/Reporting Arrays

  Var ArrX:array[1..3] of integer; //Static Array - 1D
      ArrY:array[0..1,1..2] of real; //Static Array - 2D
      ArrZ:array of Boolean; //Dynamic Array - 1D
  
  begin
    //Define values of ArrX
    ArrX[1]:=10;
    ArrX[2]:=20;
    ArrX[3]:=30;
    
    //Define values of ArrY
    ArrY[0,1]:=1.20;
    ArrY[1,1]:=2.54;
    ArrY[0,2]:=3.21;
    ArrY[1,2]:=4.31;
    
    //Define values of ArrZ
    setlength(ArrZ,3);
    ArrZ[0]:=True;
    ArrZ[1]:=False;
    ArrZ[2]:=False;
    
    //Print values of all Arrays
    writeln('ArrX[1] = ',ArrX[1]);
    writeln('ArrX[2] = ',ArrX[2]);
    writeln('ArrX[3] = ',ArrX[3]);
    writeln('ArrY[0,1] = ',ArrY[0,1]);
    writeln('ArrY[1,1] = ',ArrY[1,1]);
    writeln('ArrY[0,2] = ',ArrY[0,2]);
    writeln('ArrY[1,2] = ',ArrY[1,2]);
    writeln('ArrZ[0] = ',ArrZ[0]);
    writeln('ArrZ[1] = ',ArrZ[1]);
    writeln('ArrZ[2] = ',ArrZ[2]);
    readln();
  end


Open Array As Parameters

การส่งผ่าน Array เป็นตัวแปร สามารถทำได้โดยการประกาศ identifier ของ Array ให้เป็น Open Array (Dynamic Array) ใน Argument นั้นๆ

Procedure ShowItemArray(Arr:array of real);

นอกจากนี้ เรายังสามารถประกาศ Open Array ล่วงหน้า แล้วนำมาใส่เป็น identifier ได้เช่นกัน ดังนี้

Type TArrR:array of real; 
    
Procedure ShowItemArray(Arr:TArrR);

หมายเหตุ - index ของ Array ที่ถูกส่งผ่านเข้ามาใน Procedure/Function แล้วนั้น จะเริ่มจาก 0 เสมอ


Array of Const

หากเราต้องการส่งค่า Array เป็นตัวแปร โดยที่ Array ดังกล่าวเป็นค่าคงที่ซึ่งไม่ได้มีการประกาศ identifier ชัดเจน (ไม่มีการประกาศ array of …) เช่น [1,2,3,4] หรือ ['A','B','C'] หรือ [true,false,false] เป็นต้น เราเรียก identifier ของ Array ดังกล่าวว่าเป็น Array of Const ดังตัวอย่างต่อไปนี้

procedure Print_Length_Array(Arr:Array of const);
begin
   writeln('Number of member in Array = ',length(Arr));
end; 

begin
  Print_Length_Array([1,2,3,4,5,6]);
  Print_Length_Array([1.234,-8.432]);
  Print_Length_Array(['Hi','Everybody','How','Are','You?']);
  Print_Length_Array([True,True,False]);
end.

Compiled Results:

Number of member in Array = 6
Number of member in Array = 2
Number of member in Array = 5
Number of member in Array = 3


Array Functions

Function เกี่ยวกับ Array ที่เราจะได้ใช้บ่อยๆ มีดังนี้

กำหนดให้

const 
Arr1:array[1..2] of integer = (10,20);
Arr2:array[5..8] of integer = (5,6,7,8);
Functions Examples
Low() - หาค่า index ของ Array ตัวแรกสุด
writeln(Low(Arr1)); // = 1
writeln(Low(Arr2)); // = 5
High() - หาค่า index ของ Array ตัวสุดท้าย
writeln(High(Arr1)); // = 2
writeln(High(Arr2)); // = 8
Length() - หาจำนวนสมาชิกของ Array
writeln(Length(Arr1)); // = 2
writeln(Length(Arr2)); // = 4


References

http://wiki.freepascal.org/Array
https://www.freepascal.org/docs-html/ref/refsu68.html
https://www.freepascal.org/docs-html/ref/refsu69.html