Jak zaokrąglić liczbę do dwóch miejsc po przecinku, np. 7.00342340234234E+002 nie używając liczba:0:2 ?
Dodam, że chce tą liczbę d:=sqrt(sqr(x2-x1) + sqr(y2-y1)); zaokrąglić do dwóch miejsc po przecinku...oczywiście nie używając d:0:2 bo na tym wyskakuje mi błąd i nie mogę tym sposobem nic zrobić.... Więc szukam innego
Oskins93
~user
Posty: 3
Dołączenie: Wczoraj, 14:57
[Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1] [Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1]
program okregi;
uses crt,graph,dos;
const rm=50; rd=70; //stae - promienie okr©g˘w
var
sterownik,tryb : integer;
x,y,xs,ys : integer;
x1,y1,x2,y2 : integer;
d : real;
krok : byte;
a,wynik,krok2 : string;
znak : char;
//--------------------------Procedury------------------------------
//---------------Procedura rysujĄca osie i okr©gi------------------
Procedure osie;
begin
//rysuje okr©gi
setcolor(yellow);
circle(x1,y1,rd);
circle(x2,y2,rm);
setlinestyle(0,0,3);
settextstyle(7,2,3);
//rysuje lini© X
line(30,ys,x-30,ys);
//rysuje lini© Y
line(xs,y-30,xs,30);
//rysuje groty strzaki X
line(x-30,ys,x-45,ys-10);
line(x-30,ys,x-45,ys+10);
//rysuje groty strzaki Y
line(xs,30,xs+10,45);
line(xs,30,xs-10,45);
//nazwy osi
outtextxy(x-20,ys+20,'X');
outtextxy(xs+25,10,'Y');
end;
//-----------------------------------------------------------------
//--------Procedura rysujĄca kreski i liczby na osiach-------------
Procedure kreski(ile,ilepion : word);
var i,j : byte;
begin
setlinestyle(0,0,1);
settextstyle(5,2,1);
setcolor(yellow);
for i:=1 to ile do
begin
if (xs+i*30) < (x-30) then //zabezpieczenie przed rysowaniem wi©kszej iloci kresek niľ x rozdzielczoci ekranu
begin
str(i,a);
line(xs+i*30,ys-5,xs+i*30,ys+5);
outtextxy((xs+i*30)-5,ys+5,a);
line(xs-i*30,ys-5,xs-i*30,ys+5);
outtextxy((xs-i*30)-11,ys+5,'-');
outtextxy((xs-i*30)-5,ys+5,a);
end;
end;
for j:=1 to ilepion do
begin
if (ys+j*30) < (y-30) then
begin
str(j,a); //zamienia liczb© na string
line(xs-5,ys-j*30,xs+5,ys-j*30); //rysuje kreski
outtextxy(xs+12,(ys-j*30)-10,a);
line(xs-5,ys+j*30,xs+5,ys+j*30);
outtextxy(xs+4,(ys+j*30)-10,'-');
outtextxy(xs+12,(ys+j*30)-10,a); //wywietla cyferki obok kresek
end;
end;
end;
//--------------------------------------------------------------
//--------Procedura oblicza odlego† mi©dzy rodkami okr©g˘w--------------
Procedure odl_okregow(var d : real);
begin
d:=sqrt(sqr(x2-x1) + sqr(y2-y1));
str(d,wynik);
settextstyle(1,2,1);
setcolor(red);
outtextxy(1,y-50,' Odleglosc miedzy srodkami okregow :');
outtextxy(340,y-50,wynik); //wywietlenie odlegoci mi©dzy rodkami okr©g˘w
end;
//--------------------------------------------------------------------------
//-----------Procedura sprawdzajĄca czy okr©gi sĄ styczne zewn©trznie...itd
Procedure spr_okr;
begin
setcolor(red);
if d > (rm+rd) then
outtextxy(x-300,y-50,'Okregi rozlaczne zewnetrznie.')
else
if d = (rm+rd) then
outtextxy(x-300,y-50,'Okregi styczne zewnetrznie.')
else
if (rd-rm < d) and (d < rm+rd) then
outtextxy(x-300,y-50,'Okregi przecinajace sie.')
else
if d = (rd-rm) then
outtextxy(x-300,y-50,'Okregi styczne wewnetrznie.')
else
if (x1=x2) and (y1=y2) then
outtextxy(x-300,y-50,'Okregi wspolsrodkowe.')
else
if d < (rd-rm) then
outtextxy(x-300,y-50,'Okregi rozlaczne wewntrznie.');
end;
//------------------------------------------------------------------------
//---------Procedura, kt˘ra pozwala porusza† okr©giem-----------
Procedure ruchomxy;
begin
znak:=readkey;
if znak = #0 then
znak:=readkey;
setcolor(blue);
//zmazanie linii pomocniczej
line(x2,y2,x1,y1);
//zamazanie kroku
outtextxy(300,1,krok2);
//zmazanie odlegoci mi©dzy rodkami okr©g˘w
outtextxy(340,y-50,wynik);
outtextxy(x-300,y-50,'ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ');
outtextxy(x-300,y-40,'ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ');
circle(x2,y2,rm); //zamazanie okr©gu
case znak of
#72 : begin //strzaka do g˘ry
if y2 <= 1 then
y2:=1;
y2:=y2-krok;
setcolor(yellow);
circle(x2,y2,rm);
end;
#75 : begin //strzaka w lewo
if x2 <= 1 then
x2:=1;
x2:=x2-krok;
setcolor(yellow);
circle(x2,y2,rm);
end;
#77 : begin //strzaka w prawo
if x2 >= x then
x2:=x;
x2:=x2+krok;
setcolor(yellow);
circle(x2,y2,rm);
end;
#80 : begin //strzaka w d˘
if y2 >= y then
y2:=y;
y2:=y2+krok;
setcolor(yellow);
circle(x2,y2,rm);
end;
#43 : krok:=krok+1; //zwi©kszenie kroku przesuwania okr©gu
#45 : krok:=krok-1; //zmniejszenie kroku przesuwania okr©gu
#27 : exit;
else
spr_okr;
end;
setcolor(lightblue); //linia pomocnicza mi©dzy rodkami okr©g˘w
setlinestyle(3,0,1);
line(x2,y2,x1,y1);
if krok < 1 then //zabezpieczenie przed zmniejszeniem kroku mniejszego niľ 1
krok:=1
else
if krok > 100 then
krok:=100;
setcolor(red);
str(krok,krok2); //wywietla liczb© krokuouttextxy(300,1,krok2);
outtextxy(300,1,krok2);
end;
//----------------------------------------------------
//-----------Program g˘wny---------------------------
begin
clrscr;
textcolor(red);
writeln('Nacinij ENTER aby rozpoczĄ† grafike..');
readln;
sterownik:=detect;//wykrywamy sterownik karty graficznej
initgraph(sterownik,tryb,''); //inicjacja trybu graficznego
setbkcolor(blue); //kolor ta
cleardevice; //czyszczenie grafiki na ekranie
krok:=1;
x2:=900;
y2:=200;
x1:=200;
y1:=200;
Repeat
x:=getmaxx;
y:=getmaxy;
xs:=x div 2;
ys:=y div 2;
//menu
settextstyle(1,2,1);
setcolor(red);
outtextxy(10,1,' Zmniejsz,zwieksz krok(-,+) : ');
outtextxy(x-200,1,'ESC- Exit.');
osie;
kreski(25,20);
odl_okregow(d);
spr_okr;
ruchomxy;
Until znak=#27;
cleardevice;
closegraph;
clrscr;
textcolor(white);
writeln('Tryb graficzny zamkni©ty!');
writeln('max_x=' ,x,' max_y=' ,y);
writeln;
textcolor(red);
writeln('Nacinij ENTER, aby zakoäczy†...');
readln;
end.