- •Основы программирования
- •Предисловие
- •Введение
- •1. Изучение интегрированной среды Delphi
- •Контрольные вопросы к главе 1
- •Задание к лабораторной работе № 1
- •2. Программирование линейных алгоритмов в системе Delphi
- •Контрольные вопросы к главе 2
- •Задания к лабораторной работе № 2
- •3. Программирование разветвленных алгоритмов в системе Delphi
- •Контрольные вопросы к главе 3
- •Задания к лабораторной работе № 3
- •4. Программирование простых циклических алгоритмов в системе Delphi
- •Контрольные вопросы к главе 4
- •Задания к лабораторной работе № 4
- •5. Программирование с использованием одномерных массивов в системе Delphi
- •Контрольные вопросы к главе 5
- •Задания к лабораторной работе № 5
- •6. Программирование с использованием двумерных массивов в системе Delphi
- •Контрольные вопросы к главе 6
- •Задания к лабораторной работе № 6
- •7. Программирование в системе Delphi с использованием подпрограмм
- •Контрольные вопросы к главе 7
- •Задания к лабораторной работе № 7
- •8. Изучение приемов работы с графикой в delphi
- •Контрольные вопросы к главе 8
- •Задания к лабораторной работе №8
- •9. Программирование в системе Delphi с помощью строк
- •Контрольные вопросы к главе 9
- •Задания к лабораторной работе №9
- •10. Изучение работы с файлами в системе delphi
- •Контрольные вопросы к главе 10
- •Задания к лабораторной работе №10
- •Заключение
- •Библиографический список
- •Предметный указатель
- •Delphi: основы программирования
6. Программирование с использованием двумерных массивов в системе Delphi
Цель данного раздела заключается в приобретении навыков программирования вложенных циклических алгоритмов, освоении приемов работы с двумерными массивами.
Понятие о массиве
Массив– это структурированный тип данных, состоящий из фиксированного числа упорядоченных по индексу элементов, имеющих один и тот же тип.
Если в качестве типа элемента одномерного массива берется другой одномерный массив, то образуется структура, называемая двумерным массивом. Для описания типа элементов может быть использован любой объявленный тип. Двумерный массив, или матрица, представляет собой прямоугольную таблицу элементов одинакового типа.
Пример
const n=3; m=5;
type
vec = array [0..m-1] of integer;
mas = array [0..n-1] of vec;
var
massiv:mas;
В данном примере объявлен двумерный массив massiv.Massivпредставляет матрицу, состоящую из 3 строк и 5 столбцов.
Возможны и другие способы описания двумерных массивов:
var
massiv : array [1..3,1..5] of integer;
Так же, как и одномерные массивы, двумерные массивы можно описывать как типизированные константы:
соnst
massiv : array [1..2,1..3] of integer = ((5,8,1),(3,1,9));
Двумерные массивы объявляются так же, как и одномерные, за исключением того, что в квадратных скобках после зарезервированного слова arrayстоят два разделенных запятыми определения индексов, относящихся к двум размерностям массива. Каждое определение индекса независимо одно от другого. Индексы могут быть порядкового типа. Типы первого и второго индексов могут различаться.
По такому же принципу можно объявить не только двумерные, но и многомерные массивы. Размерность массивов ограничивает только объем памяти конкретной ЭВМ.
Пример описания трехмерных массивов aиb
type
vec = array [1..3] of integer;
mas = array [1..5] of vec;
tmas = array [1..8] of mas;
var
a: tmas;
b: array [1..3,1..5,1..8] of integer;
Над многомерными массивами как единым целым можно выполнить три действия: операции отношения =, < >; оператор присваивания. Эти действия выполняются аналогично, как и с одномерными массивами.
В многомерных массивах последний индекс возрастает первым, например:
var
A: array [1..2,1..3] of real;
A[1,1]
A[1,2]
A[1,3]
A[2,1]
A[2,2]
A[2,3]
Первый индекс обозначает номер строки в матрице, второй индекс – номер столбца. Например, запись А[2,3] делает доступным для обработки значение элемента, находящегося во второй строке третьего столбца массива А.
Для работы с двумерными массивами обычно используются вложенные циклы. Часто применяется структура алгоритма вложенных циклов со счетчиками (рис. 6.1).
Рис. 6.1. Схема алгоритма вложенных циклов
Обнуление элементов двумерного массива можно выполнить, используя вложенные операторы for:
for K:=1 to 3 do
for L:=1 to 5 do
A[K,L]:=0;
Ввод значений элементов двумерного массива с клавиатуры и вывод на форму приложения можно осуществить с помощью компоненты TStringGridстраницыAdditional, предназначенной для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. С помощью компонентыEdit, представляющей собой однострочный редактор текста, можно вводить и (или) отображать длинные текстовые строки на форме приложения.
Пример
{i– номер столбца;j– номер строки таблицыStringGrid1.}
Edit1.text:=StringGrid1.Cells[i,j];
После выполнения этого оператора присваивания в поле Edit1.Textбудет содержаться текст из ячейки таблицыStringGrid1.
Начиная с четвертой версии Delphi, были введенымногомерныединамические массивы.Размеры динамического массива можно установить во время выполнения программы.
Описание двумерного динамического массива целых чисел:
var
mas: array of array of integer;
Выполнять операции с динамическим массивом можно только после задания размеров этого массива процедурой
SetLength(mas,n1,n2);
Параметрами этой процедуры являются: mas– имя массива;n1 – количество строк;n2 – количество столбцов.
Нумерация элементов динамического массива начинается с нуля.
Пример.Обнулить элементы динамического двумерного массива, имеющего 5 строк и 5 столбцов:
var mas: array of array of real;
i,j: integer;
begin
SetLength(mas,5,5);
for i:=0 to 4 do
for j:=0 to 4 do
mas[i,j]:=0;
end;
Пример программирования с использованием двумерного массива
Задание. Подсчитать сумму всех элементов в двумерном массиве А [4,5].
1. Разработка алгоритма (рис. 6.2):
а) входные данные: A – массив, состоящий из вещественных чисел;
б) выходные данные: sum– вещественная переменная, сумма всех элементов массива;
в) промежуточные данные: i, j– счетчики циклов.
При вычислении суммы элементов массива в начале алгоритма переменную, хранящую сумму, необходимо обнулить.
При вычислении произведения элементов массива в начале алгоритма переменной, хранящей произведение, необходимо присвоить единицу.
Рис.6.2. Схема алгоритма вычисления суммы элементов массива
2. Разработка формы (рис. 6.3, табл. 6.1):
Рис.6.3. Внешний вид формы
Таблица 6.1
Используемые компоненты
Имя компонента |
Страница палитры компонент |
Настраиваемые свойства |
Значение |
1. Form1 |
– |
Caption |
Лабораторная работа №6 |
2. Label1 |
Standard |
Caption |
Введите элементы матрицы |
3. Label2 |
Standard |
Caption |
Сумма элементов равна |
4. Label3 |
Standard |
Caption |
|
5. Button1 |
Standard |
Caption |
Рассчет |
6. StringGrid1 |
Additional |
FixedCols |
0 |
RowCount |
4 | ||
FixedRows |
0 | ||
Options |
[goEditing, goTabs] |
3. Текст программы:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const m=4; n=5;
type
mas=array [0..m-1,0..n-1] of real;
var
i,j:integer;
a:mas; sum:real;
begin
//ввод массива
for i:=0 to m–1 do
for j:=0 to n–1 do
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
sum:=0;
for i:=0 to m-1 do
for j:=0 to n-1 do
sum:=sum+a[i,j];
//вывод результата
Label3.Caption:=FloatToStr(sum);
end;
end.