МІНІСТЕРСТВО ОСВІТИ І НАУКИ
РОСІЙСЬКОЇ ФЕДЕРАЦІЇ
МІНІСТЕРСТВО АГЕНСТВО ДО ОСВІТИ
Курганський ДЕРЖАВНИЙ УНІВЕРСИТЕТ
Кафедра автоматизації виробничих процесів
Тема курсової роботи:
В«Побудова графіків функцій В»
Курсова робота
Розрахунково-пояснювальна записка.
Дисципліна: Програмування та основи алгоритмізації
Студент: Яковлєв П. С.
Група: Т-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);
// Решта властивостей і методи класу Single Document
};
class CMFunc// Клас розрахунку функції
{
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 ("Помилка"));
}
}
void CGRAPHICView :: 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
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
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
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 ("% .3 f"), X1 + a * d);
pDCbuf-> TextOut (OtstX + (int) (a * dd) -4 * sss.GetLength (), OtstY + DlOY +3, sss);
}
sss.Format (_T ("% .3 f"), 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 ("% .3 f"), vFunc.MinY + a * d);
pDCbuf-> TextOut (OtstX-3-7 * sss.GetLength (), OtstY + DlOY-(int) (a * dd) -7, sss);
}
sss.Format (_T ("% .3 f"), vFunc.MinY);
pDCbuf-> TextOut (OtstX-3-7 * sss.GetLength (), OtstY + DlOY-12, sss);
sss.Format (_T ("% .3 f"), vFunc.MaxY); a = KolLY-1;
pDCbuf-> TextOut (OtstX-3-7 * sss.GetLength (), OtstY + DlOY-(int) (a * dd) -7, sss);
// Підпис "Графік функції ... "
sss.Format (_T ("на відрізку [% .2 f,% .2 f]"), 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...