Реферат: Расчетная методика проектирования программного комплекса

Министерствообразования и науки Российской Федерации

Государственноеобразовательное учреждение высшего профессионального образования

«Комсомольский– на – Амуре государственный технический университет »

Институт ИКПМТО

Кафедра Технологиимашиностроения

ПОЯСНИТЕЛЬНАЯЗАПИСКА

к курсовомупроекту

Расчетнаяметодика проектирования программного комплекса

Студент группы 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] <Mmin then Mmin := 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 с.

еще рефераты
Еще работы по информатике, программированию