Побудова графіків функцій

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

МІНІСТЕРСТВО ОСВІТИ І НАУКИ

РОСІЙСЬКОЇ ФЕДЕРАЦІЇ

МІНІСТЕРСТВО АГЕНСТВО ДО ОСВІТИ

Курганський ДЕРЖАВНИЙ УНІВЕРСИТЕТ

Кафедра автоматизації виробничих процесів

Тема курсової роботи:

«Побудова графіків функцій»

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

Розрахунково-пояснювальна записка.

Дисципліна: Програмування та основи алгоритмізації

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

Група: Т-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 <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);

/ / Малювання графіка ---------------------------------------------- ---

/ / Кольори (розмітки (ліній) - cvet 1, осей - cvet 2, графіка - cvet 3)

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 (cvet 1);

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 = (X 2 - X 1) / (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]"), X 1, X 2);

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 (cvet 3);

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);

}

void CGRAPHICView:: 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 ("Скасовано користувачем", "Попередження"); return;}

CString strFileName;

strFileName = dlg.m_ofn.lpstrFile;

CImage imgOriginal;

imgOriginal.Create (DlX, DlY, 24);

/ / Це дозволяє намалювати все що має бути збережене

(PDCbuf-> FromHandle (imgOriginal.GetDC ()))-> BitBlt (0, 0, DlX, DlY, pDCbuf, 0, 0, SRCCOPY);

hResult = imgOriginal.Save (strFileName);

try

{

imgOriginal.ReleaseDC ();

imgOriginal.Detach ();

imgOriginal.Destroy ();

}

catch (...)

{

}

if (FAILED (hResult)) {

MessageBox ("Помилка збереження!", "Помилка!");

}

}

4. Інструкція з інсталяції програмного продукту

Для установки програми запустіть файл GRAPHIC v 1.0 \ setup. Exe і дотримуйтесь вказівок майстра. Для видалення програми можна скористатися цим же файлом.

Гарантується робота даної програми в операційній системі Windows не нижче 98. У попередніх версіях робота програми не перевірялася.

Установка програми вимагає близько 1 Мб вільної пам'яті на жорсткому диску.

Увага!

За можливі помилки, збої, можливий заподіяний моральний або матеріальний збиток і т.д., автори відповідальності не несуть. Ви використовуєте програму на свій страх і ризик!

Якщо ви не згодні з цим, то не використовуйте цю програму!

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

При відкритті програми з'являється вікно, в якому вже за замовчуванням побудований графік функції f (x) = sin (x) +0.05 * x на відрізку [-5,10], як показано на малюнку:

Щоб побудувати необхідний графік функції або змінити відрізок, на якому побудований графік, виберіть на панелі меню пункт Функція. При цьому з'явиться таке діалогове вікно:

У цьому вікні ви можете змінювати параметри функції. Початок і кінець відрізка можуть бути введені будь-які з відрізка [-1.7976931348623158e +308, 1.7976931348623158e +308], але при цьому початок повинно бути менше кінця відрізка, інакше з'явиться повідомлення про помилку.

З функцією справа трохи складніше. Щоб інтерпретатор правильно зрозумів функцію, при її введенні потрібно користуватися правилами.

Унарні операції:

c os (x) - косинус

sin (x) - синус

tg (x) = tan (x) - тангенс

ctg (x) - котангенс

arccos (x) = acos (x) - арккосинус

arcsin (x) = asin (x) - арксинус

arctg (x) = atan (x) - арктангенс

arcctg (x) - арккотангенс

round (x) - звичайне округлення до цілого

sqr (x) - квадрат

sqrt (x) - арифметичний корінь

abs (x) = fabs (x) - модуль

neg (x) - заперечення

fact (x) - факторіал

exp (x) - експонента

ln (x) - натуральний логарифм

log10 (x) = lg (x) - десятковий логарифм

cosh (x) - гіперболічний косинус

sinh (x) - гіперболічний синус

tanh (x) - гіперболічний тангенс

floor (x) - округлення з недоліком

ceil (x) - округлення з надлишком

sign (x) - знак числа

inv (x) - логічна інверсія

- - Заперечення

Бінарні операції:

(За пріоритетністю з найменшого)

x + y = add (x, y) - складання x з y

xy = sub (x, y) - віднімання з xy

x * y = mul (x, y) - множення x на y

x / y = div (x, y) - поділ x на y

x & y = log (x, y) - логарифм від x по підставі y

x ^ y = pow (x, y) - зведення x до степеня y

x = y = x == y = equal (x, y) - якщо x = y, то 1 інакше 0

x <y = less (x, y) - якщо x <y, то 1 інакше 0

x> y = greater (x, y) - якщо x> y, то 1 інакше 0

and (x, y) - логічне І

or (x, y) - логічне АБО

xor (x, y) - логічне додавання за модулем 2 (операція, що виключає АБО) - сума Жегалкина

pirs (x, y) - стрілка Пірса

shef (x, y) - Штіх Шеффера

impl (x, y) - логічна імплікація

eq (x, y) - логічна еквіваленція

less (x, y) - x <y?

greater (x, y) - x> y?

less_or_equal (x, y) - x <= y?

greater_or_equal (x, y) - x> = y?

max (x, y) - більше з x і y

min (x, y) - менше із x і y

equal (x, y) - еквіваленція

percent (x, y) - відсоток y від x

rand (x, y) - випадкове число від x до y

Для всіх логічних операцій число відмінне від 0 це 1 (ПРАВДА), інакше 0 (БРЕХНЯ).

Числа пишуться в діапазоні [-1.7976931348623158e +308, 1.7976931348623158e +308]. Числа завжди записуються в десятковій формі, наприклад 1 1f 1.0 1,0 1.0f 1,0 f - одне і те ж число в шести різних формах. Не можна записувати числа в експонентний формі, наприклад 2.3e-5, натомість 2.3 * (10 ^ -5). Можна використовувати константи: pi - число π, e - число e. Змінної є буква x. Між функціями можна ставити роздільник - пробіл (space).

Щоб зберегти зображення виберіть у вкладці Файл -> Зберегти або Зберегти як. При цьому з'явиться стандартне діалогове вікно збереження, де вибирається шлях для збереження. Зображення зберігаються у форматі png.

6. Обмеження даної версії програми

Гарантується робота даної програми в операційній системі Windows не нижче 98. У попередніх версіях робота програми не перевірялася.

При роботі з програмою потрібно користуватися правилами, які наведено у розділі Опис роботи програмного продукту. У цьому випадку гарантується правильна робота програми. Причому потрібно обов'язково дотримуватися правил введення функції, інтерпретатор у цьому випадку зрозуміє функцію правильно. Якщо в полі введення функції ввести щось необумовлених правилами, інтерпретатор прийме це значення в будь-якому випадку, і не буде виведено ніякого повідомлення. Інтерпретатор зрозуміє, то що зможе розпізнати, решту він ігнорує. Наприклад, якщо буде введено "zxczxc" або порожній рядок, то функція сприйметься, як f (x) = 0. Якщо буде введено "dghld + sin (x) asdfasf + dfgdfg", то функція сприйметься, як f (x) = sin (x).

7. Висновок

Написана мною програма, дозволяє вирішувати найважливіше завдання математичного аналізу - побудова графіків функцій. Вона може полегшити роботу дослідження функцій. Програмний продукт GRAPHIC може бути використаний для навчальних цілей.

Програма написана при використанні найсучасніших на сьогоднішній день технологій програмування і забезпечує швидку і якісну роботу.

Список використаної літератури

  1. Мова програмування Сі + +. Курс лекцій. Навчальний посібник / Видання друге, виправлене / Фрідман А. Л. / М.: «Інтернет-університет Інформаційних Технологій», 2004 .- 264 с.

  2. Мова Сі + +. Навчальний посібник / Видання п'яте / Подбельський В. В. / М.: Фінанси і статистика, 2001 .- 560 с.: Іл.

  3. http://www.holzner.ru.

  4. http://www.firstsleps.ru.

  5. http://www.intuit.ru.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
67.3кб. | скачати


Схожі роботи:
Дослідження функцій і побудова їх графіків
Повне дослідження функцій і побудова їх графіків
Дисперсійний аналіз та побудова статистичних графіків
Вивчення функцій та їх графіків на елективної курсі з алгебри у 9 класі
Ділова графіка Побудова діаграм і графіків на основі електронні
Побудова діаграм і графіків на основі електронних таблицях Excel
Ділова графіка Побудова діаграм і графіків на основі електронних таблицях Excel
Види ринків Типи ринків Побудова графіків та діаграм з використанням програми Microsoft Excel
Равноточние і неравноточние вимірювання оцінка точності функцій виміряних величин Побудова
© Усі права захищені
написати до нас