![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Напоминаем, что для создания процедуры, связанной с каким-то событием, произошедшим с компонентом, нужно перейти на вкладку Events (события), найти нужное событие в строке, например OnCreate, и справа вписать название события (в данном примере Create). В модуле автоматически будет создана заготовка процедуры создания формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
Если щелкнуть по компоненту Edit, то автоматически будет создана заготовка процедуры обработки события изменение компонента Edit:
procedure TForm1.Edit1Change(Sender: TObject);
begin
end;
Нужно изменить событие Change (изменить) на событие Exit (выход). Для этого обязательно перейти на вкладку события (Events) в инспекторе объектов. В строке OnExit раскрыть список, выбрать название Edit1Change и заменить Change на Exit.
Для ввода двумерного массива из StrigGrid необходимо записать операторы, подобные этим:
For i:=1 to StringGrid1.RowCount-1 do
For j:=1 to StringGrid1.ColCount-1 do
begin
Massiv[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
end; {в данном случае begin и end можно опустить}
Для вывода:
For i:=1 to StringGrid1.ColCount-1 do
For j:=1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[j,i]:=FloatToStr(Massiv[i,j]);
Понятие о классах в Delphi
В языке объектно-ориентированного программирования Delphi дается возможность определять так называемые классы. Класс — это сложная структура, включающая помимо описания данных, описание процедур и функций, которые могут быть выполнены над представителем класса — объектом.
Система Delphi всегда сама генерирует свои классы во время проектирования приложения.Описание сформированного класса находится в разделе type интерфейсной части модуля. Например, в программе про бак для летнего душа из темы 1 описание класса выглядит так:
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label5: TLabel;
Label6: TLabel;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Как мы видим, в класс включены компоненты (данные) и методы их обработки (процедуры). В секции private (закрытые) объявляются элементы класса, которые должны быть недоступны в других модулях. В секции public (открытые) помещаются элементы, доступные в других модулях.
Практика
Задача
Составить программу для транспонирования квадратной матрицы порядка N и определения следа матрицы.
Транспонированной матрицей к исходной является такая матрица, у которой элементы строк исходной матрицы расставлены в столбцы, а элементы столбцов исходной в строки.
Следом матрицы называется сумма главных диагональных элементов.
Компоненты
Имя компонента | Свойства компонента | Значение | Назначение |
Form1 | Caption | Матрица | Заголовок главной формы |
Label1 | Caption | Программа предназначена для преобразования квадратной матрицы (количество строк равно количеству столбцов) | Справочная информация для пользователя программы |
Label2 | Caption | Размерность матрицы | Подсказка пользователю |
Edit1 | Text | ….. | Поле для ввода размерности матрицы |
Form1.StringGrid1 | ColCount FixedCol FixedRow Options: goFixedVertLine goFixedHorzLine goVertLine goHorzLine goTabs goAlwaysShowEditor | True True True True True True | Количество столбцов по умолчанию Количество фиксированных слева столбцов Количество фиксированных сверху строк Опции: Разметка зафиксированных вертикальных линий Разметка зафиксированных горизонтальных линий Разметка вертикальных линий внутри таблицы Разметка горизонтальных линий внутри таблицы Разрешает использование клавиши Tab для перемещения в другую ячейку Признак нахождения компонента в режиме редактирования |
Form1.Button1 | Caption | Транспонированная матрица | Кнопка для выполнения транспонирования и вывода в новое окно |
Form1.Button2 | Caption | След матрицы | Кнопка для вычисления следа матрицы и вывода в новое окно |
Form1.Button3 | Caption | Выход | Кнопка для завершения работы программы |
Form2 | Caption | Транспонированная матрица | Заголовок формы |
Form2.StringGrid1 | ColCount FixedCol FixedRow Options: goFixedVertLine goFixedHorzLine goVertLine goHorzLine goTabs goAlwaysShowEditor | True True True True True True | Количество столбцов по умолчанию Количество фиксированных слева столбцов Количество фиксированных сверху строк Опции: Разметка зафиксированных вертикальных линий Разметка зафиксированных горизонтальных линий Разметка вертикальных линий внутри таблицы Разметка горизонтальных линий внутри таблицы Разрешает использование клавиши Tab для перемещения в другую ячейку Признак нахождения компонента в режиме редактирования |
Form2.Button1 | Caption | Выход | Кнопка для закрытия окна “Транспонированная матрица” |
Form3 | Caption | След матрицы | Заголовок формы |
Label1 | Caption | Сумма главных диагональных элементов матрицы называется следом матрицы | Справочная информация для пользователя программы |
Label2 | Caption | Поле для вывода, рассчитанного программой значения следа матрицы | |
Form3.Button1 | Caption | Выход | Кнопка для закрытия окна “След матрицы” |
Переменные и массивы
Обозначение в программе | Содержание | Тип |
N | Порядок квадратной матрицы | Целый |
M | Квадратная матрица действительных чисел | Вещественный, расширенный |
I | Текущий номер строки матрицы или столбца в StringGrid | Целый |
J | Текущий номер столбца матрицы или строки в StringGrid | Целый |
Sled | След матрицы | Вещественный, расширенный |
Проекты форм
Для решения данной задачи рекомендуется создать три окна.
Текст модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Grids,Unit2,Unit3;
// подключаются модули, связанные со второй и третьей формами
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
M:array [1..100,1..100] of Extended; // квадратная матрица
N:Integer;// порядок матрицы
Sled: Extended; // след матрицы
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// процедура читает из таблицы на главной форме квадратную матрицу
// транспонирует матрицу и выводит в таблицу StringGrid
// на вторую форму
procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer; // номер строки матрицы/номер столбца StringGrid
j:Integer; // номер столбца матрицы/номер строки StringGrid
begin
// чтение значений квадратной матрицы из компонента StringGrid
// главной формы
For i:=1 to StringGrid1.RowCount-1 do
For j:=1 to StringGrid1.ColCount-1 do
begin
M[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
// открывается вторая форма
Form2.Show;
// количеству строк и столбцов компонента StringGrid на второй форме
// присваивается значение порядок: матрицы +1
Form2.StringGrid1.RowCount:=N+1;
Form2.StringGrid1.ColCount:=N+1;
// подписываются заголовок таблицы, и номера строк
For i:=1 to Form2.StringGrid1.RowCount do
Form2.StringGrid1.Cells[i,0]:= IntToStr(i);
For j:=1 to Form2.StringGrid1.ColCount do
Form2.StringGrid1.Cells[0,j]:= IntToStr(j);
{ вывод в компонент StringGrid на второй форме транспонированной матрицы}
{ Транспонированная матрица не создается. Транспонирование осуществляется путем вывода столбца исходной матрицы в строку компонента StringGrid. В StringGrid номер столбца i, номер строки j.}
For i:=1 to Form2.StringGrid1.ColCount-1 do
For j:=1 to Form2.StringGrid1.RowCount-1 do
Form2.StringGrid1.Cells[i,j]:=FloatToStr(M[i,j]);
end;
{ Процедура подготовки таблицы на форме для ввода квадратной матрицы, которая выполняется при выходе из поля ввода размерности матрицы.}
procedure TForm1.Edit1Exit(Sender: TObject);
Var i,j:Integer;//номера строки столбца квадратной матрицы
begin
// порядок матрицы получает свое значение из поля ввода
N:=StrToInt(Edit1.Text);
// свойство количество строк компонента StringGrid
// получает значение: порядок +1
StringGrid1.RowCount:=N+1;
// свойство количество столбцов компонента StringGrid
// получает значение порядок: +1
StringGrid1.ColCount:=N+1;
//подпись заголовка таблицы
For i:=1 to StringGrid1.RowCount do
StringGrid1.Cells[i,0]:= IntToStr(i);
//подпись строк таблицы
For j:=1 to StringGrid1.ColCount do
StringGrid1.Cells[0,j]:= IntToStr(j);
// добавление в свойства таблицы признака
// допустимости редактирования содержимого ячеек таблицы
StringGrid1.Options:= StringGrid1.Options +[goEditing];
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close
end;
// процедура вычисляет след матрицы и выводит результат
// на третью форму
procedure TForm1.Button2Click(Sender: TObject);
Var i: Integer;
begin
Sled:=0;
Form3.Show;
For i:=1 to Form1.StringGrid1.ColCount-1 do
Sled:= Sled + M[i,i];
Form3.Label2.Caption:=' След матрицы равен ' + FloatToStr(Sled)
end;
end.
{ Модуль, связанный со второй формой}
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm2 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Close
end;
end.
{ Модуль, связанный с третьей формой.}
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
M:array [1..100,1..100] of Extended;
N:Integer;
Sled: Extended;
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Form3.Close
end;
end.
Дата публикования: 2014-11-02; Прочитано: 614 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!