online: 5; azi: 1153; total: 53159 Manual clasa a xi a - Tehnici de programare - Divide et impera

Manual clasa a Xi a

Tehnici de programare

Divide et impera

Să se deseneze covorul lui Sierpinski, astfel: se desenează un pătrat cu latura L, se împarte acest pătrat în 9 pătrate egale, se haşurează pătratul din mijloc şi se repetă acest proces de n ori pentru fiecare pătrat nehaşurat .
Pentru a desena covorul lui Sierpinski, putem utiliza o funcție recursivă și biblioteca graphics.h . Acesta este un exemplu de program care desenează covorul lui Sierpinski folosind graphics.h :
# include < iostream >
# include < graphics.h >
# include < cmath >
const int SCREEN_WIDTH = 800 ;
const int SCREEN_HEIGHT = 600 ;
void drawSierpinskiCarpet ( int x, int y, int length , int depth ) {
if ( depth <= 0 ) {
return ;
}
int third_length = length / 3 ;
// Desenează pătratul haşurat
setfillstyle (SOLID_FILL, WHITE);
bar (x + third_length , y + third_length , x + 2 * third_length - 1 , y + 2 * third_length - 1 );
// Recursivitate pentru cele 8 pătrate rămase
for ( int i = 0 ; i < 3 ; i++) {
for ( int j = 0 ; j < 3 ; j++) {
if (i != 1 || j != 1 ) {
drawSierpinskiCarpet (x + i * third_length , y + j * third_length , third_length , depth - 1 );
}
}
}
}
int main () {
int gd = DETECT, gm ;
initgraph (& gd , & gm , "" );
int length = 243 ; // Trebuie să fie o putere a lui 3 pentru a evita artefacte vizuale
int x = (SCREEN_WIDTH - length ) / 2 ;
int y = (SCREEN_HEIGHT - length ) / 2 ;
int depth = 4 ;
drawSierpinskiCarpet (x, y, length , depth );
getch ();
closegraph ();
return 0 ;
}

Acest program desenează covorul lui Sierpinski utilizând o funcție recursivă drawSierpinskiCarpet . Funcția acceptă coordonatele x și y ale colțului stânga-sus al pătratului curent, lungimea laturii pătratului și adâncimea maximă a recursiunii.
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