Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая.docx
Скачиваний:
25
Добавлен:
11.05.2015
Размер:
701.83 Кб
Скачать

Integral.Cpp– вычисление интеграла методом левых прямоугольников и получение точного решения интеграла

# ifndef __Func_cpp

# include "Func.cpp"

# endif

float integr(float x1, float x2, int n, float a, float b, float c, int k)

{//вычисление интеграла методом левых прямоугольников

float h = (x2 - x1) / n,//ширина одного прямоугольника

znInt = 0;//значение интеграла (сумма площадей прямоугольников)

for(int i = 0; i < n; i++)//вычисление суммы

znInt += h * y(x1 + i * h, a, b, c, k);

return znInt;

}

float integrToch(float x1, float x2, float a, float b, float c, int k)

{//точное решение интеграла = первообразная(х2) - первообразная(х1)

return yPervoobr(x2, a, b, c, k) - yPervoobr(x1, a, b, c, k);

}

Func.cpp– вычисление значения функции и ее первообразной от заданного аргумента

# ifndef __math_h

# include <math.h>

# endif

float y(float x, float a, float b, float c, int k)

{//значение фукнции под номером k(нумерация с нуля) при аргументе x, с заданными коэффициентами a, b, c

switch(k)

{

case 0:

return a * pow(x, 3) + b * x + c;

case 1:

return a * sin(x + b) + c;

case 2:

{

if(x + b != 0)

return a / (x + b) + c;

else

{

cout<<"Oshibka. Znamenatel' prinimaet nylevoe znachenie!";

return 0;

}

}

default:

return 0;

}

}

float yPervoobr(float x, float a, float b, float c, int k)

{//первообразная функций

switch(k)

{

case 0:

return a * pow(x, 4) / 4 + b * pow(x, 2) / 2 + c * x;

case 1:

return - a * cos(x + b) + c * x;

case 2:

if(x + b != 0)

return a * log (x + b) + c * x;

else

{

cout<<"Oshibka. Argyment logarifma prinimaet nylevoe znachenie!";

return 0;

}

default:

return 0;

}

}

Graph.cpp– отображение графиков функций и процесс вычисления интеграла в графическом режиме

#include <graphics.h>

#include <values.h>

int gdriver = DETECT, gmode, errorcode;

void showGraph(float x1, float x2, int n, float a, float b, float c, int k,

int miny, int maxy)

{//отображение графика одного уравнения с номером k на области от minx до miny по вертикали

float h = (x2 - x1) / n;//ширина одного прямоугольника

int minx = 20,// и miny, maxy - границы области в которой нужно нарисовать график

maxx = 600;

float y1 = MAXDOUBLE,//мин и макс значение функции

y2 = -MAXDOUBLE,

dx;

for(int i = 0; i <= n; i++)

{//поиск мин и макс значений функции у1 и у2

float zn = y(x1 + i * h, a, b, c, k);

if(y1 > zn)

y1 = zn;

if(y2 < zn)

y2 = zn;

}

float kx, ky;//коэффициенты растяжения графика по 0х и по 0у на всю область

kx = (maxx - minx)/(x2 - x1);

ky = (maxy - miny)/(y2 - y1);

int Oy = ky * y2 + miny;//где находится ось (уравнение x=0)

int OyOtobr;//отображаемая ось

if (ky * y2 + miny > maxy)//если уравнение x=0 находится вне области отображения графика, отображаем ось внизу области

OyOtobr = maxy;

else//иначе на том уровне, где она должна быть

OyOtobr = ky * y2 + miny;

dx = kx * h;//шаг по 0х в пиксельном выражении

setcolor(GREEN);//прямоугольники зеленым

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

rectangle(minx + dx * i, Oy - y(x1 + i * h, a, b, c, k) * ky,

minx + dx * (i + 1), OyOtobr);

setcolor(RED);//график красным

moveto(minx, Oy - y(x1, a, b, c, k) * ky);//встаем в начало

for(i = 0; i <= n; i++)//и прорисовываем график

lineto(minx + dx * i, Oy - y(x1 + i * h, a, b, c, k) * ky);

setcolor(WHITE);//оси белым

moveto(minx, OyOtobr);//прорисовка осей

lineto(maxx + 8, OyOtobr);

lineto(maxx + 3, OyOtobr - 5);

moveto(maxx + 8, OyOtobr);

lineto(maxx + 3, OyOtobr + 5);

moveto(minx, maxy);

lineto(minx, miny - 8);

lineto(minx + 5, miny - 3);

moveto(minx, miny - 8);

lineto(minx - 5, miny - 3);

if(x1 * x2 < 0)//отображение точки (0,0), если она оказалась в отображаем области

outtextxy(minx - x1 * kx - 3, OyOtobr + 5, "(0,0)");

}

void showGraphs(float x1, float x2, int n, float a, float b, float c)

{

initgraph(&gdriver, &gmode,"");//переход в графический режим

showGraph(x1, x2, n, a, b, c, 0, 10, 150);//отображение графика первого уравнения на участке экрана от 10 до 150 пикселей сверху

showGraph(x1, x2, n, a, b, c, 1, 172, 322);//отображение графика второго уравнения -//-

showGraph(x1, x2, n, a, b, c, 2, 344, 470);//отображение графика третьего уравнения -//-

getch();

closegraph();//выход из графического режима

}