|
Вопрос # 567/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Допоможіть написати прграму на Паскалі. Потрібно створити програму яка буде будувати множину Кантора. Я написав прогу яка зображає кожну лінію окремо. Будь ласка якщо ви знайдете якусь послідовність,чи зможете спростити програму допомжіть. Знайшв пргорамний код на Java. Надаю також свій код. Дуже потрібно. Дякую за можливо отримані в майьутньому відповіді.
Приложение: Переключить в обычный режим-
-
- import java.awt.*;
- import java.applet.*;
-
- public class SierpinskiCarpet extends Applet {
- private Graphics g=null;
- private int d0=729; // 3^6
-
- public void init() {
- g=getGraphics();
- resize(d0,d0);
- }
-
- public void paint(Graphics g) {
- // start recursion:
- drawSierpinskiCarpet ( 0, 0, getWidth(), getHeight() );
- }
-
- private void drawSierpinskiCarpet(int xTL, int yTL, int width, int height) {
- if (width>2 && height>2) {
- int w=width/3, h=height/3;
- g.fillRect ( xTL+w, yTL+h, w, h );
- for (int k=0;k<9;k++) if (k!=4) {
- int i=k/3, j=k%3;
- drawSierpinskiCarpet ( xTL+i*w, yTL+j*h, w, h ); // recursion
- }
- }
- }
- }
-
-
-
-
-
-
- program pr;
- uses crt,graph;
- var i,j,gd,gm,m,n,k:integer;
- x1,x2,y1,y2:integer;
- begin
- Gd:= Detect;
- InitGraph(Gd, Gm, '');
- if GraphResult <> grOk then
- Halt(1);
- setcolor(9);
- x1:=150;y1:=100;
- y2:=420;x2:=470;
-
-
-
-
-
- setfillstyle(1,9);
- floodfill(200,150,9);
- m:=x2-x1;
-
-
- setcolor(0);
- line(x1+i,y1,x1+i,y2);
-
-
- line(x1+i*2,y1+i*3,x1+i*2,y2);
- line(x1,y1+i,x2,y1+i);
- line(x1,y1+i*3,x2,y1+i*3);
- line(x1,y1+i*2,x1+i,y1+i*2);
- line(x1+i*3,y1+i*2,x1+i*4,y1+i*2);
-
-
- floodfill(300,250,0);
-
-
- line(x1+i,y1,x1+i,y2);
- line(x1+i*2,y1,x1+i*2,y1+i);
- line(x1+i*3,y1,x1+i*3,y2);
- line(x1,y1+i,x2,y1+i);
- line(x1,y1+i*3,x2,y1+i*3);
- line(x1,y1+i*2,x1+i,y1+i*2);
- line(x1+i*3,y1+i*2,x1+i*5,y1+i*2);
- line(x1+i*7,y1+i*2,x1+i*9,y1+i*2);
- line(x1+i*11,y1+i*2,x1+i*13,y1+i*2);
- line(x1+i*15,y1+i*2,x1+i*16,y1+i*2);
-
- line(x1,y1+i*6,x1+i,y1+i*6);
- line(x1+i*3,y1+i*6,x1+i*4,y1+i*6);
- line(x1+i*12,y1+i*6,x1+i*13,y1+i*6);
- line(x1+i*15,y1+i*6,x1+i*16,y1+i*6);
-
- line(x1,y1+i*10,x1+i,y1+i*10);
- line(x1+i*3,y1+i*10,x1+i*4,y1+i*10);
- line(x1+i*12,y1+i*10,x1+i*13,y1+i*10);
- line(x1+i*15,y1+i*10,x1+i*16,y1+i*10);
-
- line(x1,y1+i*14,x1+i,y1+i*14);
- line(x1+i*3,y1+i*14,x1+i*5,y1+i*14);
- line(x1+i*7,y1+i*14,x1+i*9,y1+i*14);
- line(x1+i*11,y1+i*14,x1+i*13,y1+i*14);
- line(x1+i*15,y1+i*14,x1+i*16,y1+i*14);
-
- line(x1,y1+i*5,x2,y1+i*5);
- line(x1,y1+i*7,x2,y1+i*7);
- line(x1,y1+i*9,x2,y1+i*9);
- line(x1,y1+i*11,x2,y1+i*11);
- line(x1,y1+i*13,x2,y1+i*13);
- line(x1,y1+i*15,x2,y1+i*15);
-
- line(x1+i*5,y1,x1+i*5,y2);
- line(x1+i*6,y1,x1+i*6,y1+i);
- line(x1+i*6,y1+i*3,x1+i*6,y1+i*4);
- line(x1+i*7,y1,x1+i*7,y1+i*4);
-
- line(x1+i*2,y1+i*3,x1+i*2,y1+i*5);
- line(x1+i*2,y1+i*7,x1+i*2,y1+i*9);
- line(x1+i*2,y1+i*11,x1+i*2,y1+i*13);
- line(x1+i*2,y1+i*15,x1+i*2,y1+i*16);
-
- line(x1+i*6,y1+i*15,x1+i*6,y1+i*16);
- line(x1+i*6,y1+i*11,x1+i*6,y1+i*13);
- line(x1+i*7,y1+i*11,x1+i*7,y1+i*16);
- line(x1+i*9,y1+i*11,x1+i*9,y1+i*16);
- line(x1+i*9,y1,x1+i*9,y1+i*4);
- line(x1+i*11,y1+i*11,x1+i*11,y1+i*16);
- line(x1+i*11,y1,x1+i*11,y1+i*4);
- line(x1+i*13,y1,x1+i*13,y2);
- line(x1+i*15,y1,x1+i*15,y2);
- line(x1+i*14,y1+i*15,x1+i*14,y1+i*16);
- line(x1+i*14,y1,x1+i*14,y1+i);
- line(x1+i*10,y1+i*15,x1+i*10,y1+i*16);
- line(x1+i*10,y1,x1+i*10,y1+i);
- line(x1+i*10,y1+i*12,x1+i*10,y1+i*13);
- line(x1+i*10,y1+i*3,x1+i*10,y1+i*4);
- line(x1+i*14,y1+i*3,x1+i*14,y1+i*5);
- line(x1+i*14,y1+i*7,x1+i*14,y1+i*9);
- line(x1+i*14,y1+i*11,x1+i*14,y1+i*13);
-
-
-
- floodfill(251,121,0);
- floodfill(331,121,0);
- floodfill(411,121,0);
- floodfill(411,201,0);
- floodfill(411,281,0);
- floodfill(411,391,0);
- floodfill(331,391,0);
- floodfill(251,391,0);
- floodfill(171,201,0);
- floodfill(171,281,0);
- floodfill(171,391,0);
-
- readln;
-
- closegraph;
-
- end.
Ответ #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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|