Учебная работа. Курсовая работа: Построение графиков функций

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: Построение графиков функций

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

КУРГАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра автоматизации производственных действий

Тема курсовой работы:

«Построение графиков функций»

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

Расчетно-пояснительная записка.

Дисциплина: Программирование и базы алгоритмизации

Студент: Яковлев П. С.

Группа: Т-2144

Управляющий: Скобелев И. В.

Комиссия__________________

Оценка____________________

Дата защиты_______________

Курган, 2006г.
Оглавление

1. Техническое задание

2. Общая блок-схема метода

3. Описание работы программного продукта

4. инструкция по установки программного продукта

5. инструкция оператору

6. Ограничения данной версии программки

7. Вывод

Перечень применяемой литературы


1. Техническое задание

Программный продукт GRAPHIC дозволяет строить и сохранять графики всех функций одной переменной. Продукт разработан на языке программирования Мicrosoft Visual C++ 6.0 с внедрением объектно-ориентированной методологии. Диалог юзера с программкой, а конкретно введение характеристик, осуществляется средством диалоговых окон программки. Спектр вводимых значений программно ограничен, с целью недопущения неправильной работы либо появления ошибки.

2. Общая блок-схема метода

Общая блок схема метода программки GRAPHIC:

3. Описание работы программного продукта

Программка “GRAPHIC” дозволяет строить и сохранять графики функций одной переменной. При открытии программки возникает окно, в каком уже по дефлоту построен график функции f(x)=sin(x)+0.05*x на отрезке [-5,10]. Выбрав на панели меню пункт Функция, и, изменяя поле ввода в показавшемся диалоговом окне, можно выстроить нужный график функции либо поменять отрезок, на котором построен график.

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

class CGRAPHICView : public CView //Класс Single Document

{

public:

CString sFunc;

double XX;

double X1;

double X2;

int SdvX;

int SdvY;

int DlX;

int DlY;

CDC* pDCbuf;

bool GbNeedRepaint;

CMFunc vFunc;

CFuncEval FuncEval;

void Vichislenie();

void VFillBuffer (CDC* pSrcDC);

//Другие характеристики и способы класса SingleDocument

};

classCMFunc //Класс расчета функции

{

public:

double FXX[400];

double FYY[400];

bool FYYER[400];

int KolT;

double MinY;

double MaxY;

void FuncMaxMinY();

CMFunc();

};

void CGRAPHICView::OnDraw(CDC* pDC) //Функцияпрорисовкидокумента

{

CGRAPHICDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

try

{

VFillBuffer(pDC);

}

catch (…)

{

MessageBox(_T(«Ошибкапостроенияграфика!»),_T(«Ошибка»));

}

}

voidCGRAPHICView::Vichislenie() //Функция вычисления характеристик функции

{

int a; double shag;

extern BOOL bMathError;

FuncEval.SetString(sFunc);

//Вычисляемшаг shag

shag=((X2-X1)/(vFunc.KolT-1));

//Вычисляемузлыфункции vFunc.FXX[a]

for(a=0;a<(vFunc.KolT-1);a++)

vFunc.FXX[a]=X1+a*shag;

vFunc.FXX[vFunc.KolT-1]=X2;

//Вычисляем значения функции в узлах vFunc.FYY[a] и ошибку вычисления vFunc.FYYER[a]

for(a=0;a<vFunc.KolT;a++) {

bMathError = FALSE;

XX=vFunc.FXX[a];

vFunc.FYY[a] = FuncEval.Compute ();

vFunc.FYYER[a] = bMathError;

}

//Вычисляем max и min значенияфункции vFunc.MaxY и vFunc.MinY

vFunc.FuncMaxMinY();

}

void CGRAPHICView::VFillBuffer (CDC* pSrcDC) //Функциярисованияграфика

{

int OtstX;

int OtstY;

int DlOX;

int DlOY;

int KolLX;

int KolLY;

SdvX=30;

SdvY=30;

DlX=700;

DlY=370;

OtstX=80;

OtstY=30;

DlOX=DlX-OtstX-50;

DlOY=DlY-2*OtstY;

KolLX=10;

KolLY=10;

double KoefX;

double KoefY;

int a; double d,dd; CString sss;

if(GbNeedRepaint==TRUE) {

//Вычисление характеристик функции (объект vFunc класса CMFunc)

Vichislenie();

//???????????????????????????????????????????????

pDCbuf->DeleteDC ();

pDCbuf->CreateCompatibleDC (pSrcDC);

CBitmap bitmap;

bitmap.CreateCompatibleBitmap(pSrcDC,DlX,DlY);

CBitmap* pbmp=pDCbuf->SelectObject(&bitmap);

//Рисование графика————————————————-

//цвета (разметки (линий) — cvet1, осей — cvet2, графика — cvet3)

CPen cvet1(PS_SOLID,1,RGB(100,100,50));

CPen cvet2(PS_SOLID,1,RGB(200,0,200));

CPen cvet3(PS_SOLID,1,RGB(255,0,0));

//Отключаем фон текста и устанавливаем цвет текста

pDCbuf->SetBkMode(TRANSPARENT);

pDCbuf->SetTextColor(RGB(0,0,210));

//Закрашиваем область графика

pDCbuf->FillSolidRect(0,0,DlX,DlY,RGB(235,235,235));

//Рисование разметки X

pDCbuf->SelectObject(cvet1);

d=((double)DlOX/(KolLX-1));

for(a=0;a<KolLX;a++) {

pDCbuf->MoveTo(OtstX+(int)(a*d),OtstY);

pDCbuf->LineTo(OtstX+(int)(a*d),OtstY+DlOY);

}

//Рисование разметки Y

d=((double)DlOY/(KolLY-1));

for(a=0;a<KolLY;a++) {

pDCbuf->MoveTo(OtstX,OtstY+(int)(a*d));

pDCbuf->LineTo(OtstX+DlOX,OtstY+(int)(a*d));

}

//Подписи X

d=(X2-X1)/(KolLX-1);

dd=((double)DlOX/(KolLX-1));

for(a=0;a<(KolLX-1);a++) {

sss.Format(_T(«%.3f»),X1+a*d);

pDCbuf->TextOut(OtstX+(int)(a*dd)-4*sss.GetLength(),OtstY+DlOY+3,sss);

}

sss.Format(_T(«%.3f»),X2); a=KolLX-1;

pDCbuf->TextOut(OtstX+(int)(a*dd)-4*sss.GetLength(),OtstY+DlOY+3,sss);

//Подписи Y

d=(vFunc.MaxY-vFunc.MinY)/(KolLY-1);

dd=((double)DlOY/(KolLY-1));

for(a=1;a<(KolLY-1);a++) {

sss.Format(_T(«%.3f»),vFunc.MinY+a*d);

pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-(int)(a*dd)-7,sss);

}

sss.Format(_T(«%.3f»),vFunc.MinY);

pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-12,sss);

sss.Format(_T(«%.3f»),vFunc.MaxY); a=KolLY-1;

pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-(int)(a*dd)-7,sss);

//Подпись «График функции…»

sss.Format(_T(» на отрезке [%.2f,%.2f]»),X1,X2);

pDCbuf->TextOut(OtstX+80-2*sFunc.GetLength(),OtstY-25,(_T(«График функции f(x)=»)+sFunc+sss));

//Вычисления коэффициентов сжатия на дисплее KoefX и KoefY

KoefX=((double)DlOX)/(X2-X1);

KoefY=((double)DlOY)/(vFunc.MaxY-vFunc.MinY);

//Рисование осей X и Y

pDCbuf->SelectObject(cvet2);

if(X1<=0&&X2>=0) {

pDCbuf->MoveTo(OtstX-(int)(X1*KoefX),OtstY);

pDCbuf->LineTo(OtstX-(int)(X1*KoefX),OtstY+DlOY);

}

if(vFunc.MinY<=0&&vFunc.MaxY>=0) {

pDCbuf->MoveTo(OtstX,OtstY+DlOY+(int)(KoefY*vFunc.MinY));

pDCbuf->LineTo(OtstX+DlOX,OtstY+DlOY+(int)(KoefY*vFunc.MinY));

}

//Рисование самого графика функции

pDCbuf->SelectObject(cvet3);

for(a=1;a<vFunc.KolT;a++) {

if(vFunc.FYYER[a-1]==FALSE&&vFunc.FYYER[a]==FALSE) {

pDCbuf->MoveTo(OtstX+(int)(KoefX*(vFunc.FXX[a-1]-X1)),OtstY+DlOY-(int)(KoefY*(vFunc.FYY[a-1]-vFunc.MinY)));

pDCbuf->LineTo(OtstX+(int)(KoefX*(vFunc.FXX[a]-X1)),OtstY+DlOY-(int)(KoefY*(vFunc.FYY[a]-vFunc.MinY)));

}

}

//——————————————————————

GbNeedRepaint=FALSE;

}

//Копирование буфера pDCbuf на экран

pSrcDC->BitBlt (SdvX, SdvY, DlX, DlY, pDCbuf, 0, 0, SRCCOPY);

}

voidCGRAPHICView::OnFileSave() //Функция сохранения графика

{

HRESULT hResult;

CString strFilter;

strFilter = «PNG image (*.png)|*.png||»;

CFileDialog dlg(FALSE,_T(«png»),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,strFilter);

hResult = (int)dlg.DoModal();

if (hResult != IDOK) {MessageBox(«Отменено юзером