Разработка приложения для Windows, представляющего собой выполнение операции над матрицами
Разработка приложения для Windows, представляющего собой выполнение операции над матрицами
1. Разработка эскизного и технического проектов программы
Придержан стандарт ГОСТ 19.404-79 к содержанию и оформлению программного документа «Пояснительная записка», входящего в состав документов на стадиях разработки эскизного и технического проектов программы. 1.1 ЗаданиеТема: Разработка приложения для Windows, представляющего собой выполнение операции над матрицами. Условие задачи: Составить программу, проверяющую, образуют ли элементы двумерного массива магический квадрат. В магическом квадрате суммы чисел по всем вертикалям, всем горизонталям и двум диагоналям одинаковы. Составить контрольный пример. 1.2 Назначение и область примененияНеобходимо разработать программу выполнения действий над элементами матрицы, учитывая условия магического квадрата.Программа может быть использована в учебном процессе в качестве наглядного пособия.Поскольку ставится задача разработать приложение для Windows, то использоваться программа может только под управлением ОС Windows.1.3 Технические характеристикиПостановка задачи - разработать проект, который обеспечивает проверку, является ли заданная квадратная матрица магическим квадратом.Программа должна осуществить сложение элементов матрицы по вертикали, по горизонтали и по диагоналям.Входная информация по задаче - целочисленная квадратная матрица. Выходная информация - сообщение о том, что матрица является или не является магическим квадратом.Также входными данными являются количество строк и столбцов матрицы.Для программирования данной задачи используются структура данных - массив. Использованы конструкции разветвляющиеся и циклические конструкции.Массив - совокупность однотипных элементов. Двумерный массив называются матрицей. Матрица определяется именем, размерность и типом. Например А [4,4] - матрица из 4 строк и 4 столбцов. Доступ к элементам массива осуществляется с помощью индексов. Для доступа к элементам матрицы используются два индекса. Например A [I, j] - элемент на пересечений i - строки, j - столбца.В программе для удобства пользователю исходная матрица формируется с помощью генерации случайных чисел. Использованы случайные числа в пределах от 0 до 5.Размерность матрицы вводится в поле ввода. Ограничение на размерность матрицы в пределах <30.По условию поставленной задачи необходимо программировать проверку выполнения условий магического квадрата для исходной матрицы. Операцию размернорсть матрицы должен выбрать пользователь. Элементы матрицы формируются с помощью функции случайных чисел. Проверка проверка условий магического квадрата выполняется вызовом отдельной процедуры, т.е. нажатием на button1. В программе решаются три независимые друг от друга подзадачи. 1. Формирование матрицы. 2. Суммирование элементов по строкам, по столбцам, по двум диагоналям и проверка условий. Сложение элементов матрицы по строкам Вначале проверяется равность суммы элементов двух диагоналей, если они равны по циклу проверяются равность сумм элементов строк, столбцов. Входными данными в данной задаче являются число n - размер и матрица размером nхn. Для условий задачи подходит квадратная матрица. Выходными данными является сообщение, о результате «матрица является магическим квадратом» или «матрица не является магическим квадратом». В программе для удобства исходная матрица формируется случайными числами. Размер поля StringGrid меняется в зависимости от значения n. Задание на курсовую работу - разработка приложения для Windows, поэтому использована среда разработки приложений Delphi. Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется Object Pascal. В основе идеологии Delphi лежит технология визуального программирования и методология объектно-ориентированного программирования. В курсовом проекте использованы три формы и следующие визуальные компоненты. TLabel служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Это легко сделать и во время выполнения программы, написав всего одну строчку кода. TStringGrid - служит для представления текстовых данных в виде таблицы. Доступ к каждому элементу таблицы происходит через свойство Cell. TButton позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы. В Delphi все делается очень просто. Поместив TButton на форму, по двойному щелчку можно создать заготовку обработчика события нажатия кнопки. Над объектами проекта использованы события Show, Create, onClick, Close. Для полноценной работы данной программы необходимы следующие ресурсы компьютера: процессор Pentium IV или Celeron 2.0Ghz. Оперативная память не менее 512 Мбайт, достаточное количество свободного места на диске - порядка 1 Гбайт. 2. Разработка рабочего проекта 2.1 Разработка программыПроект программы содержит три окна:1. Form1 - главное окно (выполнение операции над матрицами). 2. Form2 - справка о разработчике. Окно Form1.
Главное окно программы - Form1 Ниже приведены описание компонентов, некоторые похожие компоненты не описаны. Компонент Form1 Свойства: Сaption - Магический квадрат; Border - bsSingle; BiSystemMenu - false; BiMinimaze - false; BiHelp - False; События: нет. 1 - компонент TМainMenu Свойства: object MainMenu1: TMainMenu Items Справка (N1) О программе(N4) Выход (N2) События: Для N1 - событие BitBtn1Click (приводится ниже). N2Click - закончить работу с приложением. N1Click - перейти к работе со второй формой. 2 - компонент StringGrid1 Свойства Left = 152 Top = 42 Width = 220 Height = 180 DefaultColWidth = 20 DefaultRowHeight = 16 FixedCols = 0 FixedRows = 0 3 - компонент Button1 Caption = 'Магический квадрат?' событие OnClick = Button1Click 4 - компонент Label6: Свойства Left = 96 Top = 400 Width = 196 Height = 24 Caption = «Контрольный пример» Font. Charset = DEFAULT_CHARSET OnClick = Label6Click 5 - компонент Edit1: Свойства Left = 232 Top = 48 Width = 41 Height = 32 Ниже приводится окно Form2. Окно Form2 компонент Form2 Свойства Caption Справка 1-компонент Label1 object Label1: TLabelLeft = 24Top = 48Width = 582Height = 20Caption =«Программа разработана в качестве курсовой работы по программированию»Font. Charset = DEFAULT_CHARSETFont. Color = clWindowTextFont. Height = -16Font. Name = 'MS Sans Serif'Font. Style = []ParentFont = FalseНаписание программыДля решения поставленной задачи в программе был объявлен двумерный массив(матрица) x:array [0.. 10,0..10] of integer; Доступ к элементам массива осуществляется с помощью индексов, поэтому были объявлены целочисленные простые переменные. k, s, c, i, j, n:integer; В программе используются циклические конструкции. Кроме вложенных циклов с параметром программа содержит сложную конструкцию Условие [Цикл[Условие]]. // процедура формирования матрицы x procedure TForm1. Label3Click (Sender: TObject); begin if edit1. Text='' then showmessage ('введите размер матрицы') else randomize; n:=strtoint (edit1. Text); stringgrid1. Visible:=true; n:=n-1; StringGrid1. Height:=StringGrid1. DefaultRowHeight* (strtoint (edit1.text)+1); StringGrid1. Width:=StringGrid1. DefaultColWidth* (strtoint (edit1.text)+1); StringGrid1. ColCount:=strtoint (edit1.text); StringGrid1. RowCount:=strtoint (edit1.text); for i:=0 to n do for j:=0 to n do begin x [i, j]:=random(5)+1; end; for i:=0 to n do for j:=0 to n do begin stringgrid1. Cells [j, i]:=inttostr (x[i, j]); end; end; // процедура вычисления суммы элементов матрицы и проверки procedure TForm1. Button1Click (Sender: TObject); begin s:=0; for i:=0 to n do s:= s+x [i, i]; c:=0; for j:=n downto 0 do c:= c+x [n-j, j]; for i:=0 to n do begin x [i, n+1]:=0; for j:=0 to n do x [i, n+1]:=x [i, n+1]+x [i, j]; end; for i:=0 to n do begin x [n+1, i]:=0; for j:=0 to n do x [n+1, i]:=x [n+1, i]+x [j, i]; end; k:=0; if c=s then begin for i:=0 to n do if (c=x [n+1, i]) and (c=x [i, n+1]) then k:=k+1; end; if k=n+1 then label4.caption:='Данная матрица является магичесим квадратом' else label4.caption:='Эта матрица не является магическим квадратом'; end; // Вывод в StringGrid3 контрольной матрицы procedure TForm1. Label6Click (Sender: TObject); begin randomize; n:=strtoint (edit1. Text); stringgrid1. Visible:=true; n:=n-1; StringGrid1. Height:=StringGrid1. DefaultRowHeight* (strtoint (edit1.text)+1); StringGrid1. Width:=StringGrid1. DefaultColWidth* (strtoint (edit1.text)+1); StringGrid1. ColCount:=strtoint (edit1.text); StringGrid1. RowCount:=strtoint (edit1.text); for i:=0 to n do for j:=0 to n do begin x [i, j]:=random(1)+1; end; for i:=0 to n do for j:=0 to n do begin stringgrid1. Cells [j, i]:=inttostr (x[i, j]); end; end; 2.2 Спецификация программыИсполняемый файл программы выполнения операции над матрицами имеет название Matr.exe и расположен на компакт-диске в каталоге Matr1\Magi. Состав проекта.|
Наименование | Обозначение | Примечания | | Magi.res | Файл ресурсов | Содержит пиктограммы, графические изображения | | Magi.dpr | Файл проекта | Связывает все файлы из которых состоит приложение | | Magi.dof | Файл параметров проекта | Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы | | Magi.cfg | Файл, содержащий конфигурационную информацию о проекте | Содержит информацию о том какие окна открыты и в каких позициях они расположены | | Unit2.pas | Файл программного модуля для формы №2 | Определяет функциональность формы №2 | | Unit2.dfm | Файл формы №2 | Содержит список свойств всех компонентов, включенных в форму №2 | | Unit2.dcu | Объектный файл для Unit2.pas | Откомпилированная версия Unit2.pas | | Unit1.pas | Файл программного модуля для формы №1 | Определяет функциональность формы №1 | | Unit1.dfm | Файл формы №1 | Содержит список свойств всех компонентов, включенных в форму №1 | | Unit1.dcu | Объектный файл для Unit1.pas | Откомпилированная версия Unit2.pas | | | 2.3 Текст программыЛистинг программы.unit Unit1;interface // подключение модулейusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids, Menus; // описание типовtypeTForm1 = class(TForm)Label1: TLabel;StringGrid1: TStringGrid;Edit1: TEdit;Label2: TLabel;Label3: TLabel;Button1: TButton;Label4: TLabel;Label6: TLabel;MainMenu1: TMainMenu;N1: TMenuItem;N2: TMenuItem;procedure Label3Click (Sender: TObject);procedure FormCreate (Sender: TObject);procedure Button1Click (Sender: TObject);procedure Label6Click (Sender: TObject);procedure N1Click (Sender: TObject);procedure N2Click (Sender: TObject);private{Private declarations}public{Public declarations}end; // описание переменныхvarForm1: TForm1;k, s, c, i, j, n:integer;x:array [0.. 10,0..10] of integer;implementationuses Unit2;{$R *.dfm} // формирование матрицыprocedure TForm1. Label3Click (Sender: TObject);beginif edit1. Text='' then showmessage ('введите размер матрицы') elserandomize;n:=strtoint (edit1. Text);stringgrid1. Visible:=true;n:=n-1;StringGrid1. Height:=StringGrid1. DefaultRowHeight* (strtoint (edit1.text)+1);StringGrid1. Width:=StringGrid1. DefaultColWidth* (strtoint (edit1.text)+1);StringGrid1. ColCount:=strtoint (edit1.text);StringGrid1. RowCount:=strtoint (edit1.text);for i:=0 to n dofor j:=0 to n dobeginx [i, j]:=random(5)+1;end;for i:=0 to n dofor j:=0 to n dobeginstringgrid1. Cells [j, i]:=inttostr (x[i, j]);end;end;procedure TForm1. FormCreate (Sender: TObject);beginstringgrid1. Visible:=false;end; // основная процедура вычислении и проверкиprocedure TForm1. Button1Click (Sender: TObject);begins:=0;for i:=0 to n dos:= s+x [i, i];c:=0;for j:=n downto 0 doc:= c+x [n-j, j];for i:=0 to n dobeginx [i, n+1]:=0;for j:=0 to n dox [i, n+1]:=x [i, n+1]+x [i, j];end;for i:=0 to n dobeginx [n+1, i]:=0;for j:=0 to n dox [n+1, i]:=x [n+1, i]+x [j, i];end;k:=0;if c=s then beginfor i:=0 to n doif (c=x [n+1, i]) and (c=x [i, n+1]) then k:=k+1; end;if k=n+1 then label4.caption:='Данная матрица является магичесим квадратом'else label4.caption:='Эта матрица не является магическим квадратом';end; // показать матрицуprocedure TForm1. Label6Click (Sender: TObject);beginrandomize;n:=strtoint (edit1. Text); // количество строк или столбцовstringgrid1. Visible:=true; // видимостьn:=n-1; // настройка размера StringGridStringGrid1. Height:=StringGrid1. DefaultRowHeight* (strtoint (edit1.text)+1);StringGrid1. Width:=StringGrid1. DefaultColWidth* (strtoint (edit1.text)+1);StringGrid1. ColCount:=strtoint (edit1.text);StringGrid1. RowCount:=strtoint (edit1.text);for i:=0 to n dofor j:=0 to n dobeginx [i, j]:=random(1)+1; // контрольная матрицаend;for i:=0 to n dofor j:=0 to n dobeginstringgrid1. Cells [j, i]:=inttostr (x[i, j]);end;end; // запустить 2-формуprocedure TForm1.N1Click (Sender: TObject);beginform2.show;end; // закрытиеprocedure TForm1.N2Click (Sender: TObject);beginclose;end;end. // код для 2 - формыunit Unit2;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm2 = class(TForm)Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;private{Private declarations}public{Public declarations}end;varForm2: TForm2;implementation{$R *.dfm}end.2.4 Описание программыПрограмма предназначена для выполнения операции над матрицей. Программа написана на языке Object Pascal. Работает в среде операционных систем Widows 2000/XP. Для полноценной работы данной программы необходимы следующие ресурсы компьютера: процессор Pentium IV или Celeron 2.0Ghz.Оперативная память не менее 512 Мбайт, достаточное количество свободного места на диске - порядка 1 Гбайт.Программа запускается нажатием на файл Magi.exe. На открывающем окне формы расположен меню MainMenu, через которого можно открыть справки, помощь и закрыть программу. Ввод данных осуществляется с помощью случайных чисел. Нажатие на метку Показать вызывает процедуры формирования матрицы. Элементы матриц загружаются для отображения на форме в компонент StringGrid1.Выходная информация размещается в поле Label4. Пользователю предлагается задать количество строк.Программа загружается нажатием на файл Magi.exe из папки?mag Кусаинова.Исходные матрица описана как квадратные целочисленные, диапазон значений элементов от 0 до 5. Такое ограничение обусловливается предотврощением перегруза памяти компьютера и ошибок связанные размерностью матриц. Значения для StringGrid1. ColCount и StringGrid1. RowCount задаются в окне ObjectInspektor.2.5 Тестирование программыПрограмма правильно работает для целочисленной квадратной матрицы размерностью менее 30х30. Начальный вид формы Матрица Результат Результат контрольного примера Программа предназначена для выполнения операции над матрицей. Программа написана на языке Object Pascal. Работает в среде операционных систем Widows 2000/XP. Для полноценной работы данной программы необходимы следующие ресурсы компьютера: процессор Pentium IV или Celeron 2.0 Ghz. Оперативная память не менее 512 Мбайт, достаточное количество свободного места на диске - порядка 1 Гбайт. Программа запускается нажатием на файл Magi.exe. На открывающем окне формы расположен меню MainMenu, через которого можно открыть справки, помощь и закрыть программу. Ввод данных осуществляется с помощью случайных чисел. Нажатие на метку Показать вызывает процедуры формирования матрицы. Элементы матрицы и контрольной матрицы загружаются для отображения на форме в компонент StringGrid1. Список использованных источников1. Фаронов, В.В. Turbo Pascal [Текст]: учеб. пособие / В.В. Фаронов. - СПб.: Питер, 2006. - 366 с. 2. Бобровский, С.И. Технологии Delphi 2006. Новые возможности [Текст] / С.И. Бобровский. - СПб.: Питер, 2006. 3. Культин, Н.Б. Delphi в задачах и примерах [Текст] / Н.Б. Культин. - СПб.: БХВ-Петербург, 2004. 4. Культин, Н.Б. Основы программирования в Delphi 7 [Текст] / Н.Б. Культин. - СПб.: БХВ-Петербург, 2003. 5. Немнюгин, С.А. Turbo Pascal. Программирование на языке высокого уровня [Текст]: учебник для вузов / С.А. Немнюгин. - 2-е изд., перераб. и доп. - СПб.: Питер, 2006. 6. Немнюгин, С.А. Turbo Pascal: Практикум [Текст] / С.А. Немнюгин. - 2-е изд. Перераб. и доп. - СПб.: Питер, 2006. 7. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня [Текст]: учебник для вузов / Т.А. Павловская. - СПб.: Питер, 2004. (допущен Министерством образования). 8. Фаронов, В.В. Турбо Паскаль 7.0. Практика программирования [Текст]: учебное пособие / В.В. Фаронов. - М.: ОМД Групп, 2003. 9. Фаронов, В.В. Delphi 2005. Язык, среда, разработка приложений [Текст] / В.В. Фаронов. - СПб.: Питер, 2005.
|