Автор: Пользователь скрыл имя, 18 Ноября 2011 в 02:31, отчет по практике
Технология программирования – это система методов, способов и приемов разработки и отладки программ.
Введение ……………………………………………………………………….....3
1 Выбор технологии, языка и среды программирования ………….……….....5
2 Анализ и уточнение требований к программному продукту ………….........9
2.1 Анализ процесса обработки информации и описание структуры данных
для ее хранения ………………………………………………………………......9
2.2 Выбор методов и разработка основных алгоритмов решения задачи ….. 10
3 Разработка функциональной схемы программного продукта ………….......15
4 Проектирование классов предметной области ………………………….…..16
4.1 Построение диаграммы классов ………………………………………....... 16
4.2 Уточнение структуры классов предметной области и разработка
алгоритмов .….……………………………………………………………….......17
5 Выбор стратегии тестирования и разработки тестов ……………………... .18
Заключение …………………………………………………………………...... .22
Список использованных источников ……………………………...…............. .23
Приложение А Техническое задание ………………………………...…….......24
Приложение Б Руководство пользователя ………………………….........…... 27
Приложение В Листинг программы …………………………………...............29
Руководство
пользователя
Разработанный
программный продукт
Для выполнения приложения необходим компьютер на базе процессора Pentium или AMD, объем оперативной памяти 128Mb(256Mb), 100Mb(200Mb) свободного места на жестком диске.
Работа
с программным средством начинается с
запуска исполняемого файла (Enterprise.exe).
Главное окно программы представлено
на рисунке Б.1.
Рисунок
Б.1 – Главное окно программы
Для
просмотра таблицы базы данных, по
которой производится корреляционно-регрессионный
анализ, необходимо выбрать пункт меню
«Редактирование». В результате выполнения
команды на экране появится окно, изображенное
на рисунке Б.2.
Рисунок Б.2 – Окно редактирования таблицы в БД
Для
проведения корреляционно-регрессионного
анализа необходимо выбрать пункт
меню «анализ». На экране появится окно,
в котором отобразится информация из БД,
необходимая для анализа, и кнопка «КРА».
После нажатия этой кнопки на экране появятся
результаты анализа. Вид окна с результатами
анализа представлен на рисунке Б.3.
Рисунок
Б.3 – Окно корреляционно-регрессионного
анализа
Приложение В
Текст
программы
unit Analys;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Spin,
StdCtrls, DB, ADODB, DBGrids;
const
Max = 100;
type
TAnalys = class(TForm)
Button1: TButton;
sgX: TStringGrid;
Label1: TLabel;
sgA: TStringGrid;
Label4: TLabel;
Label6: TLabel;
sgY: TStringGrid;
Label7: TLabel;
sgK: TStringGrid;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADODataSet1: TADODataSet;
ADODataSet1kol_oborud: TIntegerField;
ADODataSet1kol_zap: TFloatField;
ADODataSet1stoimost_Ed: TFloatField;
ADODataSet1Srok_Sl: TFloatField;
ADODataSet1kol_otkaz: TIntegerField;
Label5: TLabel;
Label3: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label13: TLabel;
Label14: TLabel;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
// procedure
sgAClick(Sender: TObject);
end;
Algoritm = class // класс "Алгоритм". Абстрактный (не имеет объектов).
procedure Run; virtual; abstract; // Метод "Выполнить". Абстрактный (не реализован).
end;
Matrix = class // Класс "Матрица". Хранит данные матрицы и реализует операции над ними.
arr : array [1..Max, 1..Max] of real; // данные матрицы
Rows, Cols : integer; // количество строк и столбцов
procedure Transpon; // транспонирование
procedure Obratn; // нахождение обратной матрицы
procedure Minus(Var b:Matrix); // вычитание матрицы
procedure Umn(Var b : Matrix); // умножение на матрицу b
procedure Print(sg : TStringGrid); // вывод в StringGrid
procedure CalcMOAndSko(var mo, sko: array of real); // подсчет
// математического ожидания и среднеквадратического отклонения по каждому столбцу
procedure
Standartization; // нахождение
function Submatrix(exi, exj : integer) : Matrix; // нахождение подматрицы
function Determinant : real; // нахождение определителя
end;
Matricy = class (Algoritm) // класс "Работа с матрицами". Агрегирует в себе две матрицы: X и Y.
// Наследует от класса "Алгоритм" абстрактный метод "Выполнить".
procedure SetValues(ADODataSet1 : TADODataSet); // процедура установки в матрицах (X,Y) значений,
// берущихся из БД с помощью ADO-соединения
protected // защищенные
для доступа извне члены (
X, Y : Matrix; // исходная таблица факторов (X) и откликов (Y)
end;
Main = class (Matricy)
// Класс "Корреляционно-
// Осуществляет
необходимые расчеты.
procedure Run; override; // Метод "Выполнить" производит расчеты над исходными
// матрицами и выдает результаты на экран.
end;
var
Analys1: TAnalys;
implementation
{$R *.dfm}
procedure Matrix.Transpon; // транспонирование матрицы
var
mas : array [1..Max, 1..Max] of real;
i, j : integer;
begin
for i := 1 to Rows do
for j := 1 to Cols do
mas[j, i] := arr[i, j]; // индексы i,j меняются местами
i := Rows;
Rows := Cols;
Cols := i;
for i := 1 to Rows do
for j := 1 to Cols do
arr[i, j] := mas[i, j];
end;
procedure Matrix.Obratn; // Нахождение обратной матрицы
// (с помощью присоединенной
var
e : array [1..Max, 1..Max] of real;
c, d : real;
i, j, k, N : integer;
begin
N := Rows;
// Формирование единичной матицы:
for i := 1 to N do
for j := 1 to N do
if i = j then e[i,j] := 1 else e[i,j] := 0;
// Эквивалентные преобразования над строками матриц:
for i := 1 to N do begin
c := arr[i, i];
for j := 1 to N do begin // делим строку на диагональный элемент
arr[i,j] := arr[i,j] / c;
e[i,j] := e[i,j] / c;
end;
for k := 1 to N do
if k <> i then begin
d := arr[k][i];
for j := 1 to N do begin // вычитаем ее из остальных строк
arr[k,j] := arr[k,j]-arr[i,j]*d;
e[k,j] := e[k,j]-e[i,j]*d;
end;
end;
end;
for i := 1 to N do
for j := 1 to N do
arr[i, j] := e[i, j]; // получили обратную матрицу
end;
procedure Matrix.Minus(var b:Matrix); // Из хранимой в объекте матрицы вычитается
var
i, j, k : integer;
s : real;
mas : array [1..Max, 1..Max] of real;
begin
for i:=1 to Rows do
for j:=1 to Cols do
begin
mas[i,j]:=arr[i,j]-b.arr[i,j];
end;
for i:=1 to Rows do
for j:=1 to Cols do
arr[i,j]:=mas[i,j];
end;
procedure Matrix.Umn(var b: Matrix); // Хранимая в объекте матрица умножается на
var
i, j, k : integer;
s : real;
mas : array [1..Max, 1..Max] of real;
begin
for i := 1 to Rows do
for j := 1 to b.Cols do begin
s := 0; // перемножаем строку первый матрицы на столбец второй
for k := 1 to Cols do
s := s + arr[i,k] * b.arr[k,j];
mas[i, j] := s;
end;
Cols := b.Cols;
for i := 1 to Rows do
for j := 1 to Cols do
arr[i, j] := mas[i, j];
end;
procedure Matrix.CalcMOAndSko(var mo, sko: array of real);
// Расчет математического ожидания
// и среднеквадратического
отклонения для каждого
var
i, j : integer;
s, ss : real;
begin
for i := 1 to Cols do begin // для каждого столбца
s := 0; // накапливаем сумму
for j := 1 to Rows do
s := s + arr[j, i];
s := s / Rows; // находим среднее значение
mo[i-1] := s; // нашли
ss := 0; // накапливаем сумму квадратов разности со средним
for j := 1 to Rows do
ss := ss + Sqr(arr[j, i] - s);
sko[i-1] := Sqrt(ss / Rows); // нашли среднеквадратическое отклонение
end;
end;
procedure Matrix.Standartization;
// нахождение
var
mo, sko : array [1..Max] of real;
i, j : integer;
begin
CalcMOAndSko(mo, sko);
for i:=1 to Rows do
for j:=1 to Cols do begin
arr[i,j] := arr[i,j] - mo[j];
if sko[j] > 0.00001 then
arr[i,j] := arr[i,j] / sko[j];
end;
end;
function Matrix.Submatrix(exi, exj : integer): Matrix; // Нахождение подматрицы
// (вычеркивается строка exi и столбец exj)
var
m : Matrix;
i, j, ii, jj : integer;
begin
m := Matrix.Create;
m.Rows := Rows;
m.Cols := Cols;
if exi > 0 then m.Rows := m.Rows - 1;
if exj > 0 then m.Cols := m.Cols - 1;
// если аргументы равны 0, то ничего не вычеркиваем, просто копируем матрицу
ii := 1;
for i := 1 to Rows do begin
if i = exi then continue; // вычеркнутая строка
jj := 1;
for j := 1 to Cols do begin
if j = exj then continue; // вычеркнутый столбец
m.arr[ii, jj] := arr[i, j];
<