Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Средства разработки клиентских программ (Назначение и область применения, технические характеристики)

Содержание:

ВВЕДЕНИЕ

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

Исходя из постановки задачи курсовой работы, требуется разработать алгоритм проверки исходных данных на корректность (принадлежность к группе целых чисел, а также проверка, что исходный двумерный массив является квадратом), а также разработать алгоритм проверки соответствия заданного двумерного массива целых числе определению «Магический квадрат».

Для решения задачи был выбран язык программирования Object Pascal и среда программирования Delphi фирмы Borland Enterprise, так как она наиболее широкие возможности для программирования приложений под операционные системы семейства Windows. Среда программирования Delphi является средством быстрой разработки приложений (Rapid Application Development – RAD). Такие среды программирования часто называют визуальными средами разработки: вид рабочих и диалоговых окон во время проектирования, программирования и выполнения программы является одинаковым. В Delphi входят множество библиотек визуальных компонентов, необходимых для профессиональной разработки программных продуктов для операционной системы Windows с минимальными затратами на написание программного кода.

Компилятор Delphi производит небольшие по размерам и высокоэффективные по скорости исполняемые модули. Это означает, что требования к клиентским компьютерам существенно снижаются.

Преимущества Delphi по сравнению с аналогичными программными продуктами:

  • быстрота разработки приложения (RAD);
  • высокая производительность разработанного приложения;
  • низкие требования разработанного приложения к ресурсам компьютера;
  • наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi;
  • возможность разработки новых компонентов и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходных кодах);
  • удачная проработка иерархии объектов.

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

Глава 1 Основные аспекты разработки клиентских программ

1.1 Назначение и область применения, технические характеристики

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

Область применения: учебный процесс. Автоматизация проверки заданий студентов на кафедре математики.

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

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

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

Перед проверкой соответствия заданного двумерного массива определению «магический квадрат» необходимо проверить корректность исходных данных:

  • проверка, что заданный двумерный массив является непустым квадратом;
  • проверка, что в ячейках квадрата записаны целые числа;

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

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

1.2 Описание алгоритма

В программе решаются три независимые друг от друга подзадачи:

  1. Проверка исходных данных на равное количество строк и столбцов.
  2. Проверка исходных данных на правильную запись чисел в ячейках матрицы.
  3. Проверка соответствия исходных данных определению «магический квадрат».

Алгоритм подзадачи проверки исходных данных на равное количество строк и столбцов представлен на рисунке 1. Данные считаются правильными, если после выполнения алгоритма флаг rectOk остался в значении истинно (true). Ключевым моментом алгоритма является разбивка строки на подстроки с помощью встроенной функции Delphi ExactStrings.

Алгоритм проверки исходных данных на правильную запись целых чисел представлен на рисунке 2. Данные считаются правильными, если флаг digitsOk остался в значении истинно (true) после выполнения алгоритма. Ключевым моментом работы алгоритма является преобразование строки в число с помощью функции StrToInt. Если во время преобразования данных не возникло исключительной ситуации (ошибки), то данные считаются правильными и заносятся в массив входных значений M.

Алгоритм проверки соответствия исходных данных определению «магический квадрат» представлен на рис.3. Исходная матрица считается магическим квадратом, если флаг magicOk остался в значении истинно (true) после выполнения алгоритма.

Рис.1 Алгоритм проверки равного количества строк и столбцов у исходных данных.

Рис.2 Алгоритм проверки правильности ввода целых чисел в ячейки.

Рис.3 Алгоритм определения магического квадрата.

1.3 Организация входных и выходных данных

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

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

1.4 Выбор состава технических и программных средств

Для решения задачи был выбран язык программирования Object Pascal и среда программирования Delphi фирмы Borland Enterprise, так как она наиболее широкие возможности для программирования приложений под операционные системы семейства Windows. Преимущества Delphi по сравнению с аналогичными программными продуктами:

  • быстрота разработки приложения (RAD);
  • высокая производительность разработанного приложения;
  • низкие требования разработанного приложения к ресурсам компьютера;

Среда разработки Delphi работает на операционных системах начиная от Windows XP, со свободным дисковым пространством от 512 мегабайт и оперативной памятью от 1 Гигабайта.

ГЛАВА 2 Разработка рабочего проекта

2.1 Разработка программы

Для разработки приложения «Магический квадрат» используется среда визуального программирования Delphi. Проект программы содержит 2 окна:

  1. Form1 – ввод исходных данных и определение магического квадрата;
  2. Form2 – вывод информации о программе

Окно Form1 «Магический квадрат представлено на рисунке 4.

Рис.4 Окно «Магический квадрат»

Компонент Form1.

Свойства:

Caption – Магический квадрат;

ClientHeight – 408;

ClientWidth – 573;

События – нет;

0 – компонент TButton

Свойства:

Caption – Загрузить из файла;

События:

btn1Click – обработка клика по кнопке;

  1. – Компонент TButton

Свойства:

Caption – Проверка;

События:

btn2Click – обработка клика по кнопке;

  1. – Компонент TMemo

Свойства:

Название – mmo1;

3 – компонент TButton

Свойства:

Caption – О программе;

События:

btn3Click – обработка клика по кнопке;

  1. – невизуальный компонент TOpenDialog

Свойства:

Название: dlgOpen1

Filter: Text files|*.txt;

Окно Form2 “О программе” представлено на рисунке 5.

Компонент Form2.

Свойства:

Caption – О программе;

События – нет;

Рис.5 Окно «О программе»

Окно содержит единственный компонент TLabel:

Свойства:

Caption – содержит текст, представленный на рисунке 5

Align: alClient;

Alignment: taCenter;

Обработчик события btn1Click служит для загрузки содержимого файла в поле ввода.

Обработчик события btn2Click служит для определения магического квадрата по исходным данным, находящимся в поле ввода. Алгоритм проверки корректности данных и определения магического квадрата представлены ранее на рис.1 – 3.

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

Исходные коды с комментариями представлены в разделе 3.3.

2.2 Спецификация программы

Исполняемый файл программы «Магический квадрат» имеет название magicrect.exe и расположен в каталоге magicrect/magicrect.exe.

Таблица 1 - Обозначения

Наименование

Обозначение

Примечание

Sample.txt

Файл с примером двумерного массива

magicrect.dof

Файл параметров проекта

Содержит текущие настройки компилятора и компоновщика

magicrect.dpr

Файл проекта

Связывает все файлы, из которых состоит приложение

magicrect.dsk

Файл, содержащий Desktop – настройки проекта

Содержит информацию об открытых окнах и их размещении

magicrect.Res

Файл ресурсов

Содержит пиктограммы, графические изображения

Unit1.Pas

Файл программного модуля для формы № 1

Определяет функциональность формы № 1

Unit2.Pas

Файл программного модуля для формы № 2

Определяет функциональность формы № 2

Unit1.Dfm

Файл формы № 1

Содержит список свойств компонентов формы № 1

Unit2.Dfm

Файл формы № 2

Содержит список свойств всех компонентов формы № 2

Unit1.Dcu

Объектный файл для Unit1.Pas

Откомпилированная версия Unit1.Pas

Unit2.Dcu

Объектный файл для Unit2.Pas

Откомпилированная версия Unit2.Pas

2.3 Текст программы

Модуль Unit1.pas

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Unit2;

type

TForm1 = class(TForm)

btn1: TButton; {кнопка загрузки}

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.

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

Список использованных источников

  1. Архангельский А. Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi (+ CD-ROM); Бином-Пресс - Москва, 2018. - 308 c.
  2. Хомоненко Анатолий , Гофман Владимир , Мещеряков Евгений Delphi 7; БХВ-Петербург - Москва, 2015. - 938 c.
  3. Осипов Д. Базы данных и Delphi. Теория и практика. — СПб.: БХВ-Петербург, 2016. — С. 752. — ISBN 978-5-9775-0659-5
  4. Осипов Д. Delphi. Программирование для Windows, OS X, iOS и Android.- СПб.: БХВ-Петербург, 2014.- С.464.- 978-5-9775-3289-1
  5. Кнут Д. Э. Искусство программирования. Т. 1 : пер. с англ. / Дональд Э. Кнут ; под общ. ред. Ю. В. Козаченко. - М. [и др.], 2017. - 712 с. : ил.
  6. Вирт Н. Алгоритмы и структуры данных : с примерами на Паскале / Никлаус Вирт ; [пер. с англ. Д.Б. Подшивалова]. - СПб., 2017. - 350, [1] с. : ил.
  7. www.delphiexpert.ru/
  8. www.delphi.int.ru/
  9. www.edelphi.ru/
  10. www.delphisources.ru/

ПРИЛОЖЕНИЯ

А