Цель лабораторной работы: изучить свойства компонента TStringGrid. Написать программу с использованием массивов.
Работа с массивами
Массив есть упорядоченный набор однотипных элементов, объединенных под одним именем. Каждый элемент массива обозначается именем, за которым в квадратных скобках следует один или несколько индексов, разделенных запятыми, например: a[1], bb[I], c12[I, j*2], q[1,1,I*j-1].. В качестве индекса можно использовать любые порядковые типы за исключением LongInt.
Тип массива или сам массив определяются соответственно в разделе типов (Type) или переменных (Var) с помощью ключевого слова Array Следующим образом:
Array [описание индексов] Of <тип элемента массива>
Примеры описания массивов:
Const N=20; // Задание максимального значения индекса;
Type TVector=Array[1..N] Of real; // Описание типа одномерного массива;
Var a:TVector; // А – массив типа Tvector;
Ss:Array[1..10] Of integer; // Ss – массив из десяти целых чисел;
Y:Array[1..5,1..10] Of char; // Y – двумерный массив символьного типа.
Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:
F:=2*a[3]+a[ss[I]+1]*3;
A[n]:=1+sqrt(abs(a[n-1]));
Компонент TStringGrid
При работе с массивами ввод и вывод информации на экран удобно организовывать в виде таблиц. Компонент TStringGrid предназначен для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну TEdit). Доступ к информации осуществляется с помощью свойства Cells[ACol, ARow: Integer]: string, где ACol, Arow — индекс элемента двумерного массива. Свойства ColCount и RowCount устанавливают количество строк и столбцов в таблице, а свойства FixedCols и FixedRows задают количество строк и столбцов фиксированной зоны. Фиксированная зона выделена другим цветом, и в нее запрещен ввод информации с клавиатуры.
Порядок выполнения задания
Задание: создать программу для определения вектора , где А — квадратная матрица размерностью NxN, а Y, B – одномерные массивы размерностью N. Элементы вектора Y определяются по формуле
. Значения N вводить в компонент TEdit, А и B — в компонент TStringGrid. Результат, после нажатия кнопки типа TButton, вывести в компонент TStringGrid.
Панель диалога приведена на рис. 4.1.
Настройка компонента TStringGrid
Для установки компонента TStringGrid на форму необходимо на странице Additional меню компонентов щелкнуть мышью по пиктограмме . После этого щелкните мышью в нужном месте формы. Захватывая кромки компонента отрегулируйте его размер. В инспекторе объектов значения свойств ColCount и RowCount установите 2 (две строки и два столбца), а FixedCols и FixedRows установите 1 (один столбец и одна строка с фиксированной зоной). Т. к. компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них: ColCount= 1, RowCount=2, FixedCols=0 и FixedRows=1. По умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 и StringGrid2 установить в положение True.
Текст программы приведен ниже.
Unit tem4;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids;
Type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const
Nmax=10; // Максимальная размерность массива
Type
Mas2 = array[1..Nmax,1..Nmax] of extended; // Объявление типа двумерного массива размерностью Nmax
Mas1 = array[1..Nmax] of extended; // Объявление типа одномерного массива размерностью Nmax
Var
Form1: TForm1;
A : Mas2; // Объявление двумерного массива
B, Y : Mas1; // Объявление одномерных массивов
N, i,j : integer;
Implementation
{$R *.DFM}
Procedure TForm1.FormCreate(Sender: TObject);
Begin
N:=3; // Размерность массива
Edit1.Text:=FloatToStr(N);
{Задание числа строк и столбцов в таблицах}
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=N+1;
StringGrid2.RowCount:=N+1;
StringGrid3.RowCount:=N+1;
{Ввод в левую верхнюю ячейку таблицы названия массива}
StringGrid1.Cells[0,0]:=’Массив A:’;
StringGrid2.Cells[0,0]:=’Массив B:’;
StringGrid3.Cells[0,0]:=’Массив Y:’;
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to N do begin
StringGrid1.Cells[0,i]:=’ i= ‘+IntToStr(i);
StringGrid1.Cells[i,0]:=’ j= ‘+IntToStr(i);
end;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
N:=StrToInt(Edit1.Text);
{Задание числа строк и столбцов в таблицах}
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=N+1;
StringGrid2.RowCount:=N+1;
StringGrid3.RowCount:=N+1;
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to N do begin
StringGrid1.Cells[0,i]:=’ i= ‘+IntToStr(i);
StringGrid1.Cells[i,0]:=’ j= ‘+IntToStr(i);
end;
End;
Procedure TForm1.Button2Click(Sender: TObject);
var s: extended;
Begin
{Заполнение массива А элементами из таблицы StringGrid1}
for i:=1 to N do
for j:=1 to N do
A[i, j]:=StrToFloat(StringGrid1.Cells[j, i]);
{Заполнение массива B элементами из таблицы StringGrid2}
for i:=1 to N do
B[i]:=StrToFloat(StringGrid2.Cells[0,i]);
{Умножение массива А на массив В}
for i:=1 to N do begin
s:=0;
for j:=1 to N do s:=s+A[i, j]*B[j];
Y[i]:=s;
{Вывод результата в таблицу StringGrid3}
StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);
end;
End;
End.