Разработка приложения для 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.
Размерностьматрицы вводится в поле ввода. Ограничение на размерность матрицы в пределах
По условию поставленной задачи необходимопрограммировать проверку выполнения условий магического квадрата для исходной матрицы.
Операцию размернорсть матрицы должен выбратьпользователь.
Элементы матрицы формируются с помощьюфункции случайных чисел.
Проверка проверка условий магическогоквадрата выполняетсявызовом отдельнойпроцедуры,т.е. нажатием на 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
Свойства:
objectMainMenu1: 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-компонент Label1objectLabel1: 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=” thenshowmessage (‘введите размер матрицы’) 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
 // подключениемодулей
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls, Grids, Menus;
 // описание типов
type
TForm1= class(TForm)
Label1:TLabel;
StringGrid1:TStringGrid;
Edit1:TEdit;
Label2:TLabel;
Label3:TLabel;
Button1:TButton;
Label4:TLabel;
Label6:TLabel;
MainMenu1:TMainMenu;
N1:TMenuItem;
N2:TMenuItem;
procedureLabel3Click (Sender: TObject);
procedureFormCreate (Sender: TObject);
procedureButton1Click (Sender: TObject);
procedureLabel6Click (Sender: TObject);
procedureN1Click (Sender: TObject);
procedureN2Click (Sender: TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
 // описаниепеременных
var
Form1:TForm1;
k,s, c, i, j, n:integer;
x:array[0… 10,0..10] of integer;
implementation
usesUnit2;
{$R *.dfm}
 // формированиематрицы
procedure TForm1. Label3Click (Sender:TObject);
begin
ifedit1. 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);
fori:=0 to n do
forj:=0 to n do
begin
x [i,j]:=random(5)+1;
end;
fori:=0 to n do
forj:=0 to n do
begin
stringgrid1.Cells [j, i]:=inttostr (x[i, j]);
end;
end;
procedureTForm1. FormCreate (Sender: TObject);
begin
stringgrid1.Visible:=false;
end;
 // основная процедуравычислении и проверки
procedure TForm1. Button1Click (Sender:TObject);
begin
s:=0;
fori:=0 to n do
s:=s+x [i, i];
c:=0;
forj:=n downto 0 do
c:=c+x [n-j, j];
fori:=0 to n do
begin
x [i,n+1]:=0;
forj:=0 to n do
x [i,n+1]:=x [i, n+1]+x [i, j];
end;
fori:=0 to n do
begin
x [n+1,i]:=0;
forj:=0 to n do
x [n+1,i]:=x [n+1, i]+x [j, i];
end;
k:=0;
ifc=s then begin
fori:=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 thenlabel4.caption:=’Данная матрица является магичесим квадратом’
elselabel4.caption:=’Эта матрица не является магическим квадратом’;
end;
 //показать матрицу
procedureTForm1. Label6Click (Sender: TObject);
begin
randomize;
n:=strtoint(edit1. Text); // количествострок или столбцов
stringgrid1. Visible:=true; // видимость
n:=n-1;
 //настройка размера StringGrid
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);
fori:=0 to n do
forj:=0 to n do
begin
x [i, j]:=random(1)+1; // контрольнаяматрица
end;
fori:=0 to n do
forj:=0 to n do
begin
stringgrid1.Cells [j, i]:=inttostr (x[i, j]);
end;
end;
 // запустить 2-форму
procedureTForm1.N1Click (Sender: TObject);
begin
form2.show;
end;
 // закрытие
procedureTForm1.N2Click (Sender: TObject);
begin
close;
end;
end.
 //коддля 2 – формы
unitUnit2;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm2= class(TForm)
Label1:TLabel;
Label2:TLabel;
Label3:TLabel;
Label4:TLabel;
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form2: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.