program TraverseBothSides;
{
Demonstration of traversing an array from both sides at the same time
in idiomatic Free Pascal.
We use the classic "two-index" technique:
- left starts at the first element (low index)
- right starts at the last element (high index)
Both move toward the center.
This approach is efficient (O(n)), simple, and widely used in
algorithms such as palindrome checks, partitioning, and pair searching.
}
type
TIntArray = array of Integer;
{---------------------------------------------------------------
Procedure: TraverseFromBothSides
Purpose: Traverse an array from both ends simultaneously.
---------------------------------------------------------------}
procedure TraverseFromBothSides(const arr: TIntArray);
var
left, right: Integer;
begin
left := Low(arr); { built‑in function: first index }
right := High(arr); { built‑in function: last index }
{ Move inward until the indices cross }
while left <= right do
begin
WriteLn('Left: ', arr[left], ', Right: ', arr[right]);
Inc(left); { move left pointer forward }
Dec(right); { move right pointer backward }
end;
end;
{---------------------------------------------------------------
Main program
---------------------------------------------------------------}
var
data: TIntArray;
begin
data := TIntArray.Create(10, 20, 30, 40, 50, 60, 70, 80, 90);
WriteLn('Traversing from both sides:');
TraverseFromBothSides(data);
end.
{
run:
Traversing from both sides:
Left: 10, Right: 90
Left: 20, Right: 80
Left: 30, Right: 70
Left: 40, Right: 60
Left: 50, Right: 50
}