# Lesson #13. Arrays (continuation)

Дата изменения: 30 ноября 2022

## Theory

Lection in pdf format

### Filling an array with generated sequence. lambda expressions

var a := Arr(1,3,5,7,9); // [1,3,5,7,9] var a := ArrFill(5,555); // [555,555,555,555,555] var a := Arr(55) * 4 + Arr(77) * 6; // [55,55,55,55,77,77,77,77,77,77] var a := ArrGen(10,i->i); // [0,1,2,3,4,5,6,7,8,9] var a := ArrGen(10,i->i,1); // [1,2,3,4,5,6,7,8,9,10] var a := ArrGen(10,1,x->x+2); // [1,3,5,7,9,11,13,15,17,19] var a := ArrGen(10,1,x->x*2); // [1,2,4,8,16,32,64,128,256,512] var a := ArrGen(10,1,1,(x,y)->x+y); // [1,1,2,3,5,8,13,21,34,55]

### Array input and Randomly generated array

var a:=ReadArrInteger(5); var a:=ReadArrReal(5);   var a:=new integer[10]; a:=arrRandomInteger(10); // array of 10 generated integers from 0 to 99

### Params keyword to pass a varying number of parameters

1 2 3 4 5 6 7 8 9 10 11 function Sum(params a: array of integer): integer; begin Result := 0; foreach var x in a do Result += x; end;   begin Print(Sum(1,3,5)); Print(Sum(1,4,10,22,44)); end.
• In the case of more than one parameter, params should be the last one in the list
• ### SetLength procedure

• Standard SetLength function allocates the necessary memory to contain the array elements
• 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function MakeArr (params a: array of integer): array of integer; begin var b := new integer[a.length]; var j := 0; for var i := 0 to a.length - 1 do if a[i] > 0 then begin b[j] := a[i]; j += 1; end; SetLength(b, j); // to specify a particular value of b array size result := b; end;   begin var a := arrRandomInteger(5, -5, 10); // array a [-1,9,9,7,-3,0,-2,1,1,-1] println('array a', a); println('result of function, array b ', MakeArr(a)); // array b [9,9,7,1,1] end.

### Reassignment and copy function

var a: array of integer := (1,3,5,7); var b:=a; // [1,3,5,7]

But!

• If we now reassign the values of the elements of the array b, then the array a will also change:
• var a: array of integer := (1,3,5,7); var b:=a; b[2]:=1; print(a); //[1,3,1,7]
• To avoid this situation, you need to create array b as a copy of array a:
• var a: array of integer := (1,3,5,7); var b:=Copy(a); b[2]:=1; print(a); //[1,3,5,7]

### Standard functions and procedures

• Reverse(a)
• Reverses elements in a array

• a.IndexOf(x)
• Finds the position (index) of x in a array

• a.LastIndexOf(x)
• Finds the last position (index) of x in a array

• a.Contains(x)
• Checks if the a array contains x

### Filling an array with generated sequence

{0.2 points} Task 1:

To do: Generate an array of integers from -20 to 30. You should use ArrGen() function.

Expected output:

[-20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3,
-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30]


[Program name: 13task-01.pas]

{0.2 points} Task 2:

To do: Generate an array of integers from -10 to 10 in increments of 2 (step = 2). You should use ArrGen() function.

Expected output:

[-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10]


[Program name: 13task-02.pas]

{0.2 points} Task 3:

To do: Generate an array of 20 numbers 5. You should use ArrFill() function.

Expected output:

[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]


[Program name: 13task-03.pas]

{0.2 points} Task 4:

To do: Generate an array of the products of twos of numbers beginning with 1: i.e. 1 * 2, 2 * 2, 2 * 4, …). You should use ArrGen() function with two variables (x & y).

Expected output:

[1,2,2,4,8,32,256,8192]


[Program name: 13task-04.pas]

### Params keyword. SetLength procedure

Lab 1: Params keyword

To do: Create a function to add any number of integers.

✍ Algorithm:

1 2 3 4 5 6 7 8 9 10 11 function Sum(params a: array of integer): integer; begin Result := 0; foreach var x in a do Result += x; end;   begin Print(Sum(1,3,5)); Print(Sum(1,4,10,22,44)); end.
• params keyword is used to make it able to pass a varying number of parameters.
• In the case of more than one parameter, params should be the last one in the list
{0.4 points} Task 5:

To do: Create a PrintArr procedure that prints out any number of numbers, delimited by some character (the numbers must be understood as an array parameter, and there must be also a delim parameter, the value of which is a character). Inside the main program, call the procedure several times with different number of parameters.

Note: Procedure call example:

var a:=new integer[10]; a:=arrRandomInteger(10); PrintArr(';',a); PrintArr('~',1,2,3); // some more procedure call

Extra task: * Correct the PrintArr procedure so that there is no delimeter after the last element.

Expected output:

76 ; 22 ; 71 ; 92 ; 51 ; 68 ; 70 ; 47 ; 15 ; 37 ;
1 ~ 2 ~ 3 ~
5 / 2 / 3 / 5 /


[Program name: 13task-05.pas]

{0.4 points} Task 6:

To do: Three integer array of different sizes are generated randomly. Write a procedure EvenDouble with one parameter: an integer array of any size. Procedure must double all the elements of the array with even values and print out the resulting array.

Note: Inside the main program, call the procedure several times with the arrays of different sizes:

var a := new integer[10]; a := arrRandomInteger(5,-5,5); EvenDouble(a); var a1 := new integer[5]; ... // some more procedure calls

Expected output:

the array before the task is done: [33,0,52,35,70,56,83,12,68,78]
result: 33 0 104 35 140 112 83 24 136 156
---
the array before the task is done: [5,-1,4,1,1]
result: 5 -1 8 1 1


[Program name: 13task-06.pas]

Lab 2: SetLength

To do: create a function to fill array b with positive numbers of array a

✍ Algorithm:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function MakeOddArrFunc(params a: array of integer): array of integer; begin var b := new integer[a.length]; var j := 0; for var i := 0 to a.length - 1 do if a[i] > 0 then begin b[j] := a[i]; j += 1; end; SetLength(b, j); result := b; end;   begin var a := arrRandomInteger(10, -5, 10); println('array a', a); println('result of function, array b ', MakeOddArrFunc(a)); end.
{0.4 points} Task 7:

To do: Create a function to fill array b with local minimums of array a. The local minimum is the element that is less than each of its neighbours. The first and last element should not be considered as local minima.

Expected output:

array a [6,-2,3,-4,6]
result of function, array b  [-2,-4]


[Program name: 13task-07.pas]

Вставить формулу как
Дополнительные настройки
Цвет формулы
Используйте LaTeX для набора формулы
Предпросмотр
$${}$$
Формула не набрана
Вставить