VAR
a : ARRAY OF INTEGER;
x : INTEGER;
BEGIN
SetLength(a,3); // This dynamically set the size of array to 3.
a[0]:=1;
a[1]:=2;
a[2]:=3; // Now the given values are set. Now to resize.
SetLength(a,6);// This resizes the array.
x:=3;
REPEAT
a[x*2-1]:=a[x-1];
a[x*2-2]:=a[x-1];
DEC(x);
UNTIL x=0;
END.
This code should do the trick in your array without the need of a temporary array for storage.
If you do not actually know the size of the array, then you can use the command HIGH
VAR
a : ARRAY OF INTEGER;
x : INTEGER;
aSize : INTEGER;
BEGIN
SetLength(a,3); // This dynamically set the size of array to 3.
a[0]:=1;
a[1]:=2;
a[2]:=3; // Now the given values are set. Now to resize.
aSize:=HIGH(a);
SetLength(a,aSize*2);// This resizes the array to the double size.
x:=aSize; // We must start at bottom of existing data in array.
REPEAT
a[x*2-1]:=a[x-1];// The data is then copied from middle and up of new array
a[x*2-2]:=a[x-1];// to the bottom and up of new array. This line writes copy 2 of data.
DEC(x);
UNTIL x=0;
END.
I did not actually test this code, but I think everything is as it should be.
Best regards.