|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.05.2016, 23:51 | #1 |
Пользователь
Регистрация: 28.02.2016
Сообщений: 37
|
не получается переделать под си((
#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, 07:49 | #2 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
Это вообще-то и есть си...
|
01.06.2016, 07:56 | #3 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Может он имел ввиду консоль.
Уважаемый, покажите пример кода (пусть даже другую задачу) под который хотите переделать. |
01.06.2016, 08:22 | #4 |
Пользователь
Регистрация: 28.02.2016
Сообщений: 37
|
Задание:компоненты бинарного файла-записи,
состоящие из четырех чисел-координат центра кольца и его внешнего и внутреннего радиусов. Определить, какое кольцо имеет наибольшую площадь, какое-наименьшую. Проиллюстрировать данную задачу, построив все кольца на экране, кольцо с наименьшей площадью залить зеленым цветом, а с наибольшим-красным. #include <stdio.h> #include <stdlib.h> #define N 9 int input_struct(); void output_struct(); void struct_in file(); void file in arrstruct(); void seach_max_min(); struct ring { float x,y,r,R; } typedef *pr; int main(void) { int i,number; struct ring[N]; char filename[15]; FILE *f; puts("input filename"); gets(filename); if((f=fopen(filename,"a+"))==NULL) { printf("can't open '%s',filename); return 1; } printf("input number rings:"); scanf("%d",&number); printf("input parametes your ring"); for(i=0;i<N;i++) { input_struct(); output_struct(); } struct_in file(); file in arrstruct(); seach_max_min(); fclose(f); return 0; } int input_struct() { scanf("%*c"); puts("enter x:"); scanf("%f\n",pr->x); puts("enter y:"); scanf("%f\n",pr->y); puts("enter internal radius:"); scanf("%f\n",pr->r); puts("enter external radius:"); scanf("%f\n",pr->R); retutn 0; } void output_struct(struct ring *pr) { printf("\nx=%f\ty=%d\tr=%d\tR=%d\t\ n",pr->x,pr->y,pr->r,pr->R); return; } int struct_in file() { fwrite(*pr,sizeof(*pr),f); return 1; } int file in arrstruct() { fread(*pr,sizeof(*pr),f); return 1; } int search_max_min() { for() { } return 1; } это моя прога,но в ней походу куча ошибок) а графику мы вообще еще не изучали ,но я взял,а теперь уже поздно идти назад,сначала пытался установить SDL,но не получилось.Теперь узнал что можно с windows.h сделать ничего не устанавливая в добавок к среде.Нашел пример вот той функции,хотел разобрать,но она даже не скомпилировалась.Потом я узнал,что она написана под C++,а теперь думаю, как переделать под си и изучить,чтобы написать прогу. Последний раз редактировалось Романннн; 01.06.2016 в 08:28. Причина: не все дописал |
01.06.2016, 08:29 | #5 |
Пользователь
Регистрация: 28.02.2016
Сообщений: 37
|
а,еще чем отличается консоль от си?
|
01.06.2016, 08:32 | #6 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
|
|
01.06.2016, 08:41 | #7 |
Пользователь
Регистрация: 28.02.2016
Сообщений: 37
|
ну я вообще изучаю си, и С++ от С не могу отличить(я только знаю,что там есть классы и вместо printf там count),но мне сказали что там есть с++,вот я и подумал почему не компилируется в Code blocks,а вообще там писал компилятор про то что не поставлена скобочка или точка с запятой,но я этого не нашел косяка,может вы найдете и не надо будет ничего под си переделывать(может и не надо переделывать(я на сто даже не уверен))))
|
01.06.2016, 08:47 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
начните с явных косяков: что это за названия
Код:
|
01.06.2016, 09:13 | #9 |
Пользователь
Регистрация: 28.02.2016
Сообщений: 37
|
то есть в названиях функций пробелов не должно быть?
|
01.06.2016, 09:36 | #10 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Для вас это новость? Как вы представляете, что компилятор будет отличать "тип название_функции" от "просто такое название" ???
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Android Studio Не получается переделать LazyAdapter под ListFragment | AlexVinn | Java Мобильная разработка (Android) | 1 | 09.05.2016 16:58 |
Переделать код под условие | Sashaa_i | C# (си шарп) | 0 | 06.12.2015 02:48 |
Переделать VBA под Си | Карина Т_Т | Помощь студентам | 5 | 13.02.2014 16:59 |
Переделать под С++ | T_h_i_s | Помощь студентам | 2 | 21.12.2012 16:49 |
переделать под windows | al072 | C/C++ Сетевое программирование | 13 | 16.02.2010 20:57 |