- •Москва, 2001
- •Инструкция для пользователя: Нужная функция выбирается в поле “Введите вашу функцию”.
- •Краткие пояснения к работе программы:
- •Список литературы:
- •Керниган б., Ритчи д. Язык программирования Си.-м.: Финансы и статистика, 1992.-272с.
- •Подбельский в.В., Фомин с.С. Программирование на языке Си.-м.:Финансы и статистика, 1998.-600с.
- •Тондо к., Гимпел с. Язык Си. Книга ответов.–м.: Финансы и статистика, 1994.-160с.
Московский институт электронной техники
Курсовая работа
по курсу
“ОВП”
Сглаживание эмпирических
(опытных) данных .
Выполнил:
Комиссаров А.
Проверил:
Серов А.Н.
Москва, 2001
Оглавление:
-
Введение.................................................
-
Постановка задачи........................................
-
Инструкция пользователя..................................
-
Аппаратные и программные требования......................
-
Текст программы(и коментарии)............................
-
Список литературы........................................
-
Приложение(блоксхема)....................................
-
Введение.
Целью данного курсового проекта является закрепление полученных знаний по изучению языка программирования СИ. В качестве темы выбрано сглаживание эмпирических (опытных) данных. К змпирическим данным относят любые данные,полученные (измеренные)c пормощью опыта.Соответственно,при таких измерениях разброс значений достаточно большой,поэтому данные сглаживают.Также,необходимо произвести учет погрешностей измерительных приборов.
-
Постановка задачи:
Разработать программу сглаживания эмпирических (опытных) данных. Известны приближённые значения некоторой функции 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;
Результаты сглаживания отобразить в виде графиков.
-
Инструкция пользователя:
-
запустить компилятор CBuilder 4.0,
-
открыть файл проекта graph.bpr,
-
запустить программу на выполнение (F9),
-
установить необходимые значения погрешности и количества точек,
-
в списке ввода функций выбрать необходимую зависимость.
-
для выхода из программы необходимо нажать кнопку ВЫХОД.
-
Аппаратные и программные требования:
Для запуска программы необходимо:
-
компьютер с процессором 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)
На рис. показано главное окно программы с интерфейсом для ввода данных;