Консультация № 186997
19.12.2012, 22:46
97.00 руб.
0 1 0
Здравствуйте уважаемые эксперты! Прошу помощи в решении следующей задачи на Visual C:

Построить график функции , здесь e-экспонента
Заданный на интервале 0;1.5
Цвет линии: голубой; толщина:3.
Вычислить значение интеграла: методом парабол;

Ниже прилагаю пример частичного решения подобного рода задачи, только без вычисления интеграла:


Или текст который представлен на изображениях указанных выше размещен в приложении(возможны синтаксические ошибки):


Приложение:
#include <Windows.h>
#include <math.h>
#include <string.h>
const double pi=3.14159265;
const double x_start=-2*pi;
const double x_ed=2*pi;

void DrawAxis(HDC hdc, RECT rectClient)
{
HPEN penGraph=CreatePen(PS_SOLID,2,RGB(0,0,255));
HGDIOBJ gdiOld=SelectObject(hdc, penGraph);
MoveToEx(hdc, 0, rectClient.bottom/2, NULL);
LineTo(hdc, rectClient.right, rectClient.bottom/2);
LineTo(hdc, rectClient.right - 5, rectClient.bottom/2+2);
MoveToEx(hdc, rectClient.right, rectClient.bottom/2, NULL);
LineTo(hdc, rectClient.right - 5, rectClient.bottom/2-2);
MoveToEx(hdc, rectClient.right/2, rectClient.bottom, NULL);
LineTo(hdc, rectClient.right/2, rectClient.top);
LineTo(hdc, rectClient.right/2 - 2, rectClient.top + 5);
MoveToEx(hdc, rectClient.right/2, rectClient.top, NULL);
LineTo(hdc, rectClient.right/2 + 2, rectClient.top + 5);
SelectObject(hdc, gdiOld);
}
void DrawGraph(HDC hdc, RECT rectClient)
{
HPEN penGraph= CreatePen(PS_SOLID,2, RGB(255,0,0));
HGDI08J gdiOld= SelectObject(hdc, penGraph);
double x_current = x_start;
double step = (x_end-x_start)/rectClient.right;
double y_start = cos(x_start);
MoveToEx(hdc, 0, int(-y_start/step)+rectClient.bottom/2, NULL);
while(x_current < x_end)
{
x_current += step;
double y_next = cos(x_current);
LineTo(hdc, int(x_current/step) + rectClient.right/2, int(-y_next/step) + rectClient.bottom/2);
}
SelectObject(hdc, gdiOld);
}
void OnPaint(HWND hwnd)
{
PAINSTRUCT ps;
RECT rectClient;
HDC hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd, &rectClient);
DrawAxis(hdc, rectClient);
DrawGraph(hdc, rectClient);
ValidateRect(hwnd,NULL);
EndPaint(hwnd,&ps);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
RECT clRect;
GetClientRect(hwnd,&clRect);

switch(msg)
{
case WM_PAINT:
OnPaint(hwnd);
break;
case WM_MOUSEMOVE:
SetCapture(hwns);
SetCursor(LoadCursor(NULL,IDC_ARROW));
ReleaseCapture();
break;
case WM_WINDOWPOSCHANGED:
InvalidateRect(hwnd,&clRect,TRUE);
UpdateWindow(hwnd);
break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(hwnd, msg, wParam, lParam);
}
UpdateWindow(hwnd);
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstanse,
LPSTR ipCmdLine, int nCmdShow)
WNDCLASSWX wc;
HWND hwnd;
MSG Msg;
wc.cbSize =sizeof(WNDCLASSWX);
wc.style =0;
wc.lpfnWndProc =WndProc;
wc.cbClsExtra =0;
wc.cmWndExtra =0;
wc.hInstance =hInstance;
wc.hIcon =LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor =LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName =NULL;
wc.lpszClassName =L"MyClassName";
wc.hiconSm =LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc));
{
MessageBox(NULL, L"Класс не зарегистрирован!",L"Ошибка!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
L"MyClassName",
L"Окно",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);

if(hwnd == NULL)
{
MessageBox(NULL, L"Ошибка создания окна!", L"Ошибка!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&Msg, NULL, 0, 0) >0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

Обсуждение

Неизвестный
19.12.2012, 22:49
общий

Форма ответа