Zaokrąglenie do dwóch miejsc 7.0034234E+002 nie używając liczba:0:

0

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.
 
0
  Str(d:0:2,wynik);

to jest bardzo dobry sposób i nie ma prawa "nie działać", cokolwiek by to znaczyło.

0

Dzięki wielkie;P Bym na to nigdy nie wpadł;P

0

A co mogę zmienić....w kodzie? Chodzi mi dokładnie o to,że gdy okręgi są na tej samej wysokości i są, np. styczne zewnętrznie to program działa prawidłowo i pokazuje, że są styczne zewnętrznie, lecz gdy nie są na tej samej wysokości, a są styczne to komunikat się nie pokazuje...wyświetla się od razu, że się przecinają... Co jest nie tak...??

1 użytkowników online, w tym zalogowanych: 0, gości: 1