Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 567

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Допоможіть написати прграму на Паскалі. Потрібно створити програму яка буде будувати множину Кантора. Я написав прогу яка зображає кожну лінію окремо. Будь ласка якщо ви знайдете якусь послідовність,чи зможете спростити програму допомжіть. Знайшв пргорамний код на Java. Надаю також свій код. Дуже потрібно. Дякую за можливо отримані в майьутньому відповіді.

Приложение:
  1.  
  2.  
  3. import java.awt.*;
  4. import java.applet.*;
  5.  
  6. public class SierpinskiCarpet extends Applet {
  7. private Graphics g=null;
  8. private int d0=729; // 3^6
  9.  
  10. public void init() {
  11. g=getGraphics();
  12. resize(d0,d0);
  13. }
  14.  
  15. public void paint(Graphics g) {
  16. // start recursion:
  17. drawSierpinskiCarpet ( 0, 0, getWidth(), getHeight() );
  18. }
  19.  
  20. private void drawSierpinskiCarpet(int xTL, int yTL, int width, int height) {
  21. if (width>2 && height>2) {
  22. int w=width/3, h=height/3;
  23. g.fillRect ( xTL+w, yTL+h, w, h );
  24. for (int k=0;k<9;k++) if (k!=4) {
  25. int i=k/3, j=k%3;
  26. drawSierpinskiCarpet ( xTL+i*w, yTL+j*h, w, h ); // recursion
  27. }
  28. }
  29. }
  30. }
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. program pr;
  38. uses crt,graph;
  39. var i,j,gd,gm,m,n,k:integer;
  40. x1,x2,y1,y2:integer;
  41. begin
  42. Gd:= Detect;
  43. InitGraph(Gd, Gm, '');
  44. if GraphResult <> grOk then
  45. Halt(1);
  46. setcolor(9);
  47. x1:=150;y1:=100;
  48. y2:=420;x2:=470;
  49.  
  50.  
  51.  
  52.  
  53.  
  54. setfillstyle(1,9);
  55. floodfill(200,150,9);
  56. m:=x2-x1;
  57.  
  58.  
  59. setcolor(0);
  60. line(x1+i,y1,x1+i,y2);
  61.  
  62.  
  63. line(x1+i*2,y1+i*3,x1+i*2,y2);
  64. line(x1,y1+i,x2,y1+i);
  65. line(x1,y1+i*3,x2,y1+i*3);
  66. line(x1,y1+i*2,x1+i,y1+i*2);
  67. line(x1+i*3,y1+i*2,x1+i*4,y1+i*2);
  68.  
  69.  
  70. floodfill(300,250,0);
  71.  
  72.  
  73. line(x1+i,y1,x1+i,y2);
  74. line(x1+i*2,y1,x1+i*2,y1+i);
  75. line(x1+i*3,y1,x1+i*3,y2);
  76. line(x1,y1+i,x2,y1+i);
  77. line(x1,y1+i*3,x2,y1+i*3);
  78. line(x1,y1+i*2,x1+i,y1+i*2);
  79. line(x1+i*3,y1+i*2,x1+i*5,y1+i*2);
  80. line(x1+i*7,y1+i*2,x1+i*9,y1+i*2);
  81. line(x1+i*11,y1+i*2,x1+i*13,y1+i*2);
  82. line(x1+i*15,y1+i*2,x1+i*16,y1+i*2);
  83.  
  84. line(x1,y1+i*6,x1+i,y1+i*6);
  85. line(x1+i*3,y1+i*6,x1+i*4,y1+i*6);
  86. line(x1+i*12,y1+i*6,x1+i*13,y1+i*6);
  87. line(x1+i*15,y1+i*6,x1+i*16,y1+i*6);
  88.  
  89. line(x1,y1+i*10,x1+i,y1+i*10);
  90. line(x1+i*3,y1+i*10,x1+i*4,y1+i*10);
  91. line(x1+i*12,y1+i*10,x1+i*13,y1+i*10);
  92. line(x1+i*15,y1+i*10,x1+i*16,y1+i*10);
  93.  
  94. line(x1,y1+i*14,x1+i,y1+i*14);
  95. line(x1+i*3,y1+i*14,x1+i*5,y1+i*14);
  96. line(x1+i*7,y1+i*14,x1+i*9,y1+i*14);
  97. line(x1+i*11,y1+i*14,x1+i*13,y1+i*14);
  98. line(x1+i*15,y1+i*14,x1+i*16,y1+i*14);
  99.  
  100. line(x1,y1+i*5,x2,y1+i*5);
  101. line(x1,y1+i*7,x2,y1+i*7);
  102. line(x1,y1+i*9,x2,y1+i*9);
  103. line(x1,y1+i*11,x2,y1+i*11);
  104. line(x1,y1+i*13,x2,y1+i*13);
  105. line(x1,y1+i*15,x2,y1+i*15);
  106.  
  107. line(x1+i*5,y1,x1+i*5,y2);
  108. line(x1+i*6,y1,x1+i*6,y1+i);
  109. line(x1+i*6,y1+i*3,x1+i*6,y1+i*4);
  110. line(x1+i*7,y1,x1+i*7,y1+i*4);
  111.  
  112. line(x1+i*2,y1+i*3,x1+i*2,y1+i*5);
  113. line(x1+i*2,y1+i*7,x1+i*2,y1+i*9);
  114. line(x1+i*2,y1+i*11,x1+i*2,y1+i*13);
  115. line(x1+i*2,y1+i*15,x1+i*2,y1+i*16);
  116.  
  117. line(x1+i*6,y1+i*15,x1+i*6,y1+i*16);
  118. line(x1+i*6,y1+i*11,x1+i*6,y1+i*13);
  119. line(x1+i*7,y1+i*11,x1+i*7,y1+i*16);
  120. line(x1+i*9,y1+i*11,x1+i*9,y1+i*16);
  121. line(x1+i*9,y1,x1+i*9,y1+i*4);
  122. line(x1+i*11,y1+i*11,x1+i*11,y1+i*16);
  123. line(x1+i*11,y1,x1+i*11,y1+i*4);
  124. line(x1+i*13,y1,x1+i*13,y2);
  125. line(x1+i*15,y1,x1+i*15,y2);
  126. line(x1+i*14,y1+i*15,x1+i*14,y1+i*16);
  127. line(x1+i*14,y1,x1+i*14,y1+i);
  128. line(x1+i*10,y1+i*15,x1+i*10,y1+i*16);
  129. line(x1+i*10,y1,x1+i*10,y1+i);
  130. line(x1+i*10,y1+i*12,x1+i*10,y1+i*13);
  131. line(x1+i*10,y1+i*3,x1+i*10,y1+i*4);
  132. line(x1+i*14,y1+i*3,x1+i*14,y1+i*5);
  133. line(x1+i*14,y1+i*7,x1+i*14,y1+i*9);
  134. line(x1+i*14,y1+i*11,x1+i*14,y1+i*13);
  135.  
  136.  
  137.  
  138. floodfill(251,121,0);
  139. floodfill(331,121,0);
  140. floodfill(411,121,0);
  141. floodfill(411,201,0);
  142. floodfill(411,281,0);
  143. floodfill(411,391,0);
  144. floodfill(331,391,0);
  145. floodfill(251,391,0);
  146. floodfill(171,201,0);
  147. floodfill(171,281,0);
  148. floodfill(171,391,0);
  149.  
  150. readln;
  151.  
  152. closegraph;
  153.  
  154. end.


Шарайчук Сергей Олександрович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Шарайчук Сергей Олександрович (статус: 2-ой класс)
Вопрос отправлен: 10 мая 2007, 20:34
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Шарайчук Сергій Олександрович!
Тупий переклад Java-коду на паскаль дає таке:

program SierpinskiCarpet;
uses
crt, graph;
const
d0=729;
var
gd,gm:integer;

procedure drawSierpinskiCarpet(xTL,yTL,width,height:Integer);
var
w,h,k,i,j:Integer;
begin
if (width>2)and(height>2) then begin
w:=width div 3;
h:=height div 3;
bar(xTL+w, yTL+h, w, h);
for k:=0 to 8 do if k<>4 then begin
i:=k div 3;
j:=k mod 3;
drawSierpinskiCarpet(xTL+i*w, yTL+j*h, w, h);
end;
end;
end;

begin
Gd:=detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
setcolor(9);
drawSierpinskiCarpet(0,0,d0,d0);
readln;
CloseGraph;
end.

Паскаля під рукою не маю - синтаксис не перевірив.

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 11 мая 2007, 10:12
Оценка за ответ: 3

Комментарий к оценке: Програмка канешно интресная но неработает. Она просто зарисовуваэт пол екрана в белый цвет!

Ответ #2. Отвечает эксперт: Yurchik

Все честно. Потрудившись почитать документацию на процедуру bar, обнаруживаем, что правильный вызов должен выглядеть вот так:

bar(xTL+w, yTL+h, xTL+w+w, yTL+h+h);

Поскольку процедура bar рисует залитый прямоугольник по координатам левого верхнего и правого нижнего углов, в то время как fillRect делает то же самое по координате левого верхнего угла прямоугольника, его ширины и высоты.

Enjoy!

Ответ отправил: Yurchik (статус: 3-ий класс)
Время отправки: 11 мая 2007, 17:28


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:30
Выполнено за 0.02 сек.