Posted By: rk (Vesela kaminka) on 'CZprogram' Title: Vlocka Date: Tue Apr 1 17:46:35 1997 No, svuj programek jsem nenasel, nasel jsem za to jeden priklad z knizky Dekomposice a rekursivni programy. Tedy tady ho mate: program Vlocka; uses Crt,Graph; {Kresleni vlocky Kochove nad jednou useckou. Cela vlocka se vytvori slozenim car nad stranami rovnostranneho troj- uhelnika.} var d: real; {delka zaakladni usecky} N: byte; {stupen krivky} dir: integer; Tsin,Tcos: array[0..5] of real; DrvPath: string[80]; GrDrv,GrMod,ErrCode: integer; p3,alfa: word; x,y: real; C: char; procedure Koch(N: byte); begin if N=0 then {kresli usecku ve smeru dir} begin x:=x+Tcos[dir]; y:=y-Tsin[dir]; LineTo(Round(x),Round(y)) end else begin Koch(N-1); Inc(dir); if dir>5 then dir:=0; Koch(N-1); Dec(dir,2); if dir<0 then Inc(dir,6); Koch(N-1); Inc(dir); if dir>5 then dir:=0; Koch(N-1) end end; begin {hlavni program} writeln('Kresleni krivek Kochove - snehova vlocka.'); writeln('Zadejte stupen krivky [0..6]: '); readln(N); DrvPath:='C:ATP'; {cesta k adresari s grafickym driverem .BGI} GrDrv:=Detect; InitGraph(GrDrv,GrMod,DrvPath); ErrCode:=GraphResult; if Errcode<>0 then begin writeln('Chyba pri inicializaci grafickeho driveru.'); writeln(GrapherrorMsg(ErrCode)); Halt(1) end; {Graficky driver zaveden} p3:=1; for dir:=1 to N do p3:=3*p3; d:=GetMaxX / p3; {velikost zakladni usecky} {Je-li velikost zakladni usecky d, pak velikost krivky N-teho stupne je 3**N*d <= GetMaxX a z toho se urci d.} alfa:=0; for dir:=0 to 5 do begin Tsin[dir]:=d*sin(alfa*pi/180); Tcos[dir]:=d*cos(alfa*pi/180); Inc(alfa,60) end; x:=0; y:=2*GetMaxY/3; MoveTo(Round(x),Round(y)); dir:=0; Koch(N); C:=ReadKey; CloseGraph; end. vecne nespokojeny rk ------------------------------------------------------------------------------- Where do foxes give Good night?