Динамические массивы

Содержание

Слайд 2

Динамический массив – массив, размер которого может меняться во время исполнения

Динамический массив – массив, размер которого может меняться во время исполнения

программы.

1 Формирование

Динамические массивы

Объявление массива

Задание размера одномерного динамического массива:
procedure SetLength(var a: System.Array; n: integer);

Задание размера n-мерного динамического массива:
procedure SetLength(var a: System.Array; n1,n2,...: integer);

 Возвращает длину m-той размерности динамического массива (размерности нумеруются с нуля)
function Length(a: System.Array; m: integer): integer;

Индекс с 0 !!!

Слайд 3

Пример: Заполнить значениями динамический массив, размер массива устанавливает пользователь. 1 Формирование

Пример: Заполнить значениями динамический массив, размер массива устанавливает пользователь.

1 Формирование

Динамические массивы

var


a :array of real;
i, N : integer;
begin
write('Введите размер массива: ');
readln(N);
// задание размера массива
SetLength(a,N);
// заполнение массива случайными значениями
for i := 0 to N-1 do a[i] := random(0,100);
// вывод значений на экран
for i := 0 to N-1 do writeln('a[',i,']=',a[i]);
end.

var
a :array of real;
i, N : integer;
begin
write('Введите размер массива: ');
readln(N);
// задание размера массива
SetLength(a,N);
// заполнение массива значениями
writeln('Введите значения элементов массива: ');
for i := 0 to N-1 do
begin
write('a[',i,']=');
readln(a[i]);
end;
end.

Слайд 4

Пример: Переписать в массив B не нулевые элементы массива A(N). 1

Пример: Переписать в массив B не нулевые элементы массива A(N).

1 Формирование

Динамические

массивы

const
N = 10;
var
a: array [0..N-1] of integer;
b: array of integer;
i,j : integer;
begin
for i := 0 to N-1 do
begin// заполнение массива значениями
a[i] := random(-2, 2);
writeln('a[', i, ']=', a[i]);
end;

j := 0;
for i := 0 to N-1 do
begin// анализ a и заполнение b
if a[i]<>0 then
begin
SetLength(b, length(b)+1);
b[j] := a[i];
j := j + 1;
end;
end;
writeln;
for i := 0 to length(b) - 1 do writeln('b[', i, ']=', b[i]);
end.

Слайд 5

Динамические массивы Формирование; Удаление элемента; Вставка элемента; Многомерные массивы; Контрольная точка 2.

Динамические массивы

Формирование;
Удаление элемента;
Вставка элемента;
Многомерные массивы;
Контрольная точка 2.

Слайд 6

2 Удаление элемента Динамические массивы Нужно удалить элемент с инд. 2

2 Удаление элемента

Динамические массивы

Нужно удалить элемент с инд. 2

Переписать 3 в

2, 4 в 3

Уменьшить размер массива на 1

Слайд 7

Пример: Удалить из массива A нулевые элементы. 2 Удаление элемента Динамические

Пример: Удалить из массива A нулевые элементы.

2 Удаление элемента

Динамические массивы

Вариант 1.

Алгоритм решения:
Заполнить значениями динамический массив. Размер массива задает пользователь
При наличии нулевого элемента сместить последующие на одну позицию влево. Уменьшить размер массива на 1.
Завершить вычисления при проверки последнего элемента.
Слайд 8

2 Удаление элемента Динамические массивы var a: array of real; i,

2 Удаление элемента

Динамические массивы

var
a: array of real;
i, j,

N: integer;
begin
write('Введите размер массива: ');
readln(N);
SetLength(a, N); // задание размера массива
for i := 0 to N - 1 do
begin// заполнение массива значениями
a[i] := random(-1, 1);
writeln('a[', i, ']=', a[i]);
end;
i := 0;
while i < length(a) do
begin
if a[i] = 0 then
begin // если элемент нулевой, то сдвигаем влево
for j := i + 1 to length(a) - 1 do a[j - 1] := a[j];
SetLength(a, length(a) - 1);
end
else i := i + 1;
end;
for i := 0 to length(a) - 1 do writeln('a[', i, ']=', a[i]);
end.

a[0]=0
a[1]=0
a[2]=1
a[3]=-1
a[4]=0
a[5]=1
a[6]=1
a[7]=-1
a[8]=0
a[9]=-1
a[0]=1
a[1]=-1
a[2]=1
a[3]=1
a[4]=-1
a[5]=-1

Слайд 9

Пример: Удалить из массива A нулевые элементы. 2 Удаление элемента Динамические

Пример: Удалить из массива A нулевые элементы.

2 Удаление элемента

Динамические массивы

Вариант

2. Алгоритм решения:
Заполнить значениями динамический массив. Размер массива задает пользователь
При наличии нулевого элемента сместить последующие на одну позицию влево.
Завершить анализ при проверки последнего элемента.
Уменьшить размер массива на число нулевых элементов.
Слайд 10

Динамические массивы Формирование; Удаление элемента; Вставка элемента; Многомерные массивы; Контрольная точка 2.

Динамические массивы

Формирование;
Удаление элемента;
Вставка элемента;
Многомерные массивы;
Контрольная точка 2.

Слайд 11

3 Вставка элемента Динамические массивы Нужно вставить новый элемент со значением

3 Вставка элемента

Динамические массивы

Нужно вставить новый элемент со значением 11

Увеличить размер

массива

Переписать 4-5, 3-4, 2-3

Записываем 11 в 2

Слайд 12

Пример: Удвоить нулевые элементы массив A. 3 Вставка элемента Динамические массивы

Пример: Удвоить нулевые элементы массив A.

3 Вставка элемента

Динамические массивы

var
a:

array of integer;
i,j,N : integer;
begin
write('Введите размер массива: ');
readln(N);
SetLength(a, N); // задание размера массива
for i := 0 to N-1 do
begin// заполнение массива значениями
a[i] := random(-2, 2);
writeln('a[', i, ']=', a[i]);
end;

i := 0;
while i < length(a) do
begin
if a[i] = 0 then
begin //если есть нулевой, то сдвигаем влево
setlength(a,length(a)+1);
for j := length(a)-1 downto i+1
do a[j]:= a[j-1];
inc(i);
end;
inc(i);
end;
writeln;
for i := 0 to length(a) - 1 do writeln('a[', i, ']=', a[i]);
end.

Слайд 13

3 Вставка элемента Динамические массивы Введите размер массива: 10 a[0]=1 a[1]=1

3 Вставка элемента

Динамические массивы

Введите размер массива: 10
a[0]=1
a[1]=1
a[2]=0
a[3]=0
a[4]=2
a[5]=-1
a[6]=1
a[7]=-2
a[8]=0
a[9]=-2

a[0]=1
a[1]=1
a[2]=0
a[3]=0
a[4]=0
a[5]=0
a[6]=2
a[7]=-1
a[8]=1
a[9]=-2
a[10]=0
a[11]=0
a[12]=-2

Слайд 14

Динамические массивы Формирование; Удаление элемента; Вставка элемента; Многомерные массивы; Контрольная точка 2.

Динамические массивы

Формирование;
Удаление элемента;
Вставка элемента;
Многомерные массивы;
Контрольная точка 2.

Слайд 15

4 Многомерные массивы Динамические массивы Объявление двумерного статического и динамического массивов

4 Многомерные массивы

Динамические массивы

Объявление двумерного статического и динамического массивов

Задание размера

n-мерного динамического массива:
procedure SetLength(var a: System.Array; n1,n2,...: integer);

SetLength(a, 3,6); - задание размера массива 3x6 ([0..2,0..5])

Слайд 16

4 Многомерные массивы Динамические массивы Пример: Рассчитать значение функции y= 5x+10

4 Многомерные массивы

Динамические массивы

Пример: Рассчитать значение функции y= 5x+10 на

отрезке. Сформировать массив, который будет содержать в первом столбце значения аргумента, во втором – функции.

Алгоритм решения:
Считать границы вычисления функции;
Объявить двумерный массив;
Заполнить массив значениями.

Слайд 17

4 Многомерные массивы Динамические массивы var xy: array [,] of real;

4 Многомерные массивы

Динамические массивы

var
xy: array [,] of real;
i,N

: integer;
a,b,h : real;
begin
write('Введите параметры отрезка: a, b, h : ');
readln(a,b,h);
N := round((b-a)/h) + 1;
SetLength(xy, N, 2);
xy[0,0] := a;
xy[0,1] := 5*xy[0,0] + 10;
for i := 1 to N-1 do
begin
xy[i,0] := xy[i-1,0] + h;
xy[i,1] := 5*xy[i,0] + 10;
end;
for i := 0 to N-1 do
writeln('x=', xy[i,0]:3:2,' y=', xy[i,1]:3:2);
end.

Введите параметры отрезка: a, b, h : -1 3 0.3
x=-1.00 y=5.00
x=-0.70 y=6.50
x=-0.40 y=8.00
x=-0.10 y=9.50
x=0.20 y=11.00
x=0.50 y=12.50
x=0.80 y=14.00
x=1.10 y=15.50
x=1.40 y=17.00
x=1.70 y=18.50
x=2.00 y=20.00
x=2.30 y=21.50
x=2.60 y=23.00
x=2.90 y=24.50

Слайд 18

4 Многомерные массивы Динамические массивы Пример: Найти строку в матрице A(M,N)

4 Многомерные массивы

Динамические массивы

Пример: Найти строку в матрице A(M,N) с наибольшим

средним арифметическим.

Алгоритм решения:
Заполнить массив значениями;
Вывести на экран матрицу;
Рассчитать среднее арифметическое для каждой строки;
Выбрать из средних арифметических наибольшее.

Слайд 19

4 Многомерные массивы Динамические массивы const N = 10; M =

4 Многомерные массивы

Динамические массивы

const
N = 10;
M = 5;
var

A: array [1..N,1..M] of integer;
i,j,row : integer;
sum, mean: real;
begin
for i := 1 to N do
begin
for j := 1 to M do
begin
A[i,j] := random(10);
write (A[i,j],' ');
end;
writeln;
end;

row := 0;
mean := 0;
for i := 1 to N do
begin
sum := 0;
for j := 1 to M do sum := sum + A[i,j];
if (sum/M) > mean then
begin
mean := sum/M;
row := i;
end;
end;
writeln('Наибольшее среднее арифметическое ',mean:3:1,' в строке ',row);
end.

Слайд 20

4 Многомерные массивы Динамические массивы 7 5 2 9 7 2

4 Многомерные массивы

Динамические массивы

7 5 2 9 7
2 7

8 7 5
3 0 3 9 8
4 3 8 6 4
3 6 9 8 9
7 5 0 1 5
3 9 1 2 9
1 0 0 1 7
0 5 7 9 9
8 9 0 7 4
Наибольшее среднее арифметическое 7.0 в строке 5
Слайд 21

Динамические массивы Формирование; Удаление элемента; Вставка элемента; Многомерные массивы; Контрольная точка 2.

Динамические массивы

Формирование;
Удаление элемента;
Вставка элемента;
Многомерные массивы;
Контрольная точка 2.

Слайд 22

5 Контрольная точка 2 Динамические массивы Состав теста 9 заданий: Циклы

5 Контрольная точка 2

Динамические массивы

Состав теста 9 заданий:
Циклы for, while,

repeat..until (3 шт.); 
Циклы for, while, repeat..until с вложенным условием(3 шт.); 
Вложенные циклы: for в for, while в repeat..until, repeat..until в while (3 шт).

Вклад верно выполненного задания – 11.1% рейтинга
Время выполнения теста – 30 минут.

Слайд 23

5 Контрольная точка 2 Динамические массивы Что будет выведено на экране

5 Контрольная точка 2

Динамические массивы

Что будет выведено на экране при

выполнении данной программы?
var
i: integer;
begin
for i := 8 to 14 do
write(i div 3);
end.

2333444

Слайд 24

5 Контрольная точка 2 Динамические массивы Что будет выведено на экране

5 Контрольная точка 2

Динамические массивы

Что будет выведено на экране при

выполнении данной программы?
var
i: integer;
begin
i := 12;
while i>=3 do
begin
if (i-1) mod 3 = 0 then
write(i);
i := i-1;
end;
end.

1074