Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Новая методичка.rtf
Скачиваний:
6
Добавлен:
22.07.2019
Размер:
7.64 Mб
Скачать

Лабораторная работа №9

Двумерные динамические массивы

Цель работы:

  • изучение типа данных “динамический массив”;

  • получение навыков программирования обработки одномерных и двумерных динамических массивов средствами Pascal;

  • освоение основных приемов для разработки приложения, использующего модуль не связанный с формой, с подпрограммами для использования из приложения.

Пример 9.1. Операции ввода и вывода двумерного массива с использованием компонент Edit, StringGrid

Дано: матрица размером . ( ; ). Сформировать вектор элементов, расположенных между min и max элементами матрицы.

Таблица имен переменных:

Имя

Структура

Тип

Семантика

m

n

k

a

b

простая

простая

простая

одном. массив

одном. массив

целый

целый

целый

целый

целый

Количество строк матрицы

Количество столбцов матрицы

Количество элементов сформированного массива

Исходная матрица

Сформированный массив из элементов матрицы, расположенных между min и max элементами матрицы

Размещенные компоненты:

Компонент

Свойство

Значение

Label  - Label13

Edit1 – Edit5

StringGrid

Caption

Caption

ColCount

RowCount

FixedCols

FixedRows

От “Формирование одномерного массива” до “Элементы матрицы, расположенные…”

Пусто

11(количество столбцов)

11(количество строк)

1(количество фикс. столбцов)

1( количество фикс. строк)

Вид формы с компонентами:

Отметим, что максимальные размеры матрицы:

m = 10 – количество строк; n = 10 – количество столбцов;

В таблице количество строк и столбцов на 1 больше, т.к. в таблице есть фиксированная часть.

Процедура обработки щелчка на кнопке “Ввод”

(формирование двумерного массива – вводом элементов из поля Edit3, перед процедурой необходимо разместить функцию GetSubstr в разделе Implementation)

procedure TForm1.Button1Click(Sender: TObject);

Var I,j,k:integer;

begin

m:=StrToInt(Edit1.text); n:=StrToInt(Edit2.text);

SetLength(a,m);

for i:=0 to m-1 do SetLength(a[i],n);{Ввод матрицы из Edit3}

k:=1;

for i:=0 to m-1 do

for j:=0 to n-1 do

begin a[i,j]:=StrToInt(GetSubStr(Edit3.text,k));

k:=k+1

end;end;

Процедура обработки щелчка на кнопке “Вывод”

(Вывод введенной матрицы в таблицу)

procedure TForm1.Button2Click(Sender: TObject);

Var I,j:integer;

begin

{Вывод номеров строк в 0-м столбце и столбцов в 0-й строке}

with StringGrid1 do

begin i:=0; //0-й столбец

for j:=1 to RowCount-1 do //вывести номера строк

Cells[i,j]:=IntToStr(j);

j:=0; //0-я строка

for i:=1 to ColCount-1 do //вывести номера столбцов

Cells[i,j]:=IntToStr(i);

end;

with StringGrid1 do {Вывод элементов матрицы в таблицу}

for i:=0 to m-1 do

for j:=0 to n-1 do Cells[j+1,i+1]:=IntToStr(a[i,j]);

end;

Процедура обработки щелчка на кнопке “Расчет”

(Развертывание матрицы в вектор, поиск максимального и минимального элемента этого вектора, а также индексов этих элементов, а затем формирование массива из тех элементов, которые располагаются между min и max элементами (или между max и min)).

procedure TForm1.Button3Click(Sender: TObject);