Пример 2. Инициация двумерного динамического массива

Будем инициировать двумерный массив 3 х 3,

type T2Ar_Real =array of array ofReal; //в разделе implementation

varM2:T2Ar_Real; //двумерный динамический массив

…………………………

begin//в исполняемом блоке какой-либо процедуры

SetLength(M2, 3); //Устанавливаем длину первого измерения = 3 (количество

столбцов)

SetLength(M2[0], 3) ;//Задаем длину 0-го столбца, счёт от 0

SetLength(M2[1], 3) ;//Задаем длину 1-го столбца

SetLength(M2[2] ,3) ;//Задаем длину 2-го столбца

Недостаток такого способа

Пример 3. Процедура инициации двумерного массива

Дано: описание типа двумерного динамического массива, type T2Ar_Real =array of array ofReal;

описание переменной массива, varM2:T2Ar_Real;

поле Edit1, в которое будет введено значение размерности массива N;

Требуется разработать процедуру Cr_2Mx инициации двумерного динамического массива размером N x N.

Постановка задачи:

· после ввода размерности массива, преобразуем строковое значение в числовое N;

· зададим количество столбцов массива;

· в цикле зададим длину каждого столбца.

procedure Cr_2Mx(Str: String; var M2: T2Ar_Real; var N: integer);

{Str – строковое значение размерности массива}

{var M2 – открытый параметр массива}

{var N – размерность массива, }

var i, cod: Integer; // i – счётчик, cod - индикатор преобразования Строка-Число

begin If Str ='' //проверка на пустое значение

Then begin

ShowMessage('Введите N!') ;

exit //досрочное завершение процедуры

end;//конец if Str…

Val(Str, N, сod); //преобразование Str в число N

if cod = 0 //успешное преобразование

Then begin

SetLength(M2, N); //задаём кол-во столбцов N

for i:= 0 to N -1 do//задаем длину i-го столбца, счёт от 0

SetLength(M2[i], N);

End

Else begin

ShowMessage('Ошибка ввода N!');

exit;

End;

End;

true
Начало
Конец
true
For
Exit
Str ='' проверка на пустое значение
if
Схема алгоритма. Инициация двумерного массива Cr_2Mx(Str: String; var M2: T2Ar_Real; var N: integer)
Val(Str, N, Cod)
false
Ошибка ввода N
Exit
SetLength(M2[i], N) Длина i-го столбца
SetLength(M2, N) кол-во столбцов N
if
0 .. N-1
Введите N
Cod = 0
true
Вызов процедуры инициации двумерного массива NxN, из какой-либо процедуры обработки события будет выглядеть так, Cr_2Mx(Edit1.Text, M2, N).

Пример 4. Формирование двумерного массива случайных чисел

Рассмотрим задачу формирования массива случайными числами. Для получения случайных чисел инициируют генератор случайных чисел процедурой Randomize. Генератор случайных чисел вызывается только однажды, например, при наступлении события загрузки формы.

procedure TForm1.FormActivate(Sender: TObject);

Begin

Randomize; //инициация генератора случайных чисел

End;

После вызова генератора Randomize обращаются к функции случайных чисел Random( Range: Integer) или RandomRange(constAFrom, ATo: Integer): Integer.

Значение, возвращаемое функцией Random, зависит от способа обращения к функции:

· если параметр Range опущен, то X := Random получит случайное вещественное значение в диапазоне 0 <= X < 1;

· если задан параметр Range, то X := Random(n) получит случайное целое значение в диапазоне 0 <= X < n; для получения Х от 10 до 20 следует задать X := Random(10)+11.

Обращение к RandomRange(constAFrom, ATo: Integer): Integer требует подключения модуля Math к перечню модулей, которые Delphi автоматически включает в раздел uses.

Uses

Windows, Messages, …, Math;

RandomRange(constAFrom, ATo: Integer): Integer;

AFrom и ATo соответственно начальное и конечное значения диапазона

случайных чисел.

Процедура TForm1.Button1Enter инициирует двумерный динамический массив процедурой Cr_2Mx (см. пример 3); в цикле, посредством функции случайных чисел, присваивает элементам массива вещественные значения в диапазоне 0 <= M[i, j] < 1; распечатывает значения элементов массива.

procedure TForm1.Button1Enter(Sender: TObject);

var i, j : Integer;

Begin

Label1.Caption := ''; //очистка метки вывода массива

Cr_2Mx(LabeledEdit1.Text, M, N); //инициация массива

for i := 0 to N -1 do//цикл по строкам i

Begin

forj := 0 to N -1 do//вложенный цикл по столбцам j

Begin

M[i, j] := Random;

Label1.Caption := Label1.Caption + #9+FloatToStr(M[i, j])+#9;

end;//конец цикла по j

Label1.Caption := Label1.Caption+#13; //начать с новой строки

end;//конец цикла по i

End;

Схема алгоритма. Формирование двумерного массива случайными числами TForm1.Button1Enter(Sender: TObject)
for
Начало
Конец
For
i=0.. N-1
Перевод строки
M[i, j] := Random Случайное число
J=0 .. N-1
Cr_2Mx(LabeledEdit1.Text, M, N) Инициация массива
Очистка метки вывода  
Вывод элемента массива

Наши рекомендации