Форум: "Начинающим";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];
ВнизРекурсия с квадратом Найти похожие ветки
← →
DanilTraum (2013-06-19 12:00) [0]Всем доброго времени суток, нужно создать программу, которая, при нажатии на кнопку рисует квадрат, в нем четыре квадрата, в левом верхнем еще четыре и так далее до точки...
Сделать нужно с помощью рекурсии, очень нужна помощь!
← →
Медвежонок Пятачок © (2013-06-19 12:04) [1]сколько денег выслать в качестве помощи? и главное куда.
сто рублей могу.
← →
Юрий Зотов © (2013-06-19 12:20) [2]
> DanilTraum (19.06.13 12:00)
> очень нужна помощь!
И где же вопросы? Как помочь-то, если Вы ничего не спрашиваете?
← →
[ВладОшин] © (2013-06-19 12:28) [3]>> И где же вопросы?
Как
> создать программу, которая, при нажатии на кнопку рисует
> квадрат, в нем четыре квадрата, в левом верхнем еще четыре
> и так далее до точки...
?
:)
← →
Jeer © (2013-06-19 12:33) [4]>[ВладОшин] © (19.06.13 12:28) [3]
Вот прилипчивый:)
1. Купить компьютер.
2. Установить операционку
3. Используя Блокнот, написать программу, предварительно выучив язык программирования.
4. Найти компилятор для соответствующего языка.
5. Откомпилировать приложение.
6. Запустить приложение.
7. Взять из холодильника чупа-чупсы и, сидя на диване, со знанием дела демонтрировать таким же тушканчикам чудо программерской мысли.
← →
DanilTraum (2013-06-19 12:33) [5]
procedure Quad(x1, y1, x2, y2: real; w: integer; Cv:TCanvas);
var
x1w, y1w, x2w, y2w: real;
begin
if w >= 5 then begin
x1w:= 2*x1/3+x2 / 3;
x2w:= x1/3+2*x2 / 3;
y1w:= 2*y1/3+y2 / 3;
y2w:= y1/3+2*y2 / 3;
Cv.rectangle(round(x1w),round(y1w),round(x2w),round(y2w));
Quad(x1, y1, x1w, y1w, w-1,Cv);
Quad(x1w, y1, x2w, y1w, w-1,Cv);
Quad(x2w, y1, x2, y1w, w-1,Cv);
Quad(x1, y1w, x1w, y2w, w-1,Cv);
Quad(x2w, y1w, x2, y2w, w-1,Cv);
Quad(x1, y2w, x1w, y2, w-1,Cv);
Quad(x1w, y2w, x2w, y2, w-1,Cv);
Quad(x2w, y2w, x2, y2, w-1,Cv);
end; end;
procedure TForm1.Button1Click(Sender: TObject);
var
x1,y1,x2,y2:integer;
begin
Image1.Canvas.Rectangle(x1, y1, x2, y2);
Quad(x1, y1, x2, y2, 4,Image1.Canvas);
end;
end.
Вот код, квадраты не получаются...
← →
DanilTraum (2013-06-19 12:35) [6]Есть этаже программа, только я все делал по заданию пиксельных координат...--->>> похоже, это все на что я способен(((
← →
Jeer © (2013-06-19 12:38) [7]Начни не с рекурсии, как начнет получаться - переходи к ней.
← →
брат Птибурдукова (2013-06-19 12:42) [8]А если поверх наристованного узора наложить отсканированный текст, то сразу и решение для http://delphimaster.net/view/2-1370989337/
профит! (фрактали точнее)
← →
[ВладОшин] © (2013-06-19 12:43) [9]procedure TForm1.btn1Click(Sender: TObject);
begin
DrowSqureS(200);
end;
procedure TForm1.DrowSqureS(A: Integer);
begin
if A < 2 then
Exit;
Canvas.Rectangle(0,0,A,A);
A := A div 2;
DrowSqureS(A);
end;
> Jeer © (19.06.13 12:33) [4]
>
> >[ВладОшин] © (19.06.13 12:28) [3]
>
> Вот прилипчивый:)
>
> 1. Купить компьютер.
так и знал.. блин, а микроволновка если есть - не подойдет!?!
← →
DanilTraum (2013-06-19 12:45) [10]>>>Начни не с рекурсии, как начнет получаться - переходи к ней.
Тоже думаю, попробуем...
← →
Jeer © (2013-06-19 12:49) [11]>а микроволновка если есть - не подойдет!?!
Можно. Там наверняка есть микропроцессор.
Поэтому пропускаем первый и второй пункты, далее - по списку.
← →
[ВладОшин] © (2013-06-19 12:54) [12]Вот ведь какие преподы - перерыл весь интернет, компилятора для программы написанной маркером на стенке микроволновки, похоже, нет :(
Или надо было с внутренней стороны писать?!?
← →
[ВладОшин] © (2013-06-19 13:03) [13]тьфу, ты..
>> квадрат, в нем четыре квадрата,
тогда:
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;
попасть по пикселям - на дом :)
← →
DanilTraum (2013-06-19 13:08) [14]Ругается на DrowSqureS...
Может объявить где надо его?
← →
[ВладОшин] © (2013-06-19 13:47) [15]
> procedure TForm1.btn1Click(Sender: TObject);
> procedure TForm1.DrowSqureS(A: Integer);
это методы класса TForm1
один метод описан тут:
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
угадайте как описать второй
← →
DanilTraum (2013-06-19 14:00) [16]При запуске программы
Expected "=" but "(" found
TForm1 = class(TForm)
??????????
procedure TForm1.DrowSqureS(A: Integer);
Просто никогда не сталкивался с DrowSqureS...(((
← →
Jeer © (2013-06-19 14:14) [17]Хорош парня травмировать:)
DanilTraum (19.06.13 14:00) [16]
Вполне достаточно *.Canvas.FrameRect(Rect:TRect);
← →
MBo © (2013-06-19 14:16) [18]Судя по условия, параметры процедуры могут быть:
(Canvas: TCanvas; X0, Y0, Size: Integer)
т.е. передается левый верхний угол и размер квадрата.
В процедуре 4 раза рисуется Rectangle, и, если Size > 1, то один раз вызывается эта же процедура с теми же координатами, и уполовиненным размером Size div 2
Вроде логика простая.
← →
DanilTraum (2013-06-19 14:27) [19]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);
← →
DanilTraum (2013-06-19 14:28) [20]Вполне достаточно *.Canvas.FrameRect(Rect:TRect);>>>
А это где прописать?
и что вместо * прописать?
← →
[ВладОшин] © (2013-06-19 14:37) [21]
> В процедуре 4 раза рисуется Rectangle,
хватит 2х, в симметричных относительно центра квадрантах
> DanilTraum
Вы же вообще ничего не понимаете..
так не интересно..
Сомневаюсь, что и тот код - Ваш.
← →
DanilTraum (2013-06-19 14:41) [22]Конечно не мой, он для фрактального преобразования квадрата...
вот мой:
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:47) [23]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 15:02) [24]Спасибо огромное!)))
Как понимаю, нельзя сделать, чтоб при каждом нажатии кнопки(Button1.teg+1)
рисовались квадраты постепенно ,а не все сразу....
← →
[ВладОшин] © (2013-06-19 15:05) [25]
> ельзя сделать, чтоб при каждом нажатии кнопки рисовались квадраты постепенно ,а не все сразу....
1. А рекурсия? нужна или где? По определению рекурсии выход из нее возможен только после полного цикла отработки.
2. Зачем это надо?
← →
DanilTraum (2013-06-19 15:20) [26]Да, логично...
← →
[ВладОшин] © (2013-06-19 15:36) [27]И так не ответили 2. Зачем это надо?
Можно ограничить глубину рекурсии, с помощью доп. переменной, например.
Тогда по клику будет рисовать до опред.уровня.
или же, если нужна наглядность - просто поставить паузу
← →
DanilTraum (2013-06-19 16:07) [28]2. Зачем это надо?--- чтоб контралировать процесс создания квадратов
Пауза--- Sleep? попробуем...
← →
DanilTraum (2013-06-19 16:16) [29]Image1.Repaint;
Sleep(1000);
Получилось, спасибо!
← →
Jeer © (2013-06-19 16:59) [30]"И вот пошли корованы и стало возможным их грабить"
P.S.
Не обижайся, но копи-пасте - не самый лучший метод изучения и создания приложений.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.002 c