online: 6; azi: 1362; total: 53368 Manual clasa a xi a - Tehnici de programare - Divide et impera

Manual clasa a Xi a

Tehnici de programare

Divide et impera

Desenaţi curba dragonului, definită prin următoarele trei elemente, în care fiecare segment al generatorului are lungimea L/ sqrt (2), unde L este lungimea segmentului inițiator.
Pentru a desena curba dragonului, putem utiliza o funcție recursivă și biblioteca graphics.h . Acesta este un exemplu de program care desenează curba dragonului folosind graphics.h :
# include < iostream >
# include < graphics.h >
# include < cmath >
const int SCREEN_WIDTH = 800 ;
const int SCREEN_HEIGHT = 600 ;
void drawDragonCurve ( int x1, int y1, int x2, int y2, int depth , bool left) {
if ( depth <= 0 ) {
line (x1, y1, x2, y2);
return ;
}
int deltaX = x2 - x1;
int deltaY = y2 - y1;
int x3, y3;
if (left) {
x3 = x1 + ( deltaX + deltaY ) / 2 ;
y3 = y1 + ( deltaY - deltaX ) / 2 ;
} else {
x3 = x1 + ( deltaX - deltaY ) / 2 ;
y3 = y1 + ( deltaY + deltaX ) / 2 ;
}
drawDragonCurve (x1, y1, x3, y3, depth - 1 , true );
drawDragonCurve (x3, y3, x2, y2, depth - 1 , false );
}
int main () {
int gd = DETECT, gm ;
initgraph (& gd , & gm , "" );
int x1 = SCREEN_WIDTH / 2 - 100 ;
int y1 = SCREEN_HEIGHT / 2 ;
int x2 = SCREEN_WIDTH / 2 + 100 ;
int y2 = y1;
int depth = 10 ;
drawDragonCurve (x1, y1, x2, y2, depth , true );
getch ();
closegraph ();
return 0 ;
}

Acest program desenează curba dragonului utilizând o funcție recursivă drawDragonCurve . Funcția acceptă coordonatele (x1, y1) și (x2, y2) ale segmentului curent, adâncimea maximă a recursiunii și o variabilă booleană left care indică direcția în care curba se îndoaie.
Pentru a rula acest cod, va trebui să ai instalat BGI ( Borland Graphics Interface ) pentru C++ și să configurezi mediul tău de dezvoltare pentru a utiliza această bibliotecă. Poți găsi o implementare a graphics.h pentru compilatoarele moderne precum GCC și MinGW aici: https://github.com/stbrumme/bgi