Министерствообразования и науки Российской Федерации
Государственноеобразовательное учреждение высшего профессионального образования
«Комсомольский– на – Амуре государственный технический университет »
Институт ИКПМТО
Кафедра Технологиимашиностроения
ПОЯСНИТЕЛЬНАЯЗАПИСКА
к курсовомупроекту
Расчетнаяметодика проектирования программного комплекса
Студент группы 5МС-1 З.С. Асотова
2006
Содержание
Введение
1. Постановка и анализ задачи
1.1 Потребность в идентификациираспределения погрешностей
1.2 Оптимальное число интерваловгруппирования экспериментальных данных
2. Проектирование программногокомплекса
3. Кодирование программы
3.1 Модуль Math
3.2 Модуль 1
3.3 Модуль 2
3.4 Модуль 3
3.5 Модуль 4
Заключение
Приложение А
Приложение Б
Приложение В
Приложение Г
Приложение Д
Список использованных источников
Введение
Информационныетехнологии занимают уникальное положение и стали неотъемлемой частью нашейповседневной деятельности. Информационные системы — область науки и техники, без знаниякоторой невозможно дальнейшее развитие современного общества. В отличие от других научно-технических достижений средствавычислительной техники и информатики применяются практически во всех сферахинтеллектуальной деятельности человека, способствуя прогрессу в технике итехнологии. Конечно, освоение уже имеющихся и хорошо себя зарекомендовавшихпрограммных систем и основанных на них технологий — важная и необходимаязадача. Нужно создавать необходимые условия для развития в нашей странеисследований в области информационных технологий и реализации их результатов впрактических системах и различных приложениях.
1. Постановка и анализзадачи
Цельюданной работы является разработка программы на языке программирования Delphi для идентификации формы законараспределения погрешностей экспериментальных данных.
1.1 Потребность видентификации распределения погрешностей
Обоснованное решениемногих задач требует идентификации формы распределения погрешностей.
Эта идентификация нужна,т.к. рассеяние многих оценок зависит от формы закона распределения. Дляобеспечения одной и той же погрешности в определении оценки при одном законеможно ограничиться достаточно малой выборкой, в то время как при другом –выборка исходных данных должна быть значительно больше. Из этого следует, чтознание вида закона распределения необходимо для определения одних параметровзакона распределения через другие его параметры. Изменение вида законараспределения погрешностей может служить признаком какого-либо измененияусловий проведения измерений.
Экспериментальные данныео разнообразии форм распределения погрешностей измерений накоплены вдостаточном количестве. В результате этого факт разнообразия законовраспределения погрешностей был признан законодательно. 1 января 1974 г. былвведен в действие ГОСТ 8.011 – 72, устанавливающий, что при сообщении размерапогрешности результата измерения целесообразно указывать вид распределения. Также были стандартизованы модели равномерного, трапецеидального, треугольного,нормального и двухмодальных распределений.
Надо заметить, чтовозможность идентификации формы распределения экспериментальных данныхограничена, прежде всего, малостью объема выборки. При большом объеме выборки,например в несколько тысяч наблюдений, построение гистограммы часто позволяетполучить достаточно плавную кривую, которая отражает все характерныеособенности наблюдаемого закона. Другими словами, более тонкая идентификацияформы распределения возможна лишь при соответствующем увеличении объема выборкиэкспериментальных данных.
Следовательно, можносделать вывод о том, что имеет большое значение накопление данных и составлениекаталога распределения погрешностей различных средств измерений (датчиков,приборов), широко применяемых методов измерений, для того чтобы этими даннымиможно было затем пользоваться даже при наличии малых серий измерений.
1.2 Оптимальное числоинтервалов группирования экспериментальных данных
Для определения медианы,сгибов, других квантилей, использования критерия согласия Колмогорова-Смирноваили для обнаружения промахов экспериментальные данные необходимо расположить впорядке возрастания, т.е. построить вариационный ряд (упорядоченную выборку).
Для определения формыраспределения просто упорядоченной выборки недостаточно, она должна бытьпредставлена в виде гистограммы, состоящей из m столбцов с определенной протяженностью d соответствующих им интервалов. Принятоделать эти интервалы одинаковыми. Существует оптимальное число интерваловгруппирования, когда ступенчатая огибающая гистограммы наиболее близка к плавнойкривой распределения. При группировании данных в слишком большое число мелкихинтервалов гистограмма будет отличаться от плавной кривой распределениявследствие изрезанности многими всплесками и провалами (некоторые интервалыокажутся пустыми или мало заполненными), т.е. будет иметь «гребенчатый» вид. Нопри слишком малом числе mинтервалов характерные особенности будут потеряны вследствие слишком крупнойступенчатости. Таким образом, оптимальным числом m интервалов является такое, когда максимальное возможноесглаживание случайных данных сочетается с минимальным искажением от сглаживаниясамой кривой искомого распределения. Для распределения погрешностей одним изпрактических признаков приближения к оптимуму может служить в гистограммепровалов. Близким к оптимальному считается наибольшее m, при котором гистограмма еще сохраняет плавный характер.
2 Проектированиепрограммного комплекса
/>
В данной работе будет использовано5 модулей и 4 формы.
Первая форма (mainForm) должна отражатьдружественный интерфейс, вариационный ряд чисел, количество этих чисел, оценкуцентра, количество столбцов и две кнопки. Button1 будет называться «Гистограмма», Button2 – «Рассчитать».
При нажатии кнопки Button2 рассчитываются min и max числа ряда, ширина интервала иколичество попаданий чисел в интервалы. Для пользователя выводятся на экранварианты количества столбцов для дальнейшего построения гистограммы. Поумолчанию предлагается максимальное количество.
В Delphi имеется два компонента,представляющие меню: MainMenu – главное меню />, и PopupMenu –всплывающее меню /> (страница Standard).
Основное свойствокомпонентов Items.Его заполнение производится с помощью конструктора меню. Расположим на формеэти компоненты.
1) Двойным щелчком покомпоненту MainMenu1 вызовем редактор меню.
2) Задаем свойству Captionзначение Файл.
/>
3) Щелчкоммышью ниже пункта меню Файл создаем новый пункт Открыть.
4) Аналогичнымспособом создаем все пункты меню Файл.
5) Аналогичным способомсоздаем все пункты меню Правка.
6) Аналогичным способомсоздаем все пункты меню ?
/>
7) Добавляем на формукомпонент ImageList1и заносим в него иконки для пунктов меню. Используя свойство Images компонента MainMenu1,связываем меню с наборомиконок. Для некоторыхпунктов меню, используя свойство ImageIndex, задаем иконки.
/>
При нажатии кнопки Button1 открывается вторая форма(grafic), которая отображает графики (гистограмма исходных данных,симметрированная гистограмма и полигон). Для удобства внизу формы расположеныфлажки (CheckBox1, CheckBox2, CheckBox3), а они в свою очередь на панели (компонентGroupBox1). Эти флажки можно как включать так и отключать. По умолчанию, при открытииформы, они активированы.
/>
Открывая пункт меню «Опрограмме» появляется третья форма (о программе). На нее помещенкомпонент Image1 (данная картинка отображает суть программы), кнопка «ОК»(компонент Button1) и краткие данные.
/>
Открывая пункт меню«Справка» появляется четвертая форма (справка). На которую помещенкомпонент Memo1, в котором отображено как пользоваться данной программой.
3. Кодированиепрограммы
/>
3.1 Модуль Math
В данном модуле мыописываем все свои математические действия. Здесь мы рассчитываем ширинуинтервала, количество интервалов, max, min.
Код модуля приведен вприложении А.
3.2 Модуль 1
Первый модуль связаннепосредственно с первой формой, о которой говорилось выше. Здесь мы описываемдружественный интерфейс, вывод вариационного ряда в компонент Memo1. Причем,нужно учесть, что в файле, где сохранены числа первым указана оценка центра Хс,его мы выводим на форму в Label3. Так же мы описываем здесь расчеты, которыепрограмма выполняет при нажатии на кнопку Button2 и Button3. Описана связьпервой формы со второй.
Код модуля приведен вприложении Б.
3.3 Модуль 2
В данном модуле программарассчитывает и строит графики. Связан с модулем 1 и модулем Math
Код модуля приведен вприложении В.
3.4 Модуль 3
Этот модуль описываеттретью форму, связан с первым модулем.
Код модуля приведен вприложении Г.
3.5 Модуль 4
Данный модуль прилагаетсяк четвертой форме, на которой располагается справка.
Код модуля приведен вприложении Д.
Заключение
Цельюданной работы являлась разработка программы на языке программирования Delphi для идентификации формы законараспределения погрешностей экспериментальных данных. Построение полигона,который более наглядно, чем гистограмма, отражает форму распределения,производилось путем соединения прямыми середин верхних оснований каждогостолбца гистограммы. За пределами гистограммы, как слева, так и справаследовали пустые интервалы, в которых точки, соответствующие их серединам,лежали на оси абсцисс. Все эти точки, при построении полигона, соединялисьмежду собой отрезками прямых линий, образуя с осью х замкнутую фигуру. Призамене гистограммы кривой в виде полигона выполняется автоматически правилонормирования, т.к. от каждого большого столбца гистограммы (рис.1) отсекается иотбрасывается часть площади в виде треугольников, заштрихованных на рис.1вертикально, а к каждому меньшему столбцу добавляются такие же площадитреугольников, заштрихованных горизонтально. В итого общая площадь под кривойполигона остается равной площади исходной гистограммы. Однако это «перемещениеплощадей» при переходе от гистограммы к полигону происходит всегда «вниз по склону».В итоге площадь центрального столбца в полигоне оказывается меньше площадицентрального столбца гистограммы. Чтобы устранить это явление, мы считалицентральный столбец гистограммы состоящим из двух равных столбцов. В этомслучае вершина кривой полигона выше верхнего основания центрального столбца,как это показано штриховой линией на рис.1, но площадь под кривой полигона впределах центрального столбца будет равна площади центрального столбцагистограммы.
/>
Рис.1
ПРИЛОЖЕНИЕ А
(Модуль Math)
unit uMath;
interface
const
MaxN = 1000;
type
IndexEl = 1..maxN;
TM =array[IndexEl] of Real;
TParam =(lev, prav, kolvo);
var
arrReal: TM;//исходные данные
CountX: Integer; //кол-во исходныхчисел
dX: Real; //ширина интервала
MasInt: array[TParam, IndexEl] of Real;
dXmax:IndexEl;
M: integer;
N: integer; //фактрическое кол-во чисел
CountInterv: Integer; //фактическоекол-во интервалов
i: IndexEl;
s: integer;
sa: real;
buf: Real;
imin:IndexEl;
j: IndexEl;
Me: Real;
x: Real;
Mmin: Real;
Mmax: Real;
Xc: Real;//оценка центра
SredInt:Integer;
Max, Min:real;
functionfMmin(N: Integer): Integer;
functionfMmax(N: Integer): Integer;
functionfdX(M: TM; N: Integer; Xc: Real; NInt: Integer): Real;
procedureChastotaGist;
implementation
uses Math;
functionfMmin(N: Integer): Integer;
var
x: Real;
begin
X :=0.55*power(N,0.4);
Result :=round(X);
end;
functionfMmax(N: Integer): Integer;
var
x: Real;
begin
X :=1.25*power(N,0.4);
Result :=round(X);
end;
functionfdX(M: TM; N: Integer; Xc: Real; NInt: Integer): Real;
var
i: Integer;
x, R: Real;
nGist,NumInt: integer;
Gist: array[1..5] of Integer;
begin
Mmax := M[1];
Mmin := M[1];
for i := 2 toN do
begin
if M[i] >Mmax then Mmax := M[i];
if M[i]
end;
if abs(MMax — Xc) > abs(MMin — Xc) then
x := MMax
else
x := MMin;
Result := (2* abs(x — Xc)) / NInt;
end;
procedureChastotaGist;
var
i, NumInt:Integer;
begin
for i := 1 to CountIntervdo
MasInt[kolvo,i] := 0;
for i := 1 toN do
begin
NumInt :=Trunc((arrReal[i] — MMin)/dx) + 1;
MasInt[kolvo,NumInt] := MasInt[kolvo, NumInt] + 1;
end;
end;
end.
ПриложениеБ (Модуль1)
unit Unit1;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ImgList, Menus, StdCtrls, ExtCtrls, ExtDlgs, ComCtrls, Math;
type
TForm1 =class(TForm)
MainMenu1:TMainMenu;
PopupMenu1:TPopupMenu;
N1:TMenuItem;
N2:TMenuItem;
N3:TMenuItem;
N4:TMenuItem;
N5:TMenuItem;
N6:TMenuItem;
N7:TMenuItem;
N8:TMenuItem;
N9:TMenuItem;
N10:TMenuItem;
N11:TMenuItem;
ImageList1:TImageList;
N12:TMenuItem;
N13:TMenuItem;
N14:TMenuItem;
Memo1: TMemo;
OpenDialog1:TOpenDialog;
SaveDialog1:TSaveDialog;
N15:TMenuItem;
Button1:TButton;
Button2:TButton;
ComboBox1:TComboBox;
Label1:TLabel;
Label2:TLabel;
Label3:TLabel;
Label4:TLabel;
N16:TMenuItem;
procedureN6Click(Sender: TObject);
procedureN11Click(Sender: TObject);
procedureN4Click(Sender: TObject);
procedureN3Click(Sender: TObject);
procedureN15Click(Sender: TObject);
procedureN2Click(Sender: TObject);
procedureButton1Click(Sender: TObject);
procedureButton2Click(Sender: TObject);
procedureN16Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
functionTextSaved: Boolean;
end;
var
Form1:TForm1;
implementation
uses Unit2,uMath, Unit3, Unit4;
{$R *.dfm}
functionTForm1.TextSaved: Boolean;
begin
Result :=True;
ifMemo1.Modified then
caseMessageDlg('Save current document?', mtConfirmation, mbYesNoCancel, 0) of
mrYes:
begin
N3Click(Self);
Result := notMemo1.Modified;
end;
mrCancel:Result := False;
end;
end;
procedureTForm1.N6Click(Sender: TObject);
begin
if TextSavedthen
begin
Memo1.Lines.Clear;
Caption :='Text Editor';
SaveDialog1.FileName:= '';
end;
end;
procedureTForm1.N11Click(Sender: TObject);
begin
Form3.Show;
end;
procedureTForm1.N4Click(Sender: TObject);
begin
withSaveDialog1 do
if Executethen
begin
Memo1.Lines.SaveToFile(FileName);
Memo1.Modified := False;
// — сохранение текста вфайле
Caption := 'Text Editor — ' +ExtractFileName(FileName);
end;
end;
procedureTForm1.N3Click(Sender: TObject);
begin
withSaveDialog1 do
if FileName ='' then
N4Click(Self)
else
begin
Memo1.Lines.SaveToFile(FileName);
Memo1.Modified:= False;
end;
end;
procedureTForm1.N15Click(Sender: TObject);
begin
Close;
end;
procedureTForm1.N2Click(Sender: TObject);
var
i:Integer;
f:System.Text;
sX: string;
X: Real;
begin
withOpenDialog1 do
if Executethen
begin
AssignFile(f,OpenDialog1.FileName);
Reset(f);
ReadLn(f,sX);
X :=StrToFloat(sX);
Xc := X;
i := 0;
while notEOF(f) do
begin
i := i + 1;
ReadLn(f,sX);
X :=StrToFloat(sX);
arrReal[i] :=X;
end;
N := i;
CloseFile(f);
Label2.Caption:= FloatToStr(Xc);
Label4.Caption:= format('Кол-во: %d',[N]);
Memo1.Lines.Clear;
for i:=1 to Ndo
Memo1.Lines.Add(format('%f',[arrReal[i]]));
Caption :='Text Editor — ' + ExtractFileName(FileName);
end;
end;
procedureTForm1.Button1Click(Sender: TObject);
begin
Form2.Raschet;
Form2.Show;
end;
procedureTForm1.Button2Click(Sender: TObject);
var
i, min, max:Integer;
begin
min :=fMmin(N);
max :=fMmax(N);
ComboBox1.Clear;
for i := minto max do
if Odd(i)then
ComboBox1.Items.Add(format('%d',[i]));
ComboBox1.ItemIndex:= ComboBox1.Items.Count — 1;
end;
procedureTForm1.N16Click(Sender: TObject);
begin
Form4.Show;
end;
end.
Приложение В (Модуль 2)
unit Unit2;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,TeEngine, Series, ExtCtrls, TeeProcs, Chart, Math, StdCtrls;
const
MaxN = 1000;
type
TForm2 =class(TForm)
Chart1:TChart;
Series1:TBarSeries;
Series2:TBarSeries;
Series3:TLineSeries;
GroupBox1:TGroupBox;
CheckBox1:TCheckBox;
CheckBox2:TCheckBox;
CheckBox3:TCheckBox;
procedureCheckBox1Click(Sender: TObject);
procedureCheckBox2Click(Sender: TObject);
procedureCheckBox3Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
procedureRaschet;
end;
var
Form2:TForm2;
implementation
uses Unit1,uMath;
{$R *.dfm}
{ TForm2 }
procedureTForm2.Raschet;
var
sum: Real;
i: integer;
a, Centr:Real;
begin
CountInterv:=StrToInt(Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex]);
SredInt :=(CountInterv div 2) + 1;
dX :=fdX(arrReal, N, Xc, CountInterv);
ChastotaGist;
Chart1.Series[0].Clear;
Chart1.Series[1].Clear;
Chart1.Series[2].Clear;
//исходные
for i := 1 toCountInterv do
Chart1.Series[0].AddXY(i,MasInt[kolvo,i]);
//симмметрированные
for i :=SredInt+1 to CountInterv do
begin
sum :=MasInt[kolvo, i] + MasInt[kolvo, CountInterv+1-i];
MasInt[kolvo,i] := sum /2;
MasInt[kolvo,CountInterv+1-i] := sum /2;
end;
for i := 1 toCountInterv do
Chart1.Series[1].AddXY(i,MasInt[kolvo,i]);
//полигон
a :=abs(MasInt[kolvo, SredInt] — MasInt[kolvo, SredInt — 1]);
a := a / 3 *4;
Centr :=MasInt[kolvo, SredInt — 1] + a;
Chart1.Series[2].Clear;
Chart1.Series[2].AddXY(0,0);
for i := 1 toCountInterv do
begin
if i SredInt then
Chart1.Series[2].AddXY(i,MasInt[kolvo,i])
else
Chart1.Series[2].AddXY(i,Centr);
end;
Chart1.Series[2].AddXY(CountInterv+1,0);
end;
procedureTForm2.CheckBox1Click(Sender: TObject);
begin
Chart1.Series[0].Active:= CheckBox1.Checked;
end;
procedureTForm2.CheckBox2Click(Sender: TObject);
begin
Chart1.Series[1].Active:= CheckBox2.Checked;
end;
procedureTForm2.CheckBox3Click(Sender: TObject);
begin
Chart1.Series[2].Active:= CheckBox3.Checked;
end;
end.
Приложение Г (Модуль 3)
unit Unit3;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,StdCtrls;
type
TForm3 = class(TForm)
Image1:TImage;
Label1: TLabel;
Label2:TLabel;
Label3:TLabel;
Label4: TLabel;
Label5:TLabel;
Button1:TButton;
procedureButton1Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form3:TForm3;
implementation
{$R *.dfm}
procedureTForm3.Button1Click(Sender: TObject);
begin
Close;
end;
end.
ПриложениеД (Модуль 4)
unit Unit4;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm4 =class(TForm)
Memo1: TMemo;
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form4:TForm4;
implementation
{$R *.dfm}
end.
Список использованныхисточников
1. Новицкий П.В. Оценка погрешностейрезультатов измерений / П.В. Новицкий, И.А Зограф. — 2-е изд., перераб. – Л.:Энерго – Атомиздат,1991. – 304 с.