Автор: Пользователь скрыл имя, 13 Декабря 2010 в 18:40, курсовая работа
В данном курсовом проекте была разработана программа, которая обрабатывает статистическую информацию, используя метод экспертных оценок. Программа позволяет вводить не более 20 экспертов и столько же факторов, рассчитывает необходимые статистические показатели и выводит их в новое окно; далее позволяет вернуться к просмотру условия задачи или же задать с тем же количеством экспертов и факторов новое условие, или начать программу заново, или завершить ее выполнение.
Программа была создана в среде визуального объектно-ориентированного программирования – Delphi 7.0.
Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1. Теоретический раздел. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1 Постановка задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Описание входной информации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2 Описание выходной информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Описание выбранного метода. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Математическая реализация задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Выбор построения модели. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.2 Решение задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Блок-схема решения задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.4 Блок-схема меню программы. . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.5 Блок-схема процедуры. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. Описание Блок-схемы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Описание Блок-схемы меню программы. . . . . . . . . . . . . . . . . . .
3. Описание Блок-схемы процедуры. . . . . . . . . . . . . . . . . . . . . . . . .
1.5.1 Текст программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2. Экспериментальный раздел. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1 Описание процесса отладки программы. . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Инструкция пользователю. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 Контрольный пример. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 Характеристика программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3. Экономический раздел. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.1 Вывод и экономический ответ задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Заключение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Приложение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.4.3 Unit3 - TForm3.FormActivate
1.5.1 Текст
программы
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Grids, StdCtrls, Buttons, ToolWin, ComCtrls, XPMan,
ExtCtrls, jpeg;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
StringGrid1: TStringGrid;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
SpeedButton1: TSpeedButton;
Image1: TImage;
XPManifest1: TXPManifest;
SpeedButton2: TSpeedButton;
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k,fakt,exp:integer;//fakt - количество факторов
//exp - количество экспертов; k - вспомогательная переменная
dano:array[1..20] of integer;
mas:array[1..20,1..20] of integer;//хранит массив введенных значений
p:integer;//вспомогательная переменная
x:array[1..20] of real; //ср. арифметическое по каждому столбцу
dis:array[1..20] of real;//дисперсия
otkl:array[1..20] of real;//ср. квадриатическое отклонение
v:array[1..20] of real;//коэф. вариации
r:real; w:real; //коэф. конкордации (W)
sum1:array[1..20] of integer;//вспомогательная переменная для подсчета суммы по факторам
sum:array[1..20] of
integer;//сумма по факторам
implementation
uses Unit2, Unit3, Unit5;
{$R *.dfm}
procedure TForm1.N2Click(Sender: TObject);
var
i,j:integer;
begin
if stringgrid1.Visible=true then
begin
//обнуление ("очищение") всех элементов
for i:=1 to fakt do
for j:=1 to exp do
begin
sum1[i]:=0; sum[i]:=0; v[i]:=0; r:=0;
dis[i]:=0; x[i]:=0; otkl[i]:=0; w:=0;
mas[i,j]:=0;
end;
for i:=0 to fakt do
for j:=0 to exp+1 do
stringgrid1.Cells[i,j]:='';
SpeedButton2.Visible:=false;
SpeedButton1.Visible:=false;
StringGrid1.Visible:=false;
end;
fakt:=0;
exp:=0;
k:=0;
form2.ShowModal;
if kont=1 then
begin
stringgrid1.Visible:=true;
stringgrid1.RowCount:=exp+1;
stringgrid1.ColCount:=fakt+1;
speedbutton1.Visible:=true;
for i:=1 to exp do
begin
stringgrid1.Cells[0,i]:=
end;
for i:=1 to fakt do
begin
stringgrid1.Cells[i,0]:=
end;
stringgrid1.SetFocus;
end;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i:=1 to 20 do
dano[i]:=i;
application.ShowHint:=true;
end;
procedure TForm1.StringGrid1KeyPress(
begin
case key of
#8,'0'..'9','-':;
chr(13):
begin
if stringgrid1.row<stringgrid1.
stringgrid1.row:=stringgrid1.
else if (stringgrid1.row=stringgrid1.
begin
speedbutton1.Click
end
else if stringgrid1.row=stringgrid1.
begin
stringgrid1.Row:=1;
stringgrid1.Col:=stringgrid1.
end
end
else
key := Chr(0);
end;
end;
procedure TForm1.SpeedButton1Click(
var
j,i: integer; //i,j - вспомогательные переменные
grect:tgridrect;
begin
if k<>1 then
begin
//запись таблицы в массив
for i:=1 to fakt do
for j:=1 to exp do
begin //проверка "Пустая таблица или нет?"
if stringgrid1.Cells[i,j]='' then
begin
grect.Left:=i;
grect.Top:=j;
grect.Right:=i;
grect.bottom:=j;
stringgrid1.Selection:=grect;
MessageDlg('Введите верное значение',mtWarning,[mbOk],0);
exit;
end
else
begin
mas[i,j]:=strtoint(
end;
end;
if messagedlg('Дальнейшее
изменение введенных данных будет невозможно'+#13+'Перед
тем как нажать "Yes" проверьте их на
корректность',mtWarning,[
exit;
//доб. строки для вывода суммы по факторам
stringgrid1.RowCount:=exp+2;
//суммы по факторам
for i:=1 to fakt do
for j:=1 to exp do
begin
sum1[j]:=strtoint(stringgrid1.
sum[i]:=sum[i]+sum1[j];
end;
//вывод суммы по факторам
for i:=1 to fakt do
stringgrid1.Cells[i,exp+1]:=
//ср. арифметическое по каждому столбцу
for i:=1 to fakt do
x[i]:=sum[i]/exp;
//дисперсия
for i:=1 to fakt do
for j:=1 to exp do
dis[i]:=dis[i]+sqr((mas[i,j]-
//ср. квадриатическое отклонение
for i:=1 to fakt do
otkl[i]:=sqrt(dis[i]);
//коэф. вариации
for i:=1 to fakt do
v[i]:=otkl[i]/x[i]*100;
//коэф. конкордации
for i:=1 to fakt do
r:=r+sqr(sum[i]-x[i]);
w:=(12*r)/(sqr(exp)*(fakt*
end;
k:=1;
speedbutton2.Visible:=true;
end;
procedure TForm1.SpeedButton2Click(
begin
k:=0;
form3.ShowModal;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
form5.Visible:=true;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, unit1;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure EditKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
kont:integer;//если имеет значения 0 - нажата кнопка Отмена
//1 - нажата кнопка
Принять
implementation
{$R *.dfm}
procedure TForm2.Button2Click(Sender: TObject);
begin
kont:=0;
form2.Close;
end;
procedure TForm2.EditKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9','-',chr(8):;
chr(13):
begin
if sender=edit1 then edit2.SetFocus
else if sender=edit2 then button1.Click;
end
else key:=chr(0);
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if (edit1.Text='') or (edit2.Text='') then
else if (edit1.Text='-') or (edit2.Text='-') then