Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1370032724
Маргарита
2013-06-01 00:38
2014.03.23
проблема с записью в типизированный файл


9-1192266263
dr_creigan
2007-10-13 13:04
2014.03.23
Как создавать Meshes через буфер вершин?


15-1380916731
Туповатый
2013-10-04 23:58
2014.03.23
проприетарный


15-1380905527
BBC
2013-10-04 20:52
2014.03.23
XML просмотрщик


15-1380924488
xayam
2013-10-05 02:08
2014.03.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский