Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
Mad_money
1

кривая гильберта

14.10.2008, 14:41. Показов 9162. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
кто нить знает как кривую гильберта нарисовать без рекурсии?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2008, 14:41
Ответы с готовыми решениями:

Кривая астроида
помогите кто сможет: 1. Кривая астроида определяется следующим уравнением в параметрической...

Кривая улитка паскаля
Кривая улитка паскаля определяется следующим уравнением в полярных координатах: p=a*cos(f)+L, где L...

Кривая, заданная параметрически: x=t2, y=2/3 t(3-t2)
Кривая, заданная параметрически: x=t2, y=2/3 t(3-t2)

Таблица вывода кривая
Составил программу для вычисления суммы функции. По условию требуется ввести аргумент и шаг 0.25....

8
Почетный модератор
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,182
15.10.2008, 10:09 2
Если Вы знаете как делать с рекурсией, то сделать без рекурсии наверное проще, замените рекурсивный вызов процедуры рисования циклом типа for ... do.
0
MAdmon
15.10.2008, 13:53 3
Цитата Сообщение от Puporev Посмотреть сообщение
Если Вы знаете как делать с рекурсией, то сделать без рекурсии наверное проще, замените рекурсивный вызов процедуры рисования циклом типа for ... do.
может ты скажешь как переделать этот код:

Код
var
x,y,i,xbed,ybed,h:integer;
procedure HL(n:integer);forward;
procedure HR(n:integer);forward;
procedure HD(n:integer);forward;
procedure HV(n:integer);forward;
procedure lineRel(dx,dy:integer);
begin
x:=x+dx;
y:=y+dy;
Lineto(x,y);
end;
procedure linkL;
begin
lineRel(-h,0);
end;
procedure linkR;
begin
lineRel(h,0)
end;
procedure linkV;
begin
lineRel(0,-h)
end;
procedure linkD;
begin
lineRel(0,h)
end;
procedure HL(n:integer);
 begin
  if n>0 then begin
    HD(n-1);
    linkL;
    HL(n-1);
    linkD;
    HL(n-1);
    linkR;
    HV(n-1);
  end;{if}
end;{HL}
procedure HR(n:integer);
 begin
  if n>0 then begin
    HV(n-1);
    linkR;
    HR(n-1);
    linkV;
    HR(n-1);
    linkL;
    HD(n-1);
  end;{if}
end;{HR}
procedure HD(n:integer);
 begin
  if n>0 then begin
    HL(n-1);
    linkD;
    HD(n-1);
    linkL;
    HD(n-1);
    linkV;
    HR(n-1);
  end;{if}
end;{HD}
procedure HV(n:integer);
 begin
  if n>0 then begin
    HR(n-1);
    linkV;
    HV(n-1);
    linkR;
    HV(n-1);
    linkD;
    HL(n-1);
  end;{if}
end;{HV}
begin
x:=500;
y:=3;
i:=9;
h:=5;
moveto(x,y);
HL(i);
end.
Почетный модератор
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,182
15.10.2008, 17:23 4
Код
uses crt,graph;
var
x,y,i,xbed,ybed,h:integer;
gd,gm:integer;
procedure HL(n:integer);forward;
procedure HR(n:integer);forward;
procedure HD(n:integer);forward;
procedure HV(n:integer);forward;
procedure lineRel(dx,dy:integer);
begin
x:=x+dx;
y:=y+dy;
Lineto(x,y);
end;
procedure linkL;
begin
lineRel(-h,0);
end;
procedure linkR;
begin
lineRel(h,0)
end;
procedure linkV;
begin
lineRel(0,-h)
end;
procedure linkD;
begin
lineRel(0,h)
end;
procedure HL(n:integer);
begin
if n>0 then begin
HD(n-1);
linkL;
HL(n-1);
linkD;
HL(n-1);
linkR;
HV(n-1);
end;{if}
end;{HL}
procedure HR(n:integer);
begin
if n>0 then begin
HV(n-1);
linkR;
HR(n-1);
linkV;
HR(n-1);
linkL;
HD(n-1);
end;{if}
end;{HR}
procedure HD(n:integer);
begin
if n>0 then begin
HL(n-1);
linkD;
HD(n-1);
linkL;
HD(n-1);
linkV;
HR(n-1);
end;{if}
end;{HD}
procedure HV(n:integer);
begin
if n>0 then begin
HR(n-1);
linkV;
HV(n-1);
linkR;
HV(n-1);
linkD;
HL(n-1);
end;{if}
end;{HV}
begin
clrscr;
write('Porjadok krivoj:');
readln(i);
initgraph(gd,gm,'');
x:=500;
y:=3;
h:=5;
moveto(x,y);
HL(i);
readln;
closegraph;
end.
0
Madmon
15.10.2008, 17:35 5
Цитата Сообщение от Puporev Посмотреть сообщение
Код
uses crt,graph;
var
x,y,i,xbed,ybed,h:integer;
gd,gm:integer;
procedure HL(n:integer);forward;
procedure HR(n:integer);forward;
procedure HD(n:integer);forward;
procedure HV(n:integer);forward;
procedure lineRel(dx,dy:integer);
begin
x:=x+dx;
y:=y+dy;
Lineto(x,y);
end;
procedure linkL;
begin
lineRel(-h,0);
end;
procedure linkR;
begin
lineRel(h,0)
end;
procedure linkV;
begin
lineRel(0,-h)
end;
procedure linkD;
begin
lineRel(0,h)
end;
procedure HL(n:integer);
begin
if n>0 then begin
HD(n-1);
linkL;
HL(n-1);
linkD;
HL(n-1);
linkR;
HV(n-1);
end;{if}
end;{HL}
procedure HR(n:integer);
begin
if n>0 then begin
HV(n-1);
linkR;
HR(n-1);
linkV;
HR(n-1);
linkL;
HD(n-1);
end;{if}
end;{HR}
procedure HD(n:integer);
begin
if n>0 then begin
HL(n-1);
linkD;
HD(n-1);
linkL;
HD(n-1);
linkV;
HR(n-1);
end;{if}
end;{HD}
procedure HV(n:integer);
begin
if n>0 then begin
HR(n-1);
linkV;
HV(n-1);
linkR;
HV(n-1);
linkD;
HL(n-1);
end;{if}
end;{HV}
begin
clrscr;
write('Porjadok krivoj:');
readln(i);
initgraph(gd,gm,'');
x:=500;
y:=3;
h:=5;
moveto(x,y);
HL(i);
readln;
closegraph;
end.

зачем ты это написал?
я же просил без рекурсии!
Почетный модератор
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,182
15.10.2008, 17:50 6
Извини не глянул, просто есть код с рекурсией намного короче, а это посмотрел, что длинный и читать не стал.
0
Madmon
15.10.2008, 17:56 7
Цитата Сообщение от Puporev Посмотреть сообщение
Извини не глянул, просто есть код с рекурсией намного короче, а это посмотрел, что длинный и читать не стал.
этот просто понятнее!
И все таки без рекурсии кто нибудь знает как сделать?
Alina-Kas
15.01.2009, 11:24 8
В PascalABC кто-нибудь программирует?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
program L;//Генерация и графическое воспроизведение алгоритма
uses crt,GraphABC;
var X0,Y0,X,Y:integer;
       i,Iter:integer;
    Opr,Alg,DopA,DopB,DopC,DopD,DopE,DopG,DopH,DopI,DopJ,buf:string;
    k:integer;
    Amult: set of byte;
{--------------------------------------------------------------------------------}
procedure L_Generator(Opr,DopA,DopB,DopC,DopD,DopE,DopG,DopH,DopI,DopJ:string;Iter:integer;var Alg:string);
var i,j:integer;
begin
if Iter>6 then Iter:=6;
 for j:=1 to Iter do 
  begin
  Alg:='';
  for i:=1 to length(Opr) do    {цикл нахождения и замены частей алгоритма}
    begin
      if Opr[i]='A' then Alg:=Alg+DopA else 
        if Opr[i]='B' then Alg:=Alg+DopB else
          if Opr[i]='C' then Alg:=Alg+DopC else
            if Opr[i]='D' then Alg:=Alg+DopD else
              if Opr[i]='E' then Alg:=Alg+DopE else
                if Opr[i]='G' then Alg:=Alg+DopG else
                  if Opr[i]='H' then Alg:=Alg+DopH else
                    if Opr[i]='I' then Alg:=Alg+DopI else
                      if Opr[i]='J' then Alg:=Alg+DopJ 
                        else Alg:=Alg+Opr[i];
    end;
    Opr:=Alg;
  end;
end;
 
procedure L_Graph(X0,Y0,L,Ang :integer; Alg :string);//процедура графификоского вывода алгоритма 
var i,k,X,Y:integer;//l - длина единичног движения
begin
k:=0;
moveto(X0,Y0);
 for i:=1 to length(Alg) do    {цикл графического восрпоизведения алгоритма}
  begin
    if (Alg[i]='F') or (Alg[i]='f') then
      begin
        X:=round(L*cos(3.14/180*k));
        Y:=-round(L*sin(3.14/180*k));
        lineto(X0+X,Y0+Y);
        X0:=X0+X;
        Y0:=Y0+Y;      
      end;
    if Alg[i]='-' then k:=k+ang;
    if Alg[i]='+' then k:=k-ang;
  end;
X0:=X0+X;
Y0:=Y0+Y;   
end;
 
{================================================================================}
begin
writeln;writeln;writeln;writeln;
writeln('-------------------------------------------------------------------');
Opr:='A'{'X'};
DopA:='-BF+AFA+FB-'{'-YF+XFX+FY-'};
DopB:='+AF-BFB-FA+'{'+XF-YFY-FX+'};
Iter:=6;//не больше 6
L_Generator(Opr,DopA,DopB,DopC,DopD,DopE,DopG,DopH,DopI,DopJ,Iter,Alg);
L_Graph(200,200,2,90,Alg);
//-----------Раздел получения тестовых значений переменных------------------
  writeln;
  writeln('Opr=',Opr);
  writeln('конечный алгоритм - ',Alg);
  writeln('длина строки - ',Length(Opr));
  writeln('строчка заменяющая B - ',DopB);
  write('номера мест с В - ');
  for i:=1 to length(Opr) do
    if i in AMult then write(i:3);
    writeln;
  writeln('длина алгоритма ',length(Alg),'     ');
end.
здесь ошибка переполнения, как исправить?
Почетный модератор
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,182
15.01.2009, 14:24 9
Перевел вТурбо Паскаль, все нормально работает, в суть программы не вникал, но здесь смущает writeln('длина строки - ',Length(Opr)); выводит 1. Так и должно быть?

Добавлено через 27 минут 22 секунды
Нормально работает только при Iter < =3. В Турбо Паскале тоже, но он плюет на превышение размера строки и выдает s=255. АВС не плюет, и при переполнении строки выдает оштбку, вот и вся разница. А длина алгоритма при Iter > 3 там и там > 255.
0
15.01.2009, 14:24
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2009, 14:24
Помогаю со студенческими работами здесь

Кривая Гильберта
Помогите сделать фрактал Кривой Гильберта с уровнями!

Кривая Гильберта в Делфи
Программное средство должно производить построение указанного фрактала исходя из различных...

Кривая Гильберта: чем заменить Canvas в примере на Delphi
Добрый всем день. есть код в дельфи для проги кривой Гильберта procedure a(i:integer; canvas:...

Кривая Коха, кривая Серпинского
Добрый вечер. Помогите пожалуйста. Очень срочно нужна готовая программа кривой Коха и кривой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как запретить подсветку выделенного текста с помощью CSS
InfoMaster 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
Как выполнить другую программу или системную команду из Python
InfoMaster 20.01.2025
Python предоставляет мощные инструменты для выполнения системных команд и управления внешними процессами, что делает его идеальным выбором для автоматизации различных задач системного. . .
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru