Ну вот так, например (не оптимально с точки зрения управления памятью, но более понятно):
Код:
type
TArrayPair = record
First : WORD;
Second : WORD;
end;
var
A : Array Of WORD;
B : Array Of TArrayPair;
C : WORD;
I : Integer;
begin
I := 0;
SetLength(B,0);
C := 0; // 0 is not in initial array, just assumption
While (I < Length(A) div 2) Do
Begin
SetLength(B,Length(B)+1);
B[High(B)].First := A[i];
B(High(B)].Second := A[I+1];
I := I + 2;
End;
If (Length(A) mod 2) = 1 Then C := A[High(A)];
end;