Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_4.doc
Скачиваний:
2
Добавлен:
26.09.2019
Размер:
118.78 Кб
Скачать

Задание №4

Работа со структурами данных типа массив

Объекты: Form, StringGrid, Button, кнопка BitBtn

Теоретические сведения.

Таблица строк StringGrid.

Для ввода и вывода массивов удобно использовать компонент StringGrid. Этот компонент находится на вкладке Additional.

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

На пересечении строк и столбцов находятся ячейки. Каждая ячейка может содержать символьную строку или произвольный объект, ассоциируемый с ячейкой. Чаще всего таким объектом является некоторый рисунок. Если для ячеек задан режим редактирования, то на этапе выполнения программы разрешается вводить и редактировать, данные находящиеся в ячейке.

Нумерация строк и столбцов таблицы начинается с нуля. Координаты каждой ячейки таблицы задаются парой чисел, первое из которых является номером столбца, а второе – номером строки. Например, ячейка Cells[3, 5] расположена в четвертом столбце и шестой строке.

Свойство

Описание свойства

Name

Имя компонента. Используется в программе для доступа к свойствам компонента

Cells

Соответствующий таблице двумерный строковый массив. Если строки и столбцы таблицы нумеровать с нуля, то ячейке (Cell) таблицы, находящейся на пересечении i-й колонки и j-й строки соответствует Cells[i,j] элемент массива

ColCount

Задает число столбцов в таблице

RowCount

Задает число строк в таблице

FixedCols

Задает число фиксированных столбцов таблице, которые не прокручиваются слева. По умолчанию задается один фиксированный столбец

FixedRows

Задает число фиксированных строк таблице, которые не прокручиваются вверх. По умолчанию задается одна фиксированная строка.

Options

Свойство является множеством, определяющим многие свойства таблицы.

Options.goEditing

Признак допустимого редактирования содержимого ячеек таблицы

Options.goColSizing,

Options.goRowSizing

Возможность для пользователя изменять с помощью мыши размеры столбцов и строк

DefaultColWidth

Ширина колонок

DefaultRowHeight

Высота строк

GridLineWidth

Ширина линий ограничивающих ячейки таблицы

Left

Расстояние от левой границы поля таблицы до левой границы формы

Top

Расстояние от верхней границы поля таблицы до верхней границы формы

Height

Высота поля таблицы

Width

Ширина поля таблицы

Font

Шрифт, используемый для отображения содержимого ячеек

Компонент BitBtn – кнопка с рисунком и определенным типом действия. Стандартный набор файлов с рисунками для кнопок находится в папке C:\Program Files\Borland\Images\Buttons. Этот компонент обладает такими свойствами:

Свойство

Описание свойства

Примеры значении

Glyph

Рисунок из файла на кнопке

Адрес файла задается в диалоговом окне

Kind

Тип стандартного действия

bkClose (закрывает окно), bkCancel (кнопка "Отменить" диалогового окна), bkNo (кнопка "Нет" диалогового окна)

Далее приведен пример работы с компонентом StringGrid. Задание на лабораторную работу притведено после примера.

Ход работы

1. Для создания нового проекта можно воспользоваться командой главного меню File New | Application либо, если вы только что загрузили среду Delphi, можно, сразу приступать, к созданию нового проекта.

2. Откажитесь от возможности изменять окна программы, указав значение свойства формы BorderStyle на bsDilog. При запуске программы обратите внимание на отсутствие кнопок для минимизации максимизации окна. Рассмотрите другие свойства и чем они отличаются.

3. Свойству Caption для Form1 задайте значение – Лабораторная работа №5. Работа с массивами.

4. Со вкладки Additional на Form1 поместим три компонента StringGrid.

Зададим следующие значения

Свойство

Значение

StringGrid1

StringGrid2

StringGrid3

Name

SG1

SG2

SG3

ColCount

7

5

5

RowCount

2

2

7

FixedCols

1

1

1

FixedRows

1

1

1

DefaultColWidth

50

50

50

Options.goEditing

(возможность редактировать)

True

(имеется)

True

(имеется)

False

(отсутствует)

Замечание. Чтобы открыть список свойства Options (Параметры) объекта, надо дважды щелкнуть на этом слове в окне Object Inspector данного объекта.

5. Со вкладки Standard на Form1 поместим два компонента Button. Свойству Caption для Button1 задайте значение – &Вычислить. Свойству Caption для Button2 задайте значение – &Очистить.

Замечание. Символ & в заголовке кнопки указывает на то, что эту кнопку можно нажать также с помощью «горячей» комбинации клавиш Alt + Shift+ буква заголовка, перед которой стоит этот символ (т.е. в нашем случае Alt +Shift + 3).

6. Со вкладки Additional на Form1 поместим командную кнопку BitBtn. Кнопки такого типа владеют свойством Kind (стандартное действие) с возможными значениями bkClose (Закрыть), bkCancel (Отменить), bkYes (Да), bkNo (Нет), bkHelp (Помощь) и другими. На них также могут быть расположены пиктограммы. Если задать стандартное действие, то данную кнопку программировать не нужно. Задайте следующие свойства для вставленного объекта:

Свойство

Значение

Kind

bkClose

Caption

&3акрыть

7. Сохраним проект в отдельной папке.

8. Ячейки первой, зафиксированной, строки и первого, зафиксированного, столбца таблицы используются в качестве заголовков колонок и строк таблиц. Во время создания (проектирования) формы приложения установить значения элементов массива Cells нельзя, так как элементы массива доступны только во время работы программы. Поэтому значения элементов массива Cells, соответствующих первой строке и первому столбцу таблиц, устанавливает процедура обработки события onActivate, которое происходит во время обработки формы приложения. Кроме этого процедура вписывает в первые строки и первые столбцы таблиц их заголовки.

Запрограммируем процедуру onActivate

Для того чтобы запрограммировать процедуру обработки события onActivate необходимо чтобы в Object Inspector в списке компонент текущей формы стояла надпись:

Form1

TForm1

Тогда на вкладке Events в столбце названий событий находим событие onActivate. Этому стандартному событию соответствует название метода (FormActivate), которое появится после двойного щелчка мыши в правом столбце (столбец названий обработчиков событий). В этот момент в окно текста программы добавляется шаблон базового кода (процедуры) для этого метода. Шаблон необходимо заполнить соответствующими командами.

procedure TForm1.FormActivate(Sender: TObject);

v ar I:byte;

begin

//Для SG1

//Записываем символ X в ячейку находящуюся

//в первом столбике и первой строке ячейка - Cells [0,0]

SG1.Cells[0,0]:=' X ';

//Ячейка Cells[0,l] указывает на количество строк

//т.е. массив одномерный

SG1.Cells[0,1]:='Row N 1';

//Заполняются заголовки столбцов

For i:=1 to SG1.ColCount-1 do

SG1.Cells[i,0]:='Col N'+IntToStr(i);

//Для SG2

SG2.Cells[0,0]:=' Y ';

SG2.Cells[0,1]:='Row N 1';

For i:=1 to SG2.ColCount-1 do

SG2.Cells[i,0]:='Col N'+IntToStr(i);

//Для SG3

SG3.Cells[0,0]:=' X+Y ';

//Заполняются заголовки столбцов

fOR i:=1 to SG3.ColCount-1 do

SG3.Cells[i,0]:='Col N'+IntToStr(i);

//Заполняются заголовки строк

fOR i:=1 to SG3.RowCount-1 do

SG3.Cells[0,i]:='Row N'+IntToStr(i);

end;

9. Запрограммируем кнопку «Вычислить».

procedure TForm1.Button1Click(Sender: TObject);

Const N=6;M=4;

var i,j:byte;

x:array [1..N]of integer;

y:array [1..M]of integer;

z:array [1..N,1..M]of integer;

begin

//Заполняем первую таблицу SG1 - массив Х

fOR i:=1 to SG1.ColCount-1 do

x[i]:=StrToInt(SG1.Cells[i,1]);

//Заполняем первую таблицу SG2 - массив У

fOR j:=1 to SG2.ColCount-1 do

y[j]:=StrToInt(SG2.Cells[j,1]);

//Вычисляем сумму двух векторов

fOR i:=1 to N do

fOR j:=1 to M do

begin

z[i,j]:=x[i]+y[j];

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

end;

end;

Для решения этой задачи можно было не использовать промежуточные массивы, а работать прямо с ячейками таблиц:

fOR i:=1 to SG1.ColCount-1 do

fOR j:=1 to SG2.ColCount-1 do

SG3.Cells[j,i]:=IntToStr(StrToInt(SG1.Cells[i,1])+StrToInt(SG2.Cells[j,1]));

10. Запрограммируем кнопу «Очистить». Необходимо очистить ячейки всех трех таблиц.

procedure TForm1.Button2Click(Sender: TObject);

var i,j:byte;

begin

with SG1 do

for i:=1 to ColCount do Cells[i,1]:=' ';

with SG2 do

for i:=1 to ColCount do Cells[i,1]:=' ';

with SG3 do

for i:=1 to RowCount do

for j:=1 to ColCount do Cells[j,i]:=' ';end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]