![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рекурсия с квадратом [D7]
DanilTraum © (2013-06-19 12:00:00)Всем доброго времени суток, нужно создать программу, которая, при нажатии на кнопку рисует квадрат, в нем четыре квадрата, в левом верхнем еще четыре и так далее до точки...
Сделать нужно с помощью рекурсии, очень нужна помощь!
Jeer (2013-06-19 16:59:00) [1]"И вот пошли корованы и стало возможным их грабить"
P.S.
Не обижайся, но копи-пасте - не самый лучший метод изучения и создания приложений.
DanilTraum (2013-06-19 16:16:00) [2]Image1.Repaint;
Sleep(1000);
Получилось, спасибо!
DanilTraum (2013-06-19 16:07:00) [3]2. Зачем это надо?--- чтоб контралировать процесс создания квадратов
Пауза--- Sleep? попробуем...
[ВладОшин] (2013-06-19 15:36:00) [4]И так не ответили 2. Зачем это надо?
Можно ограничить глубину рекурсии, с помощью доп. переменной, например.
Тогда по клику будет рисовать до опред.уровня.
или же, если нужна наглядность - просто поставить паузу
DanilTraum (2013-06-19 15:20:00) [5]Да, логично...
[ВладОшин] (2013-06-19 15:05:00) [6]
> ельзя сделать, чтоб при каждом нажатии кнопки рисовались квадраты постепенно ,а не все сразу....
1. А рекурсия? нужна или где? По определению рекурсии выход из нее возможен только после полного цикла отработки.
2. Зачем это надо?
DanilTraum (2013-06-19 15:02:00) [7]Спасибо огромное!)))
Как понимаю, нельзя сделать, чтоб при каждом нажатии кнопки(Button1.teg+1)
рисовались квадраты постепенно ,а не все сразу....
[ВладОшин] (2013-06-19 14:47:00) [8]type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
procedure DrowSquares(A:Integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
DrowSquares(400);
end;
procedure TForm1.DrowSquares(A: Integer);
begin
if A < 2 then
Exit;
Canvas.Rectangle(0,0,A,A);
Canvas.Rectangle(A div 2,A div 2,A,A);
A := A div 2;
DrowSquares(A);
end;
DanilTraum (2013-06-19 14:41:00) [9]Конечно не мой, он для фрактального преобразования квадрата...
вот мой:
procedure Quad(x1, y1, x2, y2: Integer; Cv:TCanvas);
var
xw, yw : Integer;
begin
Cv.Rectangle(x1, y1, x2, y2);
xw:= (x2-x1) div 2;
yw:= (y2-y1) div 2;
Cv.rectangle(x1,y1,xw,yw);
Cv.rectangle(xw,y1,x2,yw);
Cv.rectangle(x1,yw,xw,y2);
Cv.rectangle(xw,yw,x2,y2);
if (xw>0) and (yw>0) then Quad(x1, y1, xw, yw, Cv);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x1,y1,x2,y2:integer;
begin
x1:=0;
y1:=0;
x2:=400;
y2:=400;
Quad(x1, y1, x2, y2, Image1.Canvas);
end;
end.
[ВладОшин] (2013-06-19 14:37:00) [10]
> В процедуре 4 раза рисуется Rectangle,
хватит 2х, в симметричных относительно центра квадрантах
> DanilTraum
Вы же вообще ничего не понимаете..
так не интересно..
Сомневаюсь, что и тот код - Ваш.
DanilTraum (2013-06-19 14:28:00) [11]Вполне достаточно *.Canvas.FrameRect(Rect:TRect);>>>
А это где прописать?
и что вместо * прописать?
DanilTraum (2013-06-19 14:27:00) [12]MBo © (19.06.13 14:16) [18]...
Cv.Rectangle(x1, y1, x2, y2);
xw:= (x2-x1) div 2;
yw:= (y2-y1) div 2;
Cv.rectangle(x1,y1,xw,yw);
Cv.rectangle(xw,y1,x2,yw);
Cv.rectangle(x1,yw,xw,y2);
Cv.rectangle(xw,yw,x2,y2);
if (xw>0) and (yw>0) then Quad(x1, y1, xw, yw, Cv);
MBo (2013-06-19 14:16:00) [13]Судя по условия, параметры процедуры могут быть:
(Canvas: TCanvas; X0, Y0, Size: Integer)
т.е. передается левый верхний угол и размер квадрата.
В процедуре 4 раза рисуется Rectangle, и, если Size > 1, то один раз вызывается эта же процедура с теми же координатами, и уполовиненным размером Size div 2
Вроде логика простая.
Jeer (2013-06-19 14:14:00) [14]Хорош парня травмировать:)
DanilTraum (19.06.13 14:00) [16]
Вполне достаточно *.Canvas.FrameRect(Rect:TRect);
DanilTraum (2013-06-19 14:00:00) [15]При запуске программы
Expected '=' but '(' found
TForm1 = class(TForm)
??????????
procedure TForm1.DrowSqureS(A: Integer);
Просто никогда не сталкивался с DrowSqureS...(((
[ВладОшин] (2013-06-19 13:47:00) [16]
> procedure TForm1.btn1Click(Sender: TObject);
> procedure TForm1.DrowSqureS(A: Integer);
это методы класса TForm1
один метод описан тут:
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
угадайте как описать второй
DanilTraum (2013-06-19 13:08:00) [17]Ругается на DrowSqureS...
Может объявить где надо его?
[ВладОшин] (2013-06-19 13:03:00) [18]тьфу, ты..
>> квадрат, в нем четыре квадрата,
тогда:
procedure TForm1.DrowSqureS(A: Integer);
begin
if A < 2 then
Exit;
Canvas.Rectangle(0,0,A,A);
Canvas.Rectangle(A div 2,A div 2,A,A);
A := A div 2;
DrowSqureS(A);
end;
попасть по пикселям - на дом :)
[ВладОшин] (2013-06-19 12:54:00) [19]Вот ведь какие преподы - перерыл весь интернет, компилятора для программы написанной маркером на стенке микроволновки, похоже, нет :(
Или надо было с внутренней стороны писать?!?
Jeer (2013-06-19 12:49:00) [20]>а микроволновка если есть - не подойдет!?!
Можно. Там наверняка есть микропроцессор.
Поэтому пропускаем первый и второй пункты, далее - по списку.