
- •6. Вложенные циклы
- •6.1 Цель работы
- •6.2Заданиe
- •Найдите наибольший элемент, укажите его положение.
- •6.3Теоретические сведения
- •Пример 1. Ручной ввод массива в поле tEdit
- •Двумерные массивы
- •Динамические двумерные массивы
- •Пример 2. Инициация двумерного динамического массива
- •Пример 3. Процедура инициации двумерного массива
- •Пример 4. Формирование двумерного массива случайных чисел
- •Оператор присоединения With
- •Пример 5. Использование With при формировании массива
- •Пример 6. Нахождение наименьшего элемента массива
- •Компонент tStringGrid
- •Основные свойства компонента TstringGrid
- •Пример 7. Работа с таблицей
- •2. Нумерация строк и столбцов фиксированной зоны таблицы
- •3. Контроль ввода данных в таблицу
- •4. Формирование массива по данным таблицы, вывод массива
- •Вывод двумерного массива в таблицу
- •6.4Содержание отчета
- •6.5 Контрольные вопросы
Пример 4. Формирование двумерного массива случайных чисел
Рассмотрим задачу формирования массива случайными числами. Для получения случайных чисел инициируют генератор случайных чисел процедурой Randomize. Генератор случайных чисел вызывается только однажды, например, при наступлении события загрузки формы.
procedure TForm1.FormActivate(Sender: TObject);
begin
Randomize; //инициация генератора случайных чисел
end;
После вызова генератора Randomize обращаются к функции случайных чисел Random( Range: Integer) или RandomRange(const AFrom, ATo: Integer): Integer.
Значение, возвращаемое функцией Random, зависит от способа обращения к функции:
если параметр Range опущен, то X := Random получит случайное вещественное значение в диапазоне 0 <= X < 1;
если задан параметр Range, то X := Random(n) получит случайное целое значение в диапазоне 0 <= X < n; для получения Х от 10 до 20 следует задать X := Random(10)+11.
Обращение к RandomRange(const AFrom, ATo: Integer): Integer требует подключения модуля Math к перечню модулей, которые Delphi автоматически включает в раздел uses.
uses
Windows, Messages, …, Math;
RandomRange(const AFrom, 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
for j := 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;
Оператор присоединения With
Оператор присоединения With предназначен для упрощения записи доступа к полям объекта. В общем случае, полное имя объекта состоит из цепочки идентификаторов разделённых точками: ИмяОбъекта.ИмяПоля, например, Label1.Caption. Использование With позволяет, единожды указав ИмяОбъекта, получить доступ ко всем полям без повторного указания имени объекта. with ИмяОбъекта do
begin ИмяПоля1 := ……
ИмяПоля2 := ……
………..
end;
Пример 5. Использование With при формировании массива
Рассмотрим задачу формирования массива случайными числами, используя оператор with. Рассматриваемый пример по содержанию полностью соответствует примеру 4, различие состоит в том, что для доступа к полю Label1.Caption использован оператор With. Отличия в тексте выделены курсивом.
procedure TForm1.Button1Enter(Sender: TObject);
var i, j : Integer;
begin
With Label1 do //с объектом Label1 выполнить
begin
Caption := '';
Cr_2Mx(LabeledEdit1.Text, M, N);
for i := 0 to n-1 do
begin for j := 0 to n-1 do
begin M[i, j] := Random;
Caption := Caption + #9+FloatToStr(M[i, j])+#9;
end; // for j
Caption := Caption+#13;
end; // for i
Caption := Caption+FloatToStr(S)+#13;
Caption := Caption+FloatToStr(MinAr( M)) ;
end; // With
end;