Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУКР ОПр.pdf
Скачиваний:
8
Добавлен:
11.02.2016
Размер:
972.13 Кб
Скачать

11

Nmin := J;

for K := J+1 to Tard.NJ-1 do

if Tard.Data[I,Nmin]>Tard.Data[I,K] then Nmin := K;

Vt := Tard.Data[I,Nmin]; Tard.Data[I,Nmin] := Tard.Data[I,J]; Tard.Data[I,J] := Vt;

end; end;

end;

Отладка процедур и функций расчетного модуля.

Отладку можно осуществлять двумя путями первый отложить ее до разработки главного приложения. А можно создать набор консольных приложений

ипроводить отладку с их помощью.

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

2.2 Разработка модуля главного окна приложения.

Прежде всего, необходимо создать новую папку, в которой будет храниться проект, и дать ей понятное название. После чего можно в среде разработки создать новое приложение и сохранить его в эту папку. Модулю главного окна следует дать имя Main. Необходимо помнить, что среда разработки Delphi не позволяет давать русские имена проекту приложения и его отдельным модулям. Поэтому если разработчик желает иметь русское имя исполняемого файла, его можно задать в проводнике после компиляции проекта.

Затем можно приступать к разработке интерфейса главного окна приложения. Вид главного окна приложения в конструкторе окна с указанием его основных компонентов приведен на рис.1.

В него добавлены следующие основные компоненты:

MainMenu1: TMainMenu – главное меню приложения. Структура пунктов главного меню с именами и названиями приведена на рис.2.

StatusBar1: TstatusBar – строка состояния приложения. В нем отражаются текст контекстной подсказки (Hint) и имя файла с матрицей;

ResultsMm: Tmemo – поле редактирования многострочного текста. В него осуществляется вывод результатов расчета и сообщений об ошибках;

OpenDialog: TopenDialog – стандартный диалог открытия файла. Используется для задания имени открываемого файла;

SaveDialog: TSaveDialog

SaveDialog1: TSaveDialog – стандартные диалого сохранения файла. Используются для задания имени сохраняемого файла с матрицей и результатами расчетов.

12

OpenDialog

MainMenu1

SaveDialog

SaveDialog1

ResultsMm

StatusBar1

Рис. 1. Вид главного окна приложения (MainFm).

Рис. 2. Структура главного меню приложения (MainMenu1).

После этого создаем необходимые обработчики событий компонент. Полный текст модуля главного окна приложения приведен в примере. Для экономии места обработчики событий, смысл которых очевиден, в данных методических указаниях не приводятся. Описание назначений обработчиков событий критичных по коду рассмотрены далее.

13

Обработчик FormCreate выполняется при создании главного окна приложения (при его запуске), в нем описаны действия по инициализации приложения. В частности динамически назначается обработчик события Application.OnHint. Значению полей InitialDir всех стандартных диалогов открытия и сохранения присваивается значение, равное названию папки из которой запущено приложение.

procedure TMainFm.FormCreate(Sender: TObject); begin

AddData := True; Application.OnHint := MyHintProc;

OpenDialog.InitialDir := ExtractFilePath(Application.ExeName); SaveDialog.InitialDir := ExtractFilePath(Application.ExeName); SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);

end;

Обработчик события загрузки матрицы из файла (событие OnClick пункта меню OpenMi). В нем реализован защищенный вызов разработанной в модуле Count функции LoadMatrFromFile, в случае неудачи пользователю выводится сообщение об ошибке. Имя файла выбирается пользователем с помощью стандартного диалога открытия файла. Кроме того, пользователь может отменить загрузку.

procedure TMainFm.OpenMiClick(Sender: TObject); begin

if OpenDialog.Execute then begin try

LoadMatrFromFile(Mt,OpenDialog.FileName); FileName := OpenDialog.FileName;

StatusBar1.Panels[0].Text := ExtractFileName(FileName); except

on E:ELoadFile do begin MessageDlg(E.Message,mtError,[mbOK],0);

end; end;

end;

end;

Следующие обработчики позволяют выполнять расчеты (пункты меню Count1, Count2, Count3). В начале каждого из них проверяется значение переменной AddData, которое говорит о необходимости добавлять в отчет исходную матрицу. Результаты расчета выводятся в компонент ResultsMm. Все функции и процедуры, которые могут сгенерировать ситуацию исключения, выполняются в защищенном блоке. В случае, когда результаты расчета являются массивы, перед окончанием работы их следует удалить (сделать нулевого размера).

procedure TMainFm.Count1Click(Sender: TObject);

14

var

R : Double; begin

if AddData then begin

ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);

end; try

R := GetSrArPol(Mt); except

on E:ENoPol do begin ResultsMm.Lines.Add(E.Message); Exit;

end; end;

ResultsMm.Lines.Add(' Среднее арифметическое положительных'+ ' элементов');

ResultsMm.Lines.Add(' R = '+FloatToStrF(R,ffFixed,8,3)); end;

procedure TMainFm.Count2Click(Sender: TObject); var

Vt : TVect;

I : Integer; begin

if AddData then begin

ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);

end; GetVectMin(Mt,Vt);

ResultsMm.Lines.Add(' Минимальные значения строк матрицы'); for I := 0 to Vt.N-1 do

ResultsMm.Lines.Add('

'+FloatToStrF(Vt.Data[I],ffFixed,8,3));

SetLength(Vt.Data,0); end;

procedure TMainFm.Count3Click(Sender: TObject); var

D : TMatr; begin

if AddData then begin

ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);

end; SortByRow(Mt,D);

ResultsMm.Lines.Add(' Матрица отсортированная по строкам'); AddMatrToList(ResultsMm.Lines,D,' ',False); SetLength(D.Data,0,0);

end;

15

Создание новой матрицы (пункт меню NewMi). При создании матрицу делаем размером 1 на 1. После чего вызываем процедуру редактирования, которая описана в модуле Edit.

procedure TMainFm.NewMiClick(Sender: TObject); begin

SetLength(Mt.Data,0,0); Mt.NI := 1;

Mt.NJ := 1; SetLength(Mt.Data,1,1); EditMatr(Mt);

FileName := ''; end;

Сохранение матрицы в файл (пункт меню SaveMi). Здесь выполнена блокировка ввода пустого имени файла. В этом случае вызывается стандартный диалог сохранения. Имя сохраненного файла выводится на строку состояния.

procedure TMainFm.SaveMiClick(Sender: TObject); var

IsOk : Boolean; begin

IsOk := True;

if FileName = '' then begin

IsOk := SaveDialog.Execute; if IsOk then

FileName := SaveDialog.FileName; end;

if IsOk then begin

SaveMatrToFile(Mt,SaveDialog.FileName); StatusBar1.Panels[0].Text := ExtractFileName(FileName);

end; end;

Вызов окна с информацией о разработчике (пункт меню AboutMi). Окно следует создавать динамически, показывать в модальном режиме и после закрытия сразу уничтожать. Переменную типа класс окна, рекомендуется описывать локальной. Разработка оконной формы рассмотрена в п.2.4.

procedure TMainFm.AboutMiClick(Sender: TObject); var

AboutBox: TAboutBox; begin

AboutBox := TAboutBox.Create(Application); AboutBox.ShowModal;

AboutBox.Free; end;