#include <graphics.h>
#include <iostream.h>
#include <conio.h>

#define COLOR LIGHTGRAY
#define BGIPATH "i:\\prg\\borlandc\\bgi"
void TS(int,int,int,int,int,int,int);

int main(){
  int st;
  int ster,tryb;

  cout << "Podaj stopien trojkata Sierpinskiego, ktory"
	"mam narysowac"<<endl;
  cin >> st;

  initgraph(&ster,&tryb,BGIPATH);

  //ustawienie koloru lini i wypelnienia
  setcolor(COLOR);
  setfillstyle(SOLID_FILL,COLOR);

  TS(50,430,450,430,250,50,st);
  while ( !kbhit() );
  return 1;
}

//funkcja rysujaca trojkat Sierpinskiego stopnia st.
// (x1,y1), (x2,y2) i (x3,y3) to wierzcholki trojkata
void TS(int x1,int y1,int x2,int y2,int x3, int y3, int st){
   if ( !st ){  // stopien == 0 - narysowanie wypelnionego trojkata
	// narysowanie lini trojkata
	line(x1,y1,x2,y2);
	line(x2,y2,x3,y3);
	line(x3,y3,x1,y1);
	// wypelnienie trojkata
	floodfill((x1+x2+x3)/3,(y1+y2+y3)/3,COLOR);
	}
   else { // w pozostalych przypadkach narysowanie 3 trojkatow
	  // stopnia o 1 mniejszego
	TS(x1,y1,(x1+x2)/2,(y1+y2)/2,(x1+x3)/2,(y1+y3)/2,st-1);
	TS((x1+x2)/2,(y1+y2)/2,x2,y2,(x2+x3)/2,(y2+y3)/2,st-1);
	TS((x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3,st-1);
	}
}

