Sunteți pe pagina 1din 4

Lucrare de laborator nr.

1
Disciplina: “Grafica 2D”

Condiţia: Să se scrie un program MFC de tipul single document care va desena în


fereastra aplicaţiei graficul funcţiei y = cos(x) şi va înscrie date în 2 fişiere.

Primul fişier va conţine:


- valoarea argumentului
- valoarea funcţiei standarte în punctul stabilit
- valoarea funcţiei proprii în acelaşi punct
- valoarea absolută a diferenţei dintre valoarea funcţiei standarte şi a funcţiei proprii
- precizia

Al doilea fişier va conţine:


- valoarea argumentului
- valoarea funcţiei prorii in punctul stabilit

Funcţia proprie va fi calculată cu ajutorul seriei:



x 2k
 (1)
k 0
k

(2k )!
, x  ( , ).

Codul programului:

GraficaLabView.cpp
---------------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#include "GraficaLab1.h"

#include "GraficaLab1Doc.h"
#include "GraficaLab1View.h"
#include <cmath>
#include <fstream>
#include <iostream>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using namespace std;

double fact(int n)
{
double factorial = 1;
for(int i = 1; i <= n; i++)
{
factorial *= i;
}

return factorial;
}

double MyCos(double x, double E)


{
double value = 0, term_serie;
int k = 0;

do
{
term_serie = pow(-1.0, k) * pow(x, 2 * k) / fact(2 * k);
value += term_serie;
k++;
}
while(fabs(term_serie) > E);
return value;
}

void CGraficaLab1View::OnDraw(CDC* pDC)


{
CGraficaLab1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
else
{
CRect RClient;
GetClientRect(&RClient);
int nrseg = 100;
double E = 0.0001, scale = 60, a = (-RClient.Width() / 2) / scale, b =
(RClient.Width() / 2) / scale, step = (b - a) / nrseg;
double x,y;
double ah = (-RClient.Height() / 2) / scale, bh = (RClient.Height() / 2) /
scale;

CPen pen_axis(PS_SOLID, 2, RGB(0, 0, 255));


CPen pen_cos(PS_SOLID, 1, RGB(255, 0, 0));
CPen pen_divisions(PS_SOLID, 2, RGB(0, 255, 0));

CPen *current_pen = pDC->SelectObject(&pen_axis);

pDC->MoveTo(0, RClient.CenterPoint().y);
pDC->LineTo(RClient.Width() - 1, RClient.CenterPoint().y);
pDC->MoveTo(RClient.CenterPoint().x, 0);
pDC->LineTo(RClient.CenterPoint().x, RClient.Height() - 1);

pDC->SelectObject(pen_divisions);
for(x = ceil(a); x <= b; ++x)
{
pDC->MoveTo(RClient.CenterPoint().x + (int)(x * scale),
RClient.CenterPoint().y - 3);
pDC->LineTo(RClient.CenterPoint().x + (int)(x * scale),
RClient.CenterPoint().y + 3);
}
for(y = ceil(ah); y <= bh; ++y)
{
pDC->MoveTo(RClient.CenterPoint().x - 3, RClient.CenterPoint().y -
(int)(y * scale));
pDC->LineTo(RClient.CenterPoint().x + 3, RClient.CenterPoint().y -
(int)(y * scale));
}
pDC->SelectObject(&pen_cos);
x = a;
y = MyCos(x, E);
pDC->MoveTo(RClient.CenterPoint().x + (int)(x * scale),
RClient.CenterPoint().y - (int)(y * scale));

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


{
x += step;
y = MyCos(x, E);
pDC->LineTo(RClient.CenterPoint().x + (int)(x * scale),
RClient.CenterPoint().y - (int)(y * scale));
}
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetTextAlign(TA_TOP | TA_RIGHT);
CString func1 = L"y = MyCos(x, E)";
pDC->TextOut(RClient.Width() - 1, 0, func1, func1.GetLength());

//step = 0.25;
for(x = a; x <= b; )
{
y = cos(x);
pDC->SetPixel(RClient.CenterPoint().x + (int)(x * scale),
RClient.CenterPoint().y - (int)(y * scale), RGB(0, 0, 0));
x += step;
}
pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetTextAlign(TA_BOTTOM | TA_RIGHT);
CString func2 = L"y = cos(x)";
pDC->TextOut(RClient.Width() - 1, RClient.Height() - 1, func2,
func2.GetLength());

ofstream fishier1("fishier1.txt", ios::out);


ofstream fishier2("fishier2.txt", ios::out);

fishier1.setf(ios::fixed);
fishier2.setf(ios::fixed);
fishier1.precision(6);
fishier2.precision(6);
for(x = a; x <= b; x += step)
{
fishier1 << x << ' ' << cos(x) << ' ' << MyCos(x, E) << ' ' <<
fabs(cos(x) - MyCos(x, E)) << ' ' << E << endl;
fishier2 << x << ' ' << MyCos(x, E) << endl;
}
fishier1.close();
fishier2.close();
}

---------------------------------------------------------------------------------------------------------------
Programul în execuţie:

S-ar putea să vă placă și