آرایه به‌عنوان پارامتر

پاس دادن آرایه به رویه و تابع با var، الگوهای پر کردن/پیمایش/جستجو به شکل رویه.

آرایه + رویه = قدرت!

وقتی برنامه‌تان بزرگ می‌شود، می‌خواهید کارهای آرایه (پر کردن، چاپ، جستجو) را در رویه‌های جدا داشته باشید.

پاس دادن آرایه

program ArrayParams;

const
  N = 5;

procedure FillArray(var a: array of integer);
var i: integer;
begin
  for i := 0 to N - 1 do
    a[i] := (i + 1) * (i + 1);
end;

procedure PrintArray(const a: array of integer);
var i: integer;
begin
  for i := 0 to N - 1 do
    write(a[i], ' ');
  writeln;
end;

var
  arr: array[1..N] of integer;
begin
  FillArray(arr);
  PrintArray(arr);
end.
در پاسکال استاندارد، پارامتر آرایه‌ای به شکل array of integer (آرایه باز) نوشته می‌شود و ایندکس آن از صفر شروع می‌شود. برای سادگی می‌توانید آرایه را با var و نوع کامل هم بدهید.

تابع روی آرایه: مجموع

function ArraySum(const a: array of integer): integer;
var
  i, s: integer;
begin
  s := 0;
  for i := 0 to high(a) do
    s := s + a[i];
  Result := s;
end;

تابع جستجو: پیدا کردن مقدار

function FindValue(const a: array of integer; target: integer): integer;
var i: integer;
begin
  Result := -1;   { پیدا نشد }
  for i := 0 to high(a) do
    if a[i] = target then
    begin
      Result := i;   { ایندکس پیدا شد }
      break;
    end;
end;

رویه با var: پر کردن از داخل

procedure FillSquares(var a: array of integer; n: integer);
var i: integer;
begin
  for i := 0 to n - 1 do
    a[i] := (i + 1) * (i + 1);
end;
اگر رویه باید تغییری در آرایه بدهد، حتماً var بگذارید. برای فقط خواندن، const بهتر است (کپی نمی‌شود).

مثال کامل: کتابخانه آرایه

program ArrayLib;
const N = 8;
var
  data: array[1..N] of integer;

procedure Init(var a: array of integer);
var i: integer;
begin
  for i := 1 to N do
    a[i - 1] := 0;
end;

procedure Fill(var a: array of integer);
var i: integer;
begin
  for i := 1 to N do
    a[i - 1] := i * 3 - 2;   { 1, 4, 7, ... }
end;

procedure Print(const a: array of integer);
var i: integer;
begin
  for i := 1 to N do
    write(a[i - 1]:4);
  writeln;
end;

function Sum(const a: array of integer): integer;
var i, s: integer;
begin
  s := 0;
  for i := 1 to N do
    s := s + a[i - 1];
  Result := s;
end;

begin
  Init(data);
  Fill(data);
  Print(data);
  writeln('Sum = ', Sum(data));
end.

خلاصه

این مبحث بخشی از دوره آموزش کامل پاسکال است.

ابزارهای مرتبط