Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   График на Visual С++ (https://forum.antichat.xyz/showthread.php?t=164693)

«Adult Holding» 19.12.2009 19:49

График на Visual С++
 
Господа, напишите код на Visual С++:
Вывождение графика ф-ций: y=3x-cos(x) - 1

Буду дико благодарен! ;)

Deathdreams 19.12.2009 23:22

С этим языком не знаком, но уверен, что есть готовые классы по построению графиков.

Юзай гугль

Noir 20.12.2009 13:59

Код:

#include <windows.h>
#include <tchar.h>
#include <math.h>

#define MAXLENTH 100

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
ATOM MyRegisterClass(HINSTANCE hInstance);

TCHAR szAppName[] = _TEXT("Graphic");
TCHAR szTitleMain[MAXLENTH];
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
        HWND hWndMain;
        MSG msg;


        if(!MyRegisterClass(hInstance))
        {
                //MessageBox(hWnd,_TEXT("Can't register class"),_TEXT("Error..."), MB_OK | MB_ICONINFORMATION);
        }
        LoadString(hInstance,101,szTitleMain,MAXLENTH);
        hWndMain = CreateWindow(szAppName,szTitleMain,WS_OVERLAPPEDWINDOW,
                                                        CW_USEDEFAULT,CW_USEDEFAULT,
                                                        CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
                                                        hInstance,NULL);
        ShowWindow(hWndMain, iCmdShow);
        UpdateWindow(hWndMain);

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

ATOM MyRegisterClass(HINSTANCE hInstance)
{
        WNDCLASSEX wcex;
        wcex.cbSize = sizeof(WNDCLASSEX);
        wcex.cbClsExtra        = 0;
        wcex.cbWndExtra = 0;
        wcex.style = CS_VREDRAW | CS_HREDRAW;
        wcex.lpfnWndProc = WndProc;
        wcex.hInstance = hInstance;
        wcex.hCursor = LoadCursor(NULL,IDC_ARROW);
        wcex.hIcon = LoadIcon(NULL,IDI_QUESTION);
        wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
        wcex.lpszMenuName = NULL; // Пока не используем
        wcex.hIconSm = LoadIcon(NULL,IDI_QUESTION);
        wcex.lpszClassName = szAppName;
        return RegisterClassEx(&wcex);
}                                       

float fn(float x)
{
        return 3*x-cos(x) - 1;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
        HDC hDC;
        PAINTSTRUCT ps;
        RECT rect;
        static int draw_graf;
        static int clx,cly,mx=20,my=20;
        switch(iMsg)
        {
        case WM_CREATE:
                draw_graf = 1;
                return 0;
        case WM_SIZE:
                clx = LOWORD(lParam);
                cly = HIWORD(lParam);
        case WM_PAINT:
                hDC = BeginPaint(hWnd,&ps);
                GetClientRect(hWnd,&rect);
               
                if(draw_graf)
                {MoveToEx(hDC,0,cly/2,NULL);
        LineTo(hDC,clx,cly/2);
        LineTo(hDC,clx-5,(cly/2)-5);
        MoveToEx(hDC,clx,cly/2,NULL);
        LineTo(hDC,clx-5,(cly/2)+5);

        MoveToEx(hDC,clx/2,cly,NULL);
        LineTo(hDC,clx/2,0);
        LineTo(hDC,(clx/2)-5,5);
        MoveToEx(hDC,(clx/2)+5-1,5-1,NULL);
        LineTo(hDC,clx/2,0);

                        for(int i=0;i<clx;i++)
                                SetPixel(hDC,i,(cly/2)-my*fn((float)i/mx),RGB(255,50,9));
                }
                EndPaint(hWnd,&ps);
                return 0;
        case WM_LBUTTONDOWN:
                if(mx<256)
                {
                        mx*=2;
                        my=mx;
                        draw_graf=1;
                        InvalidateRect(hWnd,NULL,true);
                }
                return 0;
        case WM_RBUTTONDOWN:
                if(mx>32)
                {
                        mx/=2;
                        my=mx;
                        draw_graf=1;
                        InvalidateRect(hWnd,NULL,true);
                }
                return 0;
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hWnd,iMsg,wParam,lParam);
}


Извени вот только не компилировал, должно работать

cheater_man 20.12.2009 14:08

Это просто деградация!!! График нарисовать не могут :D Тогда назревает вопрос: А что вообще могут в наше время студенты? :D

Ra$cal 20.12.2009 14:19

думать точно не умеют. идут учиться на специальности, в которых абсолютные нули.
по сабжу - чтобы построить график в школе же наверное учили - нужно заполнить таблицу f(x).
Ну а потом через функцию LineTo построить сам график, соединив последовательно точки таблицы. Noir, привыкай отделять логику от представления. Не должно окно само считать и тут же рисовать. Привыкайте к хорошему стилю.

cheater_man 20.12.2009 21:33

Или проще меняешь х(тоесть увеличиваешь его), и рисуешь точку.Тут буквально 6-10 строк кода :D

POS_troi 20.12.2009 21:40

Цитата:

Это просто деградация!!! График нарисовать не могут Тогда назревает вопрос: А что вообще могут в наше время студенты?
В теме новичкам просил один тело перевести Char To ASCП, Сразу видно что задание списал с личсточка и даже понятия не имеет что-такое ASCП (ASCII)

«Adult Holding» 27.12.2009 18:25

И все таки искренне, надеюсь на вашу помощь господа.

~Shapaev~ 27.12.2009 21:53

«Adult Holding» тебе дал рабочий код , более того там можно не только эту функцию рисовать.

Gar|k 28.12.2009 02:22

оффтоп

Цитата:

Сообщение от Ra$cal
идут учиться на специальности, в которых абсолютные нули.

они просто думают, что в институте их обучат ухахаха

а там почему-то дают задание на лабы и непонятную методичку (если она вообще есть). Вот и появляются Char To ASCП. Мой знакомый лаборант, только на 3м курсе увидел, что у компьютера внутри, а на первом даже не знал, какие разъемы для чего нужны. Но самые веселые первокуры из области. Мы минут 10 смотрели как парень сидел перед BSOD и пытался нажать что-то типа Ctrl+alt+delite xD


Время: 08:37