// Zadatak - Nacrtati srce u koordinatnom sistemu uses Graph,math; function f1(x:real):real; begin f1:=abs(x)+sqrt(1-x*x); end; function f2(x:real):real; begin f2:=abs(x)-sqrt(1-x*x); end; var x0, y0, x,y, xLeft, yLeft, xRight, yRight, n: longint; Gd, Gm:integer; a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real; i: byte; s: string; begin x0 := 0; Gd := Detect; InitGraph(Gd, Gm, ''); // podesavanje "okvira" u kome se crta ( da li je ceo ekran ili deo ekraana, u ovom slucaju deo ekrana) xLeft := 50; yLeft := 50; xRight := GetMaxX - 50; yRight := GetMaxY - 50; // podesavanje maksimalne i minimalne vrednosti na x osi. dx je razmak izmedju dve susedne tacke a := -5; b := 5; dx := 1; // podesavanje maksimalne i minimalne vrednosti na y osi. dy je razmak izmedju dve susedne tacke fmin := -5; fmax := 5; dy := 1; { Racunanje razmere - koliko je razmak od jedne tacke na grafiku u pikselima } mx := (xRight - xLeft) / (b - a); { razmera po x } my := (yRight - yLeft) / (fmax - fmin); { razmera po y } { racunanje koordinatnog pocetka } x0 := trunc(abs(a) * mx) + xLeft; y0 := yRight - trunc(abs(fmin) * my); line(xLeft, y0, xRight + 10, y0); line(x0, yLeft - 10, x0, yRight); SetColor(4); SetTextStyle(1, 0, 1); OutTextXY(xRight + 20, y0 - 15, 'X'); OutTextXY(x0 - 15, yLeft - 35, 'Y'); SetColor(14); n := round((b - a) / dx) + 1; { broj tacaka po x osi } for i := 1 to n do begin num := a + (i - 1) * dx; { koja je vrednost na grafiku} x := xLeft + trunc(mx * (num - a)); { gde se ta vrednost nalazi na slici ( koliko piksela po x osi odgovara toj vrednosti) } Line(x, y0 - 3, x, y0 + 3); { iscrtavanje linije za oznaku vrednosti ( vertikalna linija na x-osi) } str(Num:0:1, s); if abs(num) > 1E-15 then OutTextXY(x - TextWidth(s) div 2, y0 + 10, s) end; { Isto kao za x-osu } n := round((fmax - fmin) / dy) + 1; for i := 1 to n do begin num := fMin + (i - 1) * dy; y := yRight - trunc(my * (num - fmin)); Line(x0 - 3, y, x0 + 3, y); str(num:0:0, s); if abs(num) > 1E-15 then OutTextXY(x0 + 7, y - TextHeight(s) div 2, s) end; OutTextXY(x0 - 10, y0 + 10, '0'); //crtanje grafika funcije x1 := -1; // pocetna vrednost zbog definicije korena while x1 <= 1 do begin y1 := f1(x1); {preracunavanje vrednosti na grafiku f(x)} x := x0 + round(x1 * mx); { racunanje koliko x koordinata trenutne tacke zauzima piksela } y := y0 - round(y1 * my); { racunanje koliko y koordinata trenutne tacke zauzima piksela } if (y >= yLeft) and (y <= yRight) then PutPixel(x, y, 12); // iscrtava se tacka, ukoliko njene koordinate ne izlaze iz opsega y1 := f2(x1); x := x0 + round(x1 * mx); x := x0 + round(x1 * mx); y := y0 - round(y1 * my); if (y >= yLeft) and (y <= yRight) then PutPixel(x, y, 15); x1 := x1 + 0.0001; //sledece tacka end; readln end.