Пример 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 |
Пример 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) Инициация массива |
Очистка метки вывода |
Вывод элемента массива |