Лабораторная. Лабораторный практикум(часть1) Электронный. Практикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей
Скачать 3.27 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА 4Разработка приложения с использованием массивовЦель лабораторной работы: изучить свойства компоненты TStringGrid. Написать программу с использованием массивов. 1. Краткие сведения1.1. Работа с массивами Массив есть упорядоченный набор однотипных элементов, объединенных под одним именем. Каждый элемент массива обозначается именем, за которым в квадратных скобках следует один или несколько индексов, разделенных запятыми, например: а[1], bb[I], с12[I, j*2], q[l, 1, I*j-l]. В качестве индекса можно использовать любые порядковые типы за исключением LongInt. Тип массива или сам массив определяются соответственно в разделе типов (Type) или переменных (Var) с помощью ключевого слова Array следующим образом: Array [описание индексов] of <тип элементов массива > Примеры описания массивов: Const N=20; // Задание максимального значения индекса; Type TVector = array [1..N] of real; // Описание типа одномерного массива; Var A : TVector; //A - массив типа TVector; Ss : array[1..10] of integer; //Ss - массив из десяти целых чисел; Y : array[1..5, 1..10] of char; //Y -двумерный массив символьного типа. Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например: F:= 2*a[3] + a[ss[l] + 1]*3; A[n]:= 1+sqrt(abs(a[n-1])); 1.2. Компонент TStringGrid При работе с массивами ввод и вывод информации на экран удобно организовывать в виде таблиц, используя компонент TStringGrid. Последний предназначен для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну TEdit). Доступ к информации осуществляется с помощью свойства Cells[ACol, ARow : integer] : string; где ACol, ARow - индексы элементов двумерного массива. Свойства ColCount и RowCount устанавливают количество строк и столбцов в таблице, а свойства FixedCols и FixedRows задают количество строк и столбцов фиксированной зоны. Фиксированная зона выделена другим цветом, и в нее запрещен ввод информации с клавиатуры. 1.3. Пример выполнения задания Задание: создать программу для определения вектора: , где А – квадратная матрица; а Y, B – одномерные массивы. Элементы вектора Y определяются по формуле: . Значения N вводить в компонент TEdit, А и В – в компонент TStringGrid. Результат, после нажатия кнопки типа TButton, вывести в компонент типа TStringGrid. Форма приложения приведена на рисунке 4.1. Рисунок 4.1 – Форма приложения 1.3.1. Настройка компонента TStringGrid Для установки компонента TStringGrid на форму необходимо на странице Additional палитры компонентов щелкнуть мышью по пиктограмме . Справочно: TStringGrid– таблица строк. Этот компанент обладает мощными возможностями для представления текстовой информации в табличном виде. После этого щелкните мышью в нужном месте формы. Захватывая кромки компонента, отрегулируйте его размер. В инспекторе объектов значения свойств ColCount и RowCount (количество столбцов и строк рабочей зоны) установите 2, а FixedCols и FixedRows (количество фиксированных столбцов и строк) установите 1. Так как компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них: ColCount=1, RowCount=2, FixedCols=0 и FixedRows=1. По умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 и StringGrid2 установить в положение True. Справочно: элемент множества goEditing типа TGridOption компоненты StringGrid – разрешает редактирование ячейки. Редактирование начинается после щелчка мыши или нажания F2 и завершается при щелчке по другой ячейке или нажатии клавиши Enter. Текст программы: Unit LabRab_4; Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Grids; type TInputForm = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; StringGrid3: TStringGrid; Label1: TLabel; Edit1: TEdit; Button1: TButton; Button2: TButton; Procedure FormCreate(Sender: TObject); Procedure Button1Click(Sender: TObject); Procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const Nmax = 10; // Максимальная размерность массива type TMas1 = array[1..Nmax] of Extended; // Объявление типа одномерного массива TMas2 = array[1..Nmax, 1..Nmax] of Extended; // Объявление типа двумерного массива var InputForm: TInputForm; A : TMas2; // Объявление двумерного массива B, Y : TMas1; // Объявление одномерных массивов N, i, j : integer; Implementation {$R *.dfm} Procedure TInputForm.FormCreate(Sender: TObject); begin N := 3; // Размерность массива Edit1.Text := IntToStr(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 TInputForm.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 TInputForm.Button2Click(Sender: TObject); var s : extended; begin // Заполнение массива A элементами из таблицы 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]); // Умножение массива A на массив B 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. |