Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Шахматное поле рекурсией   Найти похожие ветки 

 
Аноним   (2004-05-08 10:48) [0]

Не могу сообразить как нарисовать шахматное поле с помощью рекурсии.

Подкажите, буду очень благодарен.


 
Anatoly Podgoretsky ©   (2004-05-08 11:01) [1]

Это наглядный случай когда рекунсия не требуется.
Рисуй лучше в цикле


 
Аноним   (2004-05-08 12:12) [2]

Нужно имеено с ее помощью.


 
Gero ©   (2004-05-08 12:44) [3]

procedure Draw(B : Boolean);
var ...
begin
 if B then
   begin
     Рисуем в цикле
   end
 else
   Draw(True);
end;

...
Draw(False);

Еще скажи, что здесь рекурсия не используется ;)


 
Тимохов ©   (2004-05-08 12:50) [4]

procedure draw(acol, arow: integer);
var
  kcol, krow: integer;
begin
  drawrect(.....); // с цветом сами разберетесь
  if acol = 7 then
  begin
     kcol := 0;
     krow := arow + 1;
  end else
  begin
     kcol := acol+1;
     krow := arow;
  end;
  if arow <= 7 then draw(kcol, krow);
end;


первый вызов
draw(0,0);


 
Андрей Сенченко ©   (2004-05-08 12:55) [5]

Представь себе шахматное поле не как 64 ( или больше ) квадратика, а например как 4 ( или больше ) рамки из этих квадратиков. С такой точки зрения рекурсию организовать можно ...
Основная процедура рисует рамку из 4 квадратиков и увеличивает шаг ( количество квадратиков на стороне ), затем вызвает сама себя и так до опупения.
Чем не рекурсия ?


 
KilkennyCat ©   (2004-05-08 12:59) [6]


> Gero ©   (08.05.04 12:44) [3]


Да, так можно мноооого нарисовать...

Может, лучше так:

var
 y : byte;

implementation
....

y := 1;

.....

procedure Shashki();

var x : byte;

   procedure DrawLine(x : byte);
   var ...
   begin
     рисуем клетку с координатой x,y
     inc(x);  
     repeat
       DrawLine(x : byte);
     until x = 9;
   end;

begin
 inc(y);
 x := 1;
 repeat
   DrawLine(x : byte);
 until y = 9;
end;


вложенная рекурсия, извиняюсь... :)


 
KilkennyCat ©   (2004-05-08 13:03) [7]

а, ччерт... ошибку сделал.

var
y : byte;

implementation
....

y := 1;

.....

procedure Shashki();

var x : byte;

  procedure DrawLine(x : byte);
  var ...
  begin
    рисуем клетку с координатой x,y
    inc(x);  
    repeat
      DrawLine(x : byte);
    until x = 9;
  end;

begin
inc(y);
x := 1;
DrawLine(x : byte);
repeat
  Shashki();
until y = 9;
end;


Вот теперь рекурсивно до ужаса...


 
Тимохов ©   (2004-05-08 13:05) [8]


> Вот теперь рекурсивно до ужаса...

конечно до ужаса - просто вечная реакурсия.


 
Gero ©   (2004-05-08 13:15) [9]

Я вот не понимаю, зачем на использование рекурсии задавать задачи, в которых она не нужна?
Бред какой-то.


 
KilkennyCat ©   (2004-05-08 13:26) [10]

Тимохов ©   (08.05.04 13:05) [8]

гмм... согласен :) но все равно красиво, да и вечность отменить не сложно :)


 
KilkennyCat ©   (2004-05-08 13:36) [11]

var
y : byte;

implementation
....
y := 0;
.....

procedure Shashki;
var x : byte;

 procedure DrawLine;
 begin
   рисуем клетку с координатой x,y
   inc(x);  
   if x <> 9 then DrawLine;
 end;

begin
 inc(y);
 x := 1;
 DrawLine;
 if y <> 9 then Shashki;
end;


проверено. невечно . двойная рекурсия. кто предложит тройную? :)


 
Тимохов ©   (2004-05-08 13:51) [12]


> проверено. невечно.

вы бы еще проверили какую ерунду это все нарисует.


 
KilkennyCat ©   (2004-05-08 13:59) [13]

Тимохов ©   (08.05.04 13:51) [12]

А Вы все буквально воспринимаете? Или не в состоянии самостоятельно трансформировать [1,1]...[8,8] в клетки с четырьмя углами? а также выбор белый-черный?


 
Тимохов ©   (2004-05-08 14:02) [14]


> KilkennyCat ©   (08.05.04 13:59) [13]

я не умею играть в шахматы на поле 8 на 9.


 
KilkennyCat ©   (2004-05-08 14:09) [15]

Тимохов ©   (08.05.04 14:02) [14]

ну и зря. очень увлекательно...

Ну ошибся я на 1... :)) Зато все равно круто!



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
7-1080714655
c13prog
2004-03-31 10:30
2004.05.23
Как определить название диска в CD-ROM?


14-1083303159
blackman
2004-04-30 09:32
2004.05.23
Что с усовершенствованием FAQ ? Усовершенствовали что-ли уже ?


14-1083656290
GanibalLector
2004-05-04 11:38
2004.05.23
ДОС версии ниже 6.22.


14-1083228811
gn
2004-04-29 12:53
2004.05.23
В Украине сертифицирован первый отечественный IP-телефон


7-1081601554
Rustamonline1
2004-04-10 16:52
2004.05.23
Создание массивных процедур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский