Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

из символьного представления в числовое и обратно.

В программах такого рода, где в основном производятся вычисления,

обычно преобразования выполняются всего два раза! В начале работы про-

граммы (при вводе исходных данных) строки символов преобразуются в числа,

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

ченные результаты (числовые) преобразуются в их строковое представление для вывода на экран или принтер. При всех прочих равных условиях, эта про-

грамма будет работать на порядок (если не больше) медленнее, чем программа,

в которой сначала все данные преобразованы в числа.

Теперь посмотрите на код, которым реализован ввод коэффициентов. Там

"сам черт ногу сломит"! Используется слишком много условных операторов.

Кроме того, в программе напрочь отсутствует контроль вводимых данных.

Хотя стандартная реакция системы поможет избежать аварийного завершения программы, рис. 6.58.

Рис. 6.58. Пример возникновения исключения

Нажав кнопку ОК, пользователь еще может ввести правильное число.

Давайте исправим программу с учетом сделанных выше замечаний. Чтобы

606

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

пользователь мог видеть все введенные коэффициенты, а также редактировать их удобнее применить компонент TStringGrid. Поэтому, сначала познако-

мимся с этим компонентом.

6.3.10.2. Компонент TStringGrid

TStringGrid находится во вкладке Additional и имеет вид, рис. 6.59.

Рис. 6.59. Вид компонента TStringGrid

Компонент представляет собой таблицу, состоящую из строк Rows и

столбцов Cols. В свою очередь таблица это двумерный массив, значениями которого являются строки символов и, следовательно, имеет тип string. Дос-

туп к данным осуществляется через свойство Cells. Ячейке таблицы, нахо-

дящейся на пересечении столбца с номером Col и строки с номером Row, соот-

ветствует элемент массива Cells[Col,Row]. Обратите внимание, вначале указывается столбец, а затем строка. Нумерация столбцов и строк начинается с нуля. Основные свойства компонента TStringGrid следующие:

ColCount – количество столбцов таблицы;

RowCount – количество строк таблицы;

FixedCols – количество фиксированных столбцов таблицы. Обычно фик-

сируется один, самый левый столбец и используется для задания постоянной информации, например, заголовка столбца. Но можно зафиксировать и больше

607

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

столбцов. При этом зафиксированные столбцы выделяются цветом и при гори-

зонтальной прокрутке таблицы остаются на месте;

FixedRows – количество фиксированных строк таблицы. Точно так же,

фиксируется обычно одна строка для задания заголовка, но можно зафиксиро-

вать и больше строк. Строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте;

FixedColor – цвет фиксированных строк и столбцов.

VisibleColCount – количество видимых (прокручиваемых) столбцов,

равно ColCount FixedCols;

VisibleRowCount – количество видимых (прокручиваемых) строк, равно

RowCount FixedRows;

ScrollBars – определяет наличие в таблице полос прокрутки. Если ука-

зать значение ssAutoBoth, то полосы прокрутки будут появляться и исчезать автоматически в зависимости от того, помещается таблица в окно компонента или нет.

Во вкладке Options свойств TStringGrid определены ряд свойств,

наиболее важными из которых являются:

goEditing – разрешает или запрещает редактирование содержимого яче-

ек таблицы. true – редактирование разрешено, false – запрещено;

goTab – разрешает (true) или запрещает (false) использование клави-

ши <Таb> для перемещения курсора в следующую ячейку таблицы;

goAlwaysShowEditor – признак нахождения компонента в режиме ре-

дактирования. Если значение свойства false, то для того, чтобы в ячейке поя-

вился курсор, надо начать набирать текст, нажать клавишу <F2> или сделать щелчок мышью.

Итак, вернемся к реализации метода Гаусса решения системы линейных алгебраических уравнений. Для ввода коэффициентов расширенной матрицы системы воспользуемся компонентом TStringGrid. Создайте новый проект и

608

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

спроектируйте вид приложения так, как показано на рисунке 6.60.

Установите следующие свойства компонента TStringGrid:

ColCount = 1; RowCount = 1; FixedCols = 0; FixedRows = 0;

goEditing = true; goTab = true;

goAlwaysShowEditor = true;

Рис. 6.60. Форма приложения

Код программы:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, Grids, LCLType, LCLProc;

type

{ TForm1 }

TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Edit1: TEdit;

609

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

Label1: TLabel;

Label2: TLabel;

Label4: TLabel;

Memo1: TMemo; StringGrid1: TStringGrid;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject;

var Key: char); procedure FormShow(Sender: TObject); procedure Gauss(var vector: array of extended;

var b: array of extended; var x: array of extended; var n: integer);

procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState); private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; n: integer;

a:array of array of extended;{матрица коэффициентов системы, двумерный динамический массив}

vector: array of extended; {преобразованный одномерный динамический массив }

b:array of extended;

x: array of extended; implementation

{ TForm1 }

procedure TForm1.Gauss(var vector: array of extended; var b: array of extended; var x: array of extended; var n: integer);

var

a: array of array of extended;{матрица коэффициентов системы, двумерный динамический массив}

i, j, k, p, r: integer;

610

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773