Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Простецкая загвоздка с рекурсией.  (Прочитано 48852 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 16-05-2007 10:44 » 

GUI было бы лучше наверное Улыбаюсь
Записан

ещё один вопрос ...
Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 16-05-2007 10:46 » 

Пока делаю консольные без GUI чтоб не закопаться Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 16-05-2007 10:48 » 

Taurus727, заливать можно всё теми же символами )
Код:
@@@@@@
@.....@@
@@@....@@
  @@@@@
Записан

Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 16-05-2007 10:51 » 

Ну да можно символами. Но нужно управление позицией курсора Отлично то с чего я свою тему до этой начинал Улыбаюсь стандартные С++ библиотеки не предоставляют средств позиционирования курсора в консоли. Есть дополнительные функции свои в каждом компиляторе. Пока не отыскал их в вс2005
Записан
Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 16-05-2007 10:53 » 

А телетайпом можно и в цикле залить Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 16-05-2007 10:55 » 

Taurus727, вычисления делай в памяти, а на экран выводи результат за один раз
Записан

Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 16-05-2007 10:59 » 

Массив консоли х на х символов. Вычисления заливки внутри. Вывод массива на экран в цикле? Значения в массиве грубо говоря 0 и 1 для закрашен/нет. Можно...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 16-05-2007 11:06 » 

0...255 значение )
хотя непечатные есть )))
Записан

Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 16-05-2007 11:29 » 

Ну это уже извращение Улыбаюсь цвет видом символа передавать Улыбаюсь в эпоху видеокарт с радиаторами размером с батарею. Вспоминается старая добрая Elite с каркасной 3d графикой. Хватит мне и 1/0 то есть ' ' или '#' Улыбаюсь
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 16-05-2007 11:30 » 

Taurus727, почитай "Заметки о рекурсии": https://club.shelek.ru/view.php?id=25
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #40 : 16-05-2007 11:32 » 

Taurus727,вспоминается вот чего ))

88888888888888888888
88
888888888888888888
88
888888888888888888
88
888888888888888888
88
888888888888888888
8888
8888888888888888
888888
88888888888888
88888888
888888888888
88888888888888888888
88888888888888888888
Записан

Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 16-05-2007 11:45 » 

Кстати там в статье есть опечатка. Надо вам ее исправить. Цитата:
Но не будем спешить с выводами. На самом деле  есть очень много примеров, подобных вышеприведенному, в которых применение рекурсии просто расточительно и е выдерживает никакой конкуренции с рекурсией.
Записан
Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 16-05-2007 11:46 » 

Сие есть "игра" Жизнь Улыбаюсь насколько я помню Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #43 : 16-05-2007 11:49 » 

Taurus727, о, кстати, вот те и задачки интересная ) Напиши жизню )
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 16-05-2007 12:16 » 

Ладно, поржали и хватит Улыбаюсь
ЕХЕшник в папке release прикрепленнеого архива. В файле pouring.cpp увидишь функцию Paint - само рисование. Там некоторые изменения. Во-первых передается параметр HDC hdc - это контекст устройства, типа указателя на устройство, на которое хочешь вывести пиксель и т.п. Это может быть монитор, принтер и т.п.
Еще вместо цвета коемки я в нее решил передавать старый цвет пикселя (в нашем случае белый). Как ты думаешь почему? Ага
Теперь смотри на  функцию LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam).
Я вносил изменения в
Код:
case WM_LBUTTONDOWN:
isLButtonDown=TRUE;
break;
case WM_LBUTTONUP:
isLButtonDown=FALSE;
break;
case WM_MOUSEMOVE:

if(isLButtonDown)
{

COLORREF color_border=RGB(0,255,0);
POINTS pt=MAKEPOINTS(lParam);
int x = pt.x;
int y = pt.y;
hdc=GetDC(hWnd);
   SetPixel(hdc,x,y,color_border );
   SetPixel(hdc,x+1,y,color_border );
   SetPixel(hdc,x-1,y,color_border );
   SetPixel(hdc,x,y+1,color_border );
   SetPixel(hdc,x,y-1,color_border );
   SetPixel(hdc,x+1,y+1,color_border );
   SetPixel(hdc,x+1,y-1,color_border );
   SetPixel(hdc,x-1,y+1,color_border );
   SetPixel(hdc,x-1,y-1,color_border );
   ReleaseDC(hWnd,hdc);
}
break;

case WM_RBUTTONUP:
{
POINTS pt=MAKEPOINTS(lParam);
hdc=GetDC(hWnd);
int x = pt.x;
int y = pt.y;
COLORREF old_col=GetPixel(hdc,x,y);
Paint(hdc,x,y,RGB(0,255,255),old_col);
ReleaseDC(hWnd,hdc);
}
break;


Посмотри на case WM_RBUTTONUP. Этот case выпадает когда возникает сообщение, что отпущена правая кнопка мыши. В принципе, раз кнопка отпущена, значит она была и нажат, поэтому будем считать, что клик мыши был (не рассматриваем изврат, что нажатин было вне нашего окна, а отпущено над нашим окном). Как только ты отпустил правую конпку мыши, вычисляются координаты Х, У над которыми была отпущена кнопка и вызывается наша функция зарисовки. Дальше вроде не очень надо, но если что-то станет непонятно, то спрашивай.
WM_MOUSEMOVE - это сообщение о том, что мышь движется.
Для того, чтобы поиграться. Запускаешь ЕХЕшник жмешь левую кнопку и водишь по окну, только быстро не води, а то пробелы будут Улыбаюсь (надо было точки линией соединять Улыбаюсь ). Чтобы залить область нажми правую кнопку мыши.

* Pouring.tgz (12.02 Кб - загружено 795 раз.)
« Последнее редактирование: 16-05-2007 12:23 от nikedeforest » Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 16-05-2007 12:26 » 

Здесь ЕХЕшник

* Pouring.tgz (9.74 Кб - загружено 824 раз.)
Записан

ещё один вопрос ...
Taurus727
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 17-05-2007 08:15 » 

Примерчик запустил Улыбаюсь ехе выполняется, а проект компилится. Спасибо, попробую поковырять, хотя на данный момент код, написанный под окноный интерфейс меня в ступор вводит...
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 17-05-2007 08:32 » 

Там не так много на смамом деле. Забыл лишнее выкинуть. СALLBACK функции служат как бы для обработки сообщений. Функция WNDPROC вызывается как только твоя программа получилав сообщение (а она их получает кучу). Как только сообщение получено, мы сморим в тело сообщения, чтобы выделить какие нас интересет. А вот внутри switch как раз написано, что делать в случае, если возникло интересующее нас сообщение. Мы описываем действия на интересующие нас сообщения, другие же просто игнорируются программой. В итоге что сделал я. Взвожу флаг в случае нажатия левой кнопки мыши. В случае отжатия этой кнопки, флаг становится равным false. ПРи движении мыши я смотрю взведен ли флаг, если взведен, значит по сути пользователь нажал левую кнопку мыши и водит мышью по окну (по логике программы он хочет рисовать). Делаю вывод, что надо рисовать, что и происходит в обработчике события WM_MOUSEMOVE. Ну и заливаем при нажатии правой кнопки мыши.
Записан

ещё один вопрос ...
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines