
- •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 Контрольные вопросы
2. Нумерация строк и столбцов фиксированной зоны таблицы
Нумерация строк и столбцов должна появляться после загрузки формы. Для этого можно использовать событие OnEnter, возникающее после вывода таблицы при загрузке.
Object TreeViewStringGrid1 Object Inspector Events
OnEnter (двойной щелчок)
В цикле нумеруются столбцы [i, 0]
В цикле нумеруются строки [j, 0]
procedure TForm1.StringGrid1Enter(Sender: TObject);
Var I, J : Integer; // счётчики
begin
With StringGrid1 do // с StringGrid1 выполнить
Begin
For I:=1 To ColCount-1 do // нумерация столбцов
Cells[I,0]:= IntToStr(I);
For J:=1 To RowCount-1 do // нумерация строк
Cells[0,J]:= IntToStr(J);
end;
end;
3. Контроль ввода данных в таблицу
Контроль ввода в таблицу свяжем с событием ввода в ячейки таблицы KeyPress. Убедитесь, что свойство goEditing True, в противном случае редактирование невозможно.
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
If not (Key in ['0'..'9', '-']) then Key := #0 ; // Алфавит целых чисел
end;
4. Формирование массива по данным таблицы, вывод массива
Установим кнопку Button1. Элементам строкового массива М[i, j] будем присваивать табличные значения Cells[i, j] при одинаковых индексах i и j. Вывод массива будем производить в метку Label1.
procedure TForm1.Button1Click(Sender: TObject);
var i, j : Integer; // Счётчики циклов
M : Array [1..3, 1..3] of String; // Массив
begin
With StringGrid1 do // для StringGrid1 выполнять
For i :=1 to 3 do
for j := 1 to 3 do
M[i, j] := Cells[i, j] ;
With Label1 do // для Label1 выполнять
begin
Caption := ''; // Очистка метки
For i :=1 to 3 do
begin
For j := 1 to 3 do
Caption := Caption+ M[i, j] + #9;
Caption := Caption +#13; // Начать новую строку
end; // For i
end // With
end;
Н
а
рисунке приведён результат работы.
Обратите внимание на различие в
последовательности расположения данных
таблицы и массива. В массиве
последовательность индексов [i,
j]
определяют [Строка,
Столбец],
а в таблице – [Столбец,
Строка].
Вывод двумерного массива в таблицу
Установим кнопку Button2.
Строковый массив М[i, j] будем выводить в StringGrid2 так, что бы строка массива соответствовала строке таблицы.
procedure TForm1.Button2Click(Sender: TObject);
var i, j : Integer; // Счётчики циклов
M : Array [1..3, 1..3] of String; // Массив
begin
With StringGrid2 do // для StringGrid2 выполнять
For i :=1 to 3 do
for j := 1 to 3 do
Cells[j, i] := M[i, j]; //индексы не совпадают
end // With
end;
6.4Содержание отчета
Задание.
Листинг модуля с подробными комментариями.
6.5 Контрольные вопросы
Какими комбинациями операторов можно реализовать конструкции с вложенными циклами?
Сколько раз будет выполнен оператор, находящийся во внутреннем цикле?
Каков синтаксис описания двумерных массивов?
Каков порядок следования элементов в двумерном массиве?
Как указать адрес элемента двумерного массива?
Как преобразовать двумерный массив в одномерный?
Как задать размеры двумерного динамического массива?
Как сгенерировать случайное число?
Каково назначение оператора With… do… ?
Каково назначение компонента TStringGrid?
Каков порядок следования ячеек в таблице?
Как задать адрес ячейки таблицы?
Как пронумеровать ячейки фиксированной зоны таблицы?