Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Замечание



Напоминаем, что для создания процедуры, связанной с каким-то событием, произошедшим с компонентом, нужно перейти на вкладку 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.022 с)...