Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прочее / ZAPISKA1.DOC
Скачиваний:
14
Добавлен:
17.04.2013
Размер:
1.01 Mб
Скачать

Московский институт электронной техники

Курсовая работа

по курсу

“ОВП”

Сглаживание эмпирических

(опытных) данных .

Выполнил:

Комиссаров А.

Проверил:

Серов А.Н.

Москва, 2001

Оглавление:

  1. Введение.................................................

  2. Постановка задачи........................................

  3. Инструкция пользователя..................................

  4. Аппаратные и программные требования......................

  5. Текст программы(и коментарии)............................

  6. Список литературы........................................

  7. Приложение(блоксхема)....................................

  1. Введение.

Целью данного курсового проекта является закрепление полученных знаний по изучению языка программирования СИ. В качестве темы выбрано сглаживание эмпирических (опытных) данных. К змпирическим данным относят любые данные,полученные (измеренные)c пормощью опыта.Соответственно,при таких измерениях разброс значений достаточно большой,поэтому данные сглаживают.Также,необходимо произвести учет погрешностей измерительных приборов.

  1. Постановка задачи:

Разработать программу сглаживания эмпирических (опытных) данных. Известны приближённые значения некоторой функции y(x) равноотстоящих точках Xi. Производится линейное сглаживание по трём координатам с помощью формул:

Y*0=(5Y0+2Y1-Y2)/6;

Y*i=(Y*i-1+Yi+Yi+1)/3;

Y*n=(5Yn+2Yn-1-Yn-2)/6;

Результаты сглаживания отобразить в виде графиков.

  1. Инструкция пользователя:

  • запустить компилятор CBuilder 4.0,

  • открыть файл проекта graph.bpr,

  • запустить программу на выполнение (F9),

  • установить необходимые значения погрешности и количества точек,

  • в списке ввода функций выбрать необходимую зависимость.

  • для выхода из программы необходимо нажать кнопку ВЫХОД.

  1. Аппаратные и программные требования:

Для запуска программы необходимо:

  • компьютер с процессором INTEL Pentium 100 и выше,

  • монитор, поддерживающий разрешение 800х600 точек,

  • 1 Mb дискового пространства,

  • 16 Mb оперативной памяти,

  • наличие операционной системы MS Windows 95 и выше,

  • наличие пакета Borland CBuilder версии 4.0

Необходимые файлы:

5) Текст программы:

{ Текст основной программы graph.bpr}

#include <vcl.h>

#pragma hdrstop

USERES("graph.res");

USEFORM("mainunit.cpp", MainForm);

USEUNIT("Data.cpp");

USEUNIT("string.cpp");

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TMainForm), &MainForm);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

{Текст модуля mainunit.cpp}

#include <vcl.h>

#pragma hdrstop

#include "mainunit.h"

//-----------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TMainForm *MainForm;

//-----------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

}

//-----------------------------------------------------------------------

void __fastcall OsiCoordinat() //Функция,рисующая оси

//координат

{

TCanvas *can;

AnsiString str_i;

can = MainForm->Canvas;

can->Brush->Color = clBtnFace;

can->Pen->Color = clBlack;

can->FillRect(MyRect);

can->Pen->Style = 2;

for (i=0;i<N;i++)

{

str_i=i;

can->MoveTo(X0+(X1-X0)/N*i,Y1);

can->LineTo(X0+(X1-X0)/N*i,Y0);

can->TextOut(X0+(X1-X0)/N*i-can->TextWidth(str_i)/2,Y0+5,i);

}

can->Pen->Style = 0;

can->MoveTo(X0,Y1);

can->LineTo(X0-2,Y1+5);

can->LineTo(X0+2,Y1+5);

can->LineTo(X0,Y1);

can->LineTo(X0,Y0);

can->LineTo(X1,Y0);

can->LineTo(X1-5,Y0-2);

can->LineTo(X1-5,Y0+2);

can->LineTo(X1,Y0);

}

//-----------------------------------------------------------------------

double __fastcall OneGl(double m[SIZE_MASS], int index) //Функция,сглаживающая значения по соотв.формулам.

{

if (index= =0) return (5*m[0]+2*m[1]-m[2])/6;

if (index= =N-1) return (5*m[N-1]+2*m[N-2]-m[N-3])/6;

return (gl_mass[i-1]+m[i]+m[i+1])/3;

}

//-----------------------------------------------------------------------

void __fastcall Trans() //Процесс сглаживания

{

gl_mass[0] = OneGl(mass,0);

gl_mass[N-1] = OneGl(mass,N-1);

for (i=1;i<N-1;i++)

{

gl_mass[i] = OneGl(mass,i);

}

}

//-----------------------------------------------------------------------

void __fastcall Pogr()//Функция,обрабатывающая погрешности

{

for (i=0;i<N;i++)

{

if (random(2)= =0)

{

eps_mass[i]=mass[i]-mass[i]*eps/100;

}

else

{

eps_mass[i]=mass[i]+mass[i]*eps/100;

}

}

}

//-----------------------------------------------------------------------

void __fastcall Graph()//Функция,строящая графики

{

TCanvas *can;

double MAX,MIN,dy;

can = MainForm->Canvas;

OsiCoordinat();

MAX = mass[0];

MIN = mass[0];

for (i=0;i<N;i++)

{

if (mass[i]>MAX) {MAX = mass[i];}

if (mass[i]<MIN) {MIN = mass[i];}

}

dy = (MAX-MIN)/(Y0-Y1);

if (dy>0)

{

if (MainForm->CheckBox1->Checked)//Построение графика самой функции

{

can->Pen->Color=clBlue;

can->Pen->Width=2;

can->Pen->Style=0;

can->MoveTo(X0,Y0-(int)((mass[0]-MIN)/dy));

for (i=0;i<N;i++)

{

can->LineTo(X0+(X1-X0)/N*i,Y0-(int)((mass[i]-MIN)/dy));

}

}

if (MainForm->CheckBox2->Checked)//Построение погрешностей

{

can->Pen->Color=clRed;

can->Pen->Width=1;

can->Pen->Style=1;

can->MoveTo(X0,Y0-(int)((eps_mass[0]-MIN)/dy));

for (i=0;i<N;i++)

{

can->LineTo(X0+(X1-X0)/N*i,Y0-(int)((eps_mass[i]-MIN)/dy));

}

}

if (MainForm->CheckBox3->Checked)//Посроение графика сглаженных //значений

{

can->Pen->Color=clGreen;

can->Pen->Width=1;

can->Pen->Style=0;

can->MoveTo(X0,Y0-(int)((gl_mass[0]-MIN)/dy));

for (i=0;i<N;i++)

{

can->LineTo(X0+(X1-X0)/N*i,Y0-(int)((gl_mass[i]-MIN)/dy));

}

}

can->Pen->Width=1;

can->Pen->Style=0;

}

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::FormPaint(TObject *Sender)

{

Graph();

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::UpDown1Click(TObject *Sender, TUDBtnType Button)

{

if (Button = = btNext)

{

if (eps<100) {eps += 0.1;}

}

else

{

if (eps>0) {eps -= 0.1;}

}

Eps_Edit->Text = eps;

Pogr();

Graph();

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::UpDown2Click(TObject *Sender, TUDBtnType Button)

{

if (Button = = btNext)

{

if (N<SIZE_MASS) {N += 1;}

}

else

{

if (N>10) {N -= 1;}

}

N_Edit->Text = N;

Graph();

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::CloseButtonClick(TObject *Sender)

{

Close();

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::ComboBox1Change(TObject *Sender)

{

for (i=0;i<N;i++)

{

switch (MainForm->ComboBox1->ItemIndex)//Список функций

{

case 0 : mass[i] = sin(i); break;

case 1 : mass[i] = cos(i); break;

case 2 : mass[i] = sin(i)*sin(i); break;

case 3 : mass[i] = cos(i)*cos(i); break;

case 4 : mass[i] = i*i; break;

case 5 : mass[i] = i*i*i; break;

case 6 : mass[i] = sin(i)+cos(i); break;

case 7 : mass[i] = sin(i*i); break;

case 8 : mass[i] = cos(i*i); break;

case 9 : mass[i] = cos(i)+i; break;

case 10 : mass[i] = sin(i)+i; break;

case 11 : mass[i] = cos(i)+i*i; break;

case 12 : mass[i] = sin(i)+i*i; break;

defaul : mass[i] = i; break;

}

}

Trans();

Pogr();

Graph();

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::GroupBox1Click(TObject *Sender)

{

Graph();

}

//-----------------------------------------------------------------------

void __fastcall TMainForm::CheckBox1Click(TObject *Sender)

{

Graph();

}

{Текст модуля string.cpp}

#pragma hdrstop

#include "string.h"

#include "data.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

int Control(char *s)

{

simbol <<'+'<<'-'<<'*'<<'/'<<'^';

for (i=0;i<strlen(s);i++)

{

if (simbol.Contains('1'))

{

}

else

{

return i;

}

}

}

{Текст модуля data.cpp}

#include <vcl.h>

#pragma hdrstop

#include "Data.h"

#pragma package(smart_init)

На рис. показано главное окно программы с интерфейсом для ввода данных;

Соседние файлы в папке Прочее