IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Рекурсия и графика, Гдето ошибка
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Ребята!
Где-то тут ошибка.
Условие в том, что надо рисовать сначала крест потом круги с радиусом в его концах. А потом опять крест.
И так чтоб все потихоньку уменьшалось в 2 раза.
Вот сделала, но надо чтоб он не рисовал ничего в сторону центра.
Не подскажете, пожалуйста, в чём прикол?


Прикрепленные файлы
Прикрепленный файл  UZD3.PAS ( 1014 байт ) Кол-во скачиваний: 83


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Добавь параметр came_from, который будет означать, откуда мы пришли (по какому направлению). Получится что-то такое (не запускал):

(*в начале программы*)
const DIR_LEFT = 0;
const DIR_UP = 1;
const DIR_RIGHT = 2;
const DIR_DOWN = 3;
const DIR_NONE = 4;

...

procedure ll(x,y,l,sk,came_from:integer);
begin
if came_from <> DIR_UP then line(x,y, x, y+l);
if came_from <> DIR_DOWN then line(x,y, x, y-l);
if came_from <> DIR_LEFT then line(x,y, x+l, y);
if came_from <> DIR_RIGHT then line(x,y, x-l, y);
if sk>1 then begin
if came_from <> DIR_LEFT then ll(x+l, y, l div 4, sk-1, DIR_RIGHT);
if came_from <> DIR_RIGHT then ll(x-l, y, l div 4, sk-1, DIR_LEFT);
if came_from <> DIR_DOWN then ll(x, y-l, l div 4, sk-1, DIR_UP);
if came_from <> DIR_UP then ll(x, y+l, l div 4, sk-1, DIR_DOWN);
end;
end;

(*в rr аналогично*)

...

initgraph(gr,gm, 'z:\');
ll(x,y,l,sk, DIR_NONE);
rr(x,y,r,sk, DIR_NONE);
...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
надо чтоб он не рисовал ничего в сторону центра.
wacko.gif Ты о чем?

Вот так надо, что-ли?


Прикрепленные файлы
Прикрепленный файл  RC.PAS ( 742 байт ) Кол-во скачиваний: 83
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Michael_Rybak, я теперь совсем запуталась nea.gif
Это обязательно такие константы надо ставить?
У меня от них голова болит


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(Anastacia Adesso @ 13.09.2006 18:07) *

Это обязательно такие константы надо ставить?
У меня от них голова болит


Ну назвать их можешь по-другому smile.gif. Смысл в том, что ты идешь из каждой точки рекурсивно во все 4 стороны. А идти в 4 стороны надо только в самый первый раз, а дальше - в 3 стороны, кроме той, откуда пришли. Правильно я понимаю? Для этого и нужны эти константы, чтобы передавать, откуда мы пришли, и не ветвиться в ту сторону. Представь, как бы ты это рисовала руками.

Ну или я неправильно понял, что тебе нужно. Нарисуй, что ли, в paint'е набросок.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Volvo, это не совсем то.. но прикольно! good.gif

воть типа.. рисум крест. потом круги но тока в три конца. к основанию креста не надо

Michael_Rybak, да именно тока в три стороны.
Но говорят это и без констант можно сделать.
Не знаешь как?


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
к основанию креста не надо
Ну, не надо, так не надо smile.gif



Прикрепленные файлы
Прикрепленный файл  RC.PAS ( 943 байт ) Кол-во скачиваний: 76
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(Anastacia Adesso @ 13.09.2006 18:15) *

Но говорят это и без констант можно сделать.
Не знаешь как?


Можно, например, передавать dx и dy. И идти прямо, навлево, и направо.

Например, направление вверх задается парой dx = 0, dy = -1. Повернувшись на 90 градусов по часовой стрелке, мы получим координаты new_dx := -dy, new_dy := dx, а против часовой - new_dx := dy, new_dy := -dx

Код не запускал.

uses crt, graph;
var l, x, y, sk, r:integer;
gr, gm: integer;

procedure ll(x,y,dx,dy,l,r,sk:integer);
begin
line(x, y, x + dx * l, y + dy * l); circle(x + dx * l, y + dy * l, r);
line(x, y, x - dy * l, y + dx * l); circle(x - dy * l, y + dx * l, r);
line(x, y, x + dy * l, y - dx * l); circle(x + dy * l, y - dx * l, r);

if sk>1 then begin
ll(x, y, x + dx * l, y + dy * l, dx, dy, l div 4, r div 4, sk - 1);
ll(x, y, x - dy * l, y + dx * l, -dy, dx, l div 4, r div 4, sk - 1);
ll(x, y, x + dy * l, y - dx * l, dy, -dx, l div 4, r div 4, sk - 1);
end;

end;

begin
clrscr;
readln(l);
x:=300; y:=240; r:=trunc(l/2);
readln(sk);
gr:=9; gm:=2;
initgraph(gr,gm, '');
ll(x,y,1,0,l,r,sk);
ll(x,y,-1,0,l,r,sk);
ll(x,y,0,1,l,r,sk);
ll(x,y,0,-1,l,r,sk);

readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Спасибо!!!! Мы тут ещё подумали..
Посмотрите как сделали!!!


Прикрепленные файлы
Прикрепленный файл  UZD3.PAS ( 1.83 килобайт ) Кол-во скачиваний: 81


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Anastacia Adesso @ 19.09.2006 11:40) *

Посмотрите как сделали!!!

Смотрим... Слушай, а ты не могла бы постить русскую или английскую версию? Боюсь, тут мало кто понимает латышский.. sad.gif

Красиво! Но, мне кажется, не совсем рационально..
Если я правильно понял (что не факт), то может быть вот, что сгодится..
Прикрепленный файл  t022_4.pas ( 1.9 килобайт ) Кол-во скачиваний: 182

И я еще подправил немного ввод - так, из любви к искусству, хотя - убей, не понимаю, что это значит smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Anastacia Adesso,
тебе, по-моему, надо зайти сюда:
Геометрические фракталы

здесь есть очень много интересных реализаций...

smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.09.2017 8:56
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"