Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2014, 18:43   #1
Настена95
Пользователь
 
Регистрация: 26.04.2013
Сообщений: 21
Вопрос множество Кантора (Delphi)

Здравствуйте, помогите пожалуйста написать программу, которая рисует множество Кантора.

Рисунок множество Кантора образован квадратами. Каждый следующий квадрат в четыре раза меньше предыдущего. Центр каждого следующего квадрата расположен в вершине предыдущего квадрата и т.д. Так как рисунок состоит из однотипных элементов, и есть явная зависимость, как размеров, так и положения, следовательно, при создании данного рисунка можно использовать в программе рекурсию.
Изображения
Тип файла: png Безымянный.png (22.0 Кб, 165 просмотров)
Настена95 вне форума Ответить с цитированием
Старый 04.11.2014, 18:46   #2
Настена95
Пользователь
 
Регистрация: 26.04.2013
Сообщений: 21
По умолчанию

Есть код, который рекурсивно строит круги
Код:
unit Un3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure krug(x,y,r:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  k,gd,gm,mx,my:integer;	ch 	:char;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 k:=15;//минимальный размер окружности
end;
procedure TForm1.krug(x,y,r:integer);
begin
 if r>k then
  begin
  form1.Canvas.Pen.Color :=RGB(Random(255),Random(255),Random(255));
            krug(x+r+(r div 2),y,r div 2);
            krug(x,y+r+(r div 2),r div 2);
            krug(x-r-(r div 2),y,r div 2);
            krug(x,y-r-(r div 2),r div 2);
      end;
   form1.Canvas.Ellipse (x-r,y-r,x+r,y+r);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 //krug(X , Y , Y div 2);
 krug(X , Y , Y div 4)
end;

end.
Настена95 вне форума Ответить с цитированием
Старый 04.11.2014, 19:03   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

в чём проблема?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.11.2014, 19:05   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

ВНИМАНИЕ! Забрал отсюда : тыц
Цитата:
{$S+}
program primer_5;
uses Crt,Graph;
label z;
var a,b,n:integer;
g:char;
procedure draw(x,y,n:integer; size:word);
var s:word;
begin
if n-1>0 then
begin
s:= size div 2;
draw(x-size, y+size,n-1,s);
draw(x-size, y-size,n-1,s);
draw(x+size, y+size,n-1,s);
draw(x+size, y-size,n-1,s);
end;
rectangle(x-size, y-size, x+size, y+size);
bar(x-size+1, y-size+1, x+size-1, y+size-1);
end;

begin
z:write('n='); readln(n);
if n>7 then begin goto z;end;
a:=detect; b:=detect;
initgraph(a,b,'c:\bp\bgi');
setfillstyle(solidfill,5);
Setcolor(white);
draw(getmaxx div 2,getmaxy div 2,n,getmaxy div 4);
readkey;
closegraph;
end.
Poma][a вне форума Ответить с цитированием
Старый 05.11.2014, 08:08   #5
Настена95
Пользователь
 
Регистрация: 26.04.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
ВНИМАНИЕ! Забрал отсюда : тыц

мне в делфи нужно
Настена95 вне форума Ответить с цитированием
Старый 05.11.2014, 09:14   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Если задан центр первого квадрата x1, y1 и отклонения вершин dx, dy (в случае квадрата dx = dy)
то в функции рекурсивно производится 4 вызова


Код:
void recursive (int x1, int y1, int dx, int dy)
{
recursive(x1 - dx, y1 - dy, dx/2, dy/2);
recursive(x1 - dx, y1 + dy, dx/2, dy/2);
recursive(x1 + dx, y1 - dy, dx/2, dy/2);
recursive(x1 + dx, y1 + dy, dx/2, dy/2);
}
off: delphi у меня нет
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось ACE Valery; 05.11.2014 в 11:48.
challengerr вне форума Ответить с цитированием
Старый 05.11.2014, 09:32   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Настена95 Посмотреть сообщение
мне в делфи нужно
И в чём, собственно, проблема?!
Вам дали код, рабочий. Неужели трудно переложить его на Delphi?!

ладно.
Держите готовый код.
Выполнил исключительно из любопытства...

Исходники: Sources_Squares_of_Kantor.rar
EXE-шник: Kantor_exe.rar


ну, и если кому вдруг интересно, там такой код:
Код:
type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure Draw(x, y, n: integer; size: word);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  n: integer = 4;

procedure TForm1.Draw(x, y, n: integer; size: word);
var s: word;
begin
  if n - 1 > 0 then
  begin
    s := size div 2;
    draw(x - size, y + size, n - 1, s);
    draw(x - size, y - size, n - 1, s);
    draw(x + size, y + size, n - 1, s);
    draw(x + size, y - size, n - 1, s);
  end;
  Canvas.Rectangle(x - size, y - size, x + size, y + size);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  draw(Width div 2, Height div 2, n, (Height - 50) div 4);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.11.2014, 09:41   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Настена95 Посмотреть сообщение
мне в делфи нужно
Если вы будете требовать и лениться, то все пройдут мимо. Начните проявлять инициативу, ясно выражать конкретные проблемы и вам охотно помогут
8Observer8 вне форума Ответить с цитированием
Старый 05.11.2014, 10:02   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от 8Observer8
Если вы будете требовать и лениться, то все пройдут мимо.
Вы правы. Но кое-кто уже не прошёл мимо... Извините...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.11.2014, 12:57   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

А я не видел вашего сообщения, так как открыл, чтобы ответить, а написал и отправил только через некоторое время. Мне кажется, что нет ничего плохого - поупражняться. И автор темы в коде может разберётся. Взаимная польза

Последний раз редактировалось 8Observer8; 05.11.2014 в 13:06.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение Кантора (Cantor expansion) 3dg_fan Помощь студентам 3 12.11.2011 19:04
Множество, содержащее натуральные числа из первой сотни. Сформировать новое множество из простых чисел первого множества Aimet Паскаль, Turbo Pascal, PascalABC.NET 3 16.06.2011 20:50
Дано множество А, напечатать четные элементы, входящие в другое множество (Паскаль) Марийка92 Помощь студентам 4 03.04.2011 17:38
Задано некоторое множество М и множество Т того же типа dark999 Помощь студентам 5 01.04.2011 14:17
Рекурсивная программа в Dephi:множество кантора Katya_Pesec Помощь студентам 0 12.06.2010 21:11