0

given a sequence of n elements.increase it by putting after every element the same.for example when you have 1,2,3 the you must increase it by getting 1,1,2,2,3,3.how are i do that using a single array?

3
Contributors
2
Replies
3
Views
5 Years
Discussion Span
Last Post by Morten Brendefu
0

You can just write a two times, here it is.

var
a: array of integer;n, i: integer;

begin
readln(n);
a := new integer[n + 1];
for i := 1 to n do
read(a);
for i := 1 to n do
write(a, ' ', a, ' ');
end.

0
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.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.