Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Программирование с использованием двумерных массивов в системе 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];

После выполнения этого оператора присваивания в поле Edit 1 .Text будет содержаться текст из ячейки таблицы StringGrid 1.

Начиная с четвертой версии 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  
RowCount  
FixedRows  
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.

Контрольные вопросы к главе 6

1. Какие свойства компонента StringGrid нужно настроить для ввода и вывода элементов двумерного массива?

2. Написать фрагмент программы ввода двумерного целочисленного массива, в котором 5 строк и 10 столбцов.

3. Написать фрагмент программы вывода двумерного вещественного массива, в котором 5 строк и 6 столбцов.

4. Дать описание трехмерного целочисленного массива.

5. Дать описание динамического четырехмерного целочисленного массива с использованием разделов описания type и var.

6. Заданы массивы:

var

A, B: array[1..15,0..8] of real;

Какие операции над этими массивами как над единым целым допустимы в системе Delphi?

7. Ввести квадратную вещественную матрицу 4-го порядка, элементы которой заданы построчно, и распечатать ее по столбцам.

8. Сколько элементов содержит каждый из описанных ниже массивов?

var

MB: array [¢A¢.. ¢C¢,1..3] of real;

MC: array [FALSE..TRUE] of array [1..5] of char;

MD: array [1..5,0..4] of integer;

9. Присвоить нулевые значения всем элементам массива:

А: array [¢K¢..¢Z¢] of real.

10. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих ниже главной диагонали?

11. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих выше главной диагонали?

12. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих левее вспомогательной диагонали?

13. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих правее вспомогательной диагонали?

14. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих на вспомогательной диагонали?

15. Какие значения должны принимать счетчики циклов для перебора элементов квадратного массива, лежащих на главной диагонали?






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных