Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2016, 23:58   #1
Романннн
Пользователь
 
Регистрация: 28.02.2016
Сообщений: 37
По умолчанию помогите дописать прогу на си!

компоненты бинарного файла-записи,
состоящие из четырех чисел-координат центра кольца и его внешнего и внутреннего радиусов.
Определить, какое кольцо имеет наибольшую площадь, какое-наименьшую. (входные данные не трогаем и все через указатели должно быть)(тут на самом деле еще графика,но думаю я ее не успею,т.к. до сих пор библиотеку SDL не смог установить,хотя мозг уже просто разрывается)
#include <windows.h>
#include <math.h>
#define ROUND(a) ((int) (a + 0.5))
/* set window handle */
static HWND sHwnd;
static COLORREF redColor=RGB(255,0,0);
static COLORREF blueColor=RGB(0,0,255);
static COLORREF greenColor=RGB(0,255,0);
void SetWindowHandle(HWND hwnd){
sHwnd=hwnd;
}
/* SetPixel */
void setPixel(int x,int y,COLORREF& color=redColor)
{
if(sHwnd==NULL){
MessageBox(NULL,"sHwnd was not initialized !","Error",MB_OK|MB_ICONERROR);
exit(0);
}
HDC hdc=GetDC(sHwnd);
SetPixel(hdc,x,y,color);
ReleaseDC(sHwnd,hdc);
return;
}
void ellipsePlotPoints(int xCenter, int yCenter, int x, int y){
setPixel(xCenter + x, yCenter + y);
setPixel(xCenter - x, yCenter + y);
setPixel(xCenter + x, yCenter - y);
setPixel(xCenter - x, yCenter - y);
}
void drawEllipse(int xCenter, int yCenter, int Rx, int Ry){
int Rx2 = Rx*Rx;
int Ry2 = Ry*Ry;
int twoRx2 = 2 * Rx2;
int twoRy2 = 2 * Ry2;
int p;
int x = 0;
int y = Ry;
int px = 0;
int py = twoRx2 * y;
ellipsePlotPoints(xCenter, yCenter, x, y);
/* For Region 1 */
p = ROUND(Ry2 - (Rx2*Ry) + (0.25) * Rx2);
while(px < py){
x++;
px += twoRy2;
if(p < 0){
p += Ry2 + px;
}else{
y--;
py -= twoRx2;
p += Ry2 + px - py;
}
ellipsePlotPoints(xCenter, yCenter, x, y);
}
/* For Region 2*/
p = ROUND(Ry2 * (x + 0.5)*(x + 0.5) + Rx2 * (y - 1)*(y - 1) - Rx2 * Ry2);
while(y > 0){
y--;
py -= twoRx2;
if(p > 0){
p += Rx2 - py;
}else{
x++;
px += twoRy2;
p += Rx2 - py + px;
}
ellipsePlotPoints(xCenter, yCenter, x, y);
}
}
/* Window Procedure WndProc */
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
switch(message){
case WM_PAINT:
SetWindowHandle(hwnd);
drawEllipse(200, 200, 100, 50);
break;
case WM_CLOSE: // FAIL THROUGH to call DefWindowProc
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break; // FAIL to call DefWindowProc //
}
return DefWindowProc(hwnd,message,wParam,l Param);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow){
static TCHAR szAppName[] = TEXT("Ellipse");
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW|CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
// Register the window //
if(!RegisterClass(&wndclass)){
MessageBox(NULL,"Registering the class failled","Error",MB_OK|MB_ICONERROR );
exit(0);
}
// CreateWindow //
HWND hwnd=CreateWindow(szAppName,"Mid Point Ellipse Drawing - Programming Techniques",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
if(!hwnd){
MessageBox(NULL,"Window Creation Failed!","Error",MB_OK);
exit(0);
}
// ShowWindow and UpdateWindow //
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
// Message Loop //
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/* return no error to the operating system */
return 0;
}
Романннн вне форума Ответить с цитированием
Старый 01.06.2016, 13:04   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Отформатируйте код!

DefWindowProc надо вызывать всегда, кроме случаев, когда вы точно знаете почему этого делать на надо.
waleri вне форума Ответить с цитированием
Старый 01.06.2016, 13:13   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Отформатируйте код!
А это поможет? (С)
Код:
#include <windows.h>
#include <math.h>
#define ROUND(a) ((int)(a + 0.5))
/* set window handle */
static HWND sHwnd;
static COLORREF redColor = RGB(255, 0, 0);
static COLORREF blueColor = RGB(0, 0, 255);
static COLORREF greenColor = RGB(0, 255, 0);
void SetWindowHandle(HWND hwnd)
{
    sHwnd = hwnd;
}
/* SetPixel */
void setPixel(int x, int y, COLORREF& color = redColor)
{
    if (sHwnd == NULL)
    {
        MessageBox(NULL, "sHwnd was not initialized !", "Error", MB_OK | MB_ICONERROR);
        exit(0);
    }
    HDC hdc = GetDC(sHwnd);
    SetPixel(hdc, x, y, color);
    ReleaseDC(sHwnd, hdc);
    return;
}
void ellipsePlotPoints(int xCenter, int yCenter, int x, int y)
{
    setPixel(xCenter + x, yCenter + y);
    setPixel(xCenter - x, yCenter + y);
    setPixel(xCenter + x, yCenter - y);
    setPixel(xCenter - x, yCenter - y);
}
void drawEllipse(int xCenter, int yCenter, int Rx, int Ry)
{
    int Rx2 = Rx * Rx;
    int Ry2 = Ry * Ry;
    int twoRx2 = 2 * Rx2;
    int twoRy2 = 2 * Ry2;
    int p;
    int x = 0;
    int y = Ry;
    int px = 0;
    int py = twoRx2 * y;
    ellipsePlotPoints(xCenter, yCenter, x, y);
    /* For Region 1 */
    p = ROUND(Ry2 - (Rx2 * Ry) + (0.25) * Rx2);
    while (px < py)
    {
        x++;
        px += twoRy2;
        if (p < 0)
        {
            p += Ry2 + px;
        }
        else
        {
            y--;
            py -= twoRx2;
            p += Ry2 + px - py;
        }
        ellipsePlotPoints(xCenter, yCenter, x, y);
    }
    /* For Region 2*/
    p = ROUND(Ry2 * (x + 0.5) * (x + 0.5) + Rx2 * (y - 1) * (y - 1) - Rx2 * Ry2);
    while (y > 0)
    {
        y--;
        py -= twoRx2;
        if (p > 0)
        {
            p += Rx2 - py;
        }
        else
        {
            x++;
            px += twoRy2;
            p += Rx2 - py + px;
        }
        ellipsePlotPoints(xCenter, yCenter, x, y);
    }
}
/* Window Procedure WndProc */
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_PAINT:
            SetWindowHandle(hwnd);
            drawEllipse(200, 200, 100, 50);
            break;
        case WM_CLOSE: // FAIL THROUGH to call DefWindowProc
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        default:
            break; // FAIL to call DefWindowProc //
    }
    return DefWindowProc(hwnd, message, wParam, l Param);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("Ellipse");
    WNDCLASS wndclass;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    // Register the window //
    if (!RegisterClass(&wndclass))
    {
        MessageBox(NULL, "Registering the class failled", "Error", MB_OK | MB_ICONERROR);
        exit(0);
    }
    // CreateWindow //
    HWND hwnd = CreateWindow(szAppName, "Mid Point Ellipse Drawing - Programming Techniques",
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
        hInstance, NULL);
    if (!hwnd)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error", MB_OK);
        exit(0);
    }
    // ShowWindow and UpdateWindow //
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
    // Message Loop //
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    /* return no error to the operating system */
    return 0;
}
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.06.2016, 13:21   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Кот, лентяев плодишь? Ну-ну. Успехов .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.06.2016, 13:28   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А чо я-то?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.06.2016, 13:32   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Третья тема и нет горчичника за кросспостинг... да еще и лабу за него делают
p51x вне форума Ответить с цитированием
Старый 01.06.2016, 13:34   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А чо я-то?
Так вот, код отформатировал, а это обязанность ТС. Это, конечно, твоё решение (уважаю), но я-бы не стал.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.06.2016, 14:30   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Так вот, код отформатировал, а это обязанность ТС. Это, конечно, твоё решение (уважаю), но я-бы не стал.
Да я просто протестировал работу онлайн форматтера, которого мне гугол посоветовал.
Ты ж знаешь, что я в чужих исходниках не ковыряюсь.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.06.2016, 14:37   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Да я просто протестировал работу онлайн форматтера, которого мне гугол посоветовал.
Ты ж знаешь, что я в чужих исходниках не ковыряюсь.
Я то знаю. В чужих ковыряюсь, но только в том случае, если чётко указано, где, что не работает. А рыться в "проверьте мою программу", мне лениво да и бессмысленно. Чел где-то её скомуниздил, а ты иди за кем-то какашки разгребай. Не интересно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 02.06.2016, 00:33   #10
Романннн
Пользователь
 
Регистрация: 28.02.2016
Сообщений: 37
По умолчанию

[IMG]C:\Users\Roman\Desktop[/IMG]
Романннн вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать прогу wall33 C++ Builder 21 18.12.2015 11:58
Паскаль Не получаеться дописать прогу помогите ПЛИЗ ученик91 Помощь студентам 3 08.12.2009 19:50
Помогите дописать прогу на делфи fox7 Помощь студентам 3 16.06.2007 23:44