Файл: Средства разработки клиентских программ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 57

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

btn2: TButton; {кнопка проверки}

mmo1: TMemo; {поле ввода значений ячеек квадрата}

dlgOpen1: TOpenDialog;

btn3: TButton; {диалог открытия файла}

procedure btn1Click(Sender: TObject);

procedure btn2Click(Sender: TObject);

procedure btn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

begin

{выбрать файл на диске}

if dlgOpen1.Execute then

begin

mmo1.Lines.Clear; {очистить поле ввода}

mmo1.Lines.LoadFromFile(dlgOpen1.FileName); {загрузить в поле ввода содержимое файла }

end;

end;

procedure TForm1.btn2Click(Sender: TObject);

var

baseSum,curSum,i,j,rows,cols,ncols: Integer;

s:string;

List: TStrings;

rectOk,digitsOk,magicOk: Boolean;

M: array of array of Integer;

begin

rectOk:=true; {квадрат имеет одинаковое количество строк и столбцов}

digitsOk:=True; {в ячейках квадрата записаны только целые числа }

ncols:=0; {счетчик колонок}

rows:=mmo1.Lines.Count; {количество строк в поле ввода }

{1. Расчет размеров кдварата }

for i:=1 to rows do

begin

{1.1. Разбить текущую строку на ячейки, разделитель - пробел }

s:=mmo1.Lines[i-1];

List := TStringList.Create;

try

ExtractStrings([' '], [], PChar(s), List);

{1.2. посчитать количество колонок }

cols:=List.Count;

{1.3. В случае несовпадения количества колонок в разных строках -

выдать флаг, что квадрат записан не правильно}

if (ncols=0) then ncols:=cols

else if (cols<>ncols) then rectOk:=false;

finally

List.Free;

end;

end;

{ при несовпадении количества строк и колонок выдать предупреждение,

что квадрат неправильный }

if (rows<>ncols) then rectOk:=false;

if (not rectOk) then MessageDlg('Не совпадает количество строк и столбцов',mtError,[mbCancel], 0)

else

begin

{ 2. Считывание ячеек квадрата }

{2.1. Выделение памяти под массив }

SetLength(M,rows,ncols);

{2.2. Считывание значений }

for i:=1 to rows do

begin

s:=mmo1.Lines[i-1];

List := TStringList.Create;

try

ExtractStrings([' '], [], PChar(s), List);

cols:=List.Count;

for j:=1 to cols do

begin

try

M[i-1,j-1] := StrToInt(List[j-1]);

except

on Exception : EConvertError do

{ если не удалось сконвертировать строку - выдать флаг,

что в ячейках квадрата присутствуют нечисловые данные }

digitsOk:=false;

end;

end;

finally

List.Free;

end;

end;

if (not digitsOk) then MessageDlg('Неправильный формат чисел в ячейках',mtError,[mbCancel], 0)

else

begin

if (rows=0) then MessageDlg('Не заданы входные данные',mtError,[mbCancel], 0)

else

begin

{расчет суммы по первой строке }

baseSum:=0;

for i:=1 to ncols do baseSum:= baseSum + M[0,i-1];

magicOk:=true;

{ расчет сумм по строкам и столбцам, если сумма не равна базовой,

то выдлать флаг, что квадрат не магический }

for i:=1 to ncols do

begin

curSum:=0;

for j:=1 to rows do

begin

curSum:=curSum + M[j-1,i-1];

end;

if (curSum<>baseSum) then magicOk:=false;

curSum:=0;


for j:=1 to rows do

begin

curSum:=curSum + M[i-1,j-1];

end;

if (curSum<>baseSum) then magicOk:=false;

end;

{ расчет суммы по диагонале слева направо }

curSum:=0;

for j:=1 to rows do

begin

curSum:=curSum + M[j-1,j-1];

end;

if (curSum<>baseSum) then magicOk:=false;

{расчет суммы по диагонали справа налево }

curSum:=0;

for j:=1 to rows do

begin

curSum:=curSum + M[j-1,ncols - j];

end;

if (curSum<>baseSum) then magicOk:=false;

{выдача результата}

if (magicOk) then MessageDlg('Это магический квадрат',mtInformation,[mbOK], 0)

else MessageDlg('Это не магический квадрат',mtInformation,[mbOK], 0);

end;

end;

M:=NIL; {освобождение памяти }

end;

end;

procedure TForm1.btn3Click(Sender: TObject);

var

dlg: TForm2;

begin

{показать окно о программе}

dlg:=TForm2.Create(self);

dlg.ShowModal;

dlg.Free;

end;

end.

2.4 Тестирование программы

Для тестирования работы программы требуется запустить исполняемый файл magicrect.exe и загрузить тестовый пример sample.txt для анализа (путем нажатия на кнопку «Загрузить из файла». Вид окна после загрузки примера представлен на рисунке 6.

Рис.6 Вид окна после загрузки тестового примера.

После нажатия на кнопку «Проверка» должно появится сообщение «Это магический квадрат»:

Рис.7 Результат обработки тестового примера.

Если изменить первую цифру на букву «а», то результат будет представлять собой сообщение об ошибке:

Рис.8 Сообщение об ошибке при неправильных входных данных.

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

Рис.9 Сообщение о том, что исходные данные не являются магическим квадратом

ЗАКЛЮЧЕНИЕ

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

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