Czy to możliwe, że pascal źle liczy?




leonpar18.11.2006 20:34:56
#
Dołączył: 18.11.2006
procedure F_licz;
var
y,x,h,dlugosc:integer;
Xc,Yc,poleC,polePoj,Sx,Sy,Ix,Iy:real;
Mxc:real;
Myc:real;
komunikat,s,load:string;
plik: text;
begin
schowajMyche;
 y:=20;
 dlugosc:=0;
 Sx:=0;
 Sy:=0;
 poleC:=0;
 polePoj:=0;
 Ix:=0;
 Iy:=0;
 Mxc:=0;
 Myc:=0;
 h:=1;{wysokosc prostokat i skok}
 outTextXY(230,getMaxY-15,'#LICZ!!!#');
 repeat

  for x:=0 to (getMaxX-10) do
  begin

   if getPixel(x,y)=green then   {jezeli natrafilismy na obszar przemiotu}
   begin
    while getPixel(x,y)=green do
    begin
    { putPixel(x,y+1,1);   {rysowanie lini podzialu}
     putPixel(x,y,3);
     dlugosc:=dlugosc+1;
     x:=x+1;
    end;

    Xc:=x-1-( dlugosc/2 ) ; {srodek ciezkosci}
    Yc:=(y-0.5);
    polePoj:=(dlugosc)*h;  {dlugosc*h powierzchnia pojedynczego prost}
    Sx:=Sx+ Yc * polePoj; {Sx,Sy to momety statyczne}
    Sy:=Sy+ Xc * polePoj;
    poleC:=poleC+polePoj; {pole calkowite figury}
    Ix:=Ix+( dlugosc*h*h*h /(12) )+( sqr(Yc)*polePoj );{momet bezwladnosci wzgledem x}
    Iy:=Iy+( h*sqr(dlugosc)*dlugosc /(12) )+( sqr(Xc)*polePoj );{/5 i /25 przescie na milimetry}
   end;
   dlugosc:=0; {zerowanie podstawy prost. przed liczeniem nastepnego}
   polePoj:=0;
  end;
  {-----------------------------------------}
  if (y mod 20 )=0 then {wyswietlanie ladowania}
   begin
    load:=load+'|';
    outTextXY(310,getMaxY-15,load);
   end;
 {------------------------------}
  y:=y+h;   {skok ,wysokosc prostokata}
 until y>(getMaxY-20); {wyjscie z petli sprawdzajacej}

 assign(plik,'c:/obserwuj1.txt');
 rewrite(plik);

 Xc:=Sy/poleC;  {srodek ciezkosci w pixelach}
 Yc:=Sx/poleC;
 Mxc:=0;
 Myc:=0;
 Mxc:=Ix- Yc*Yc*poleC ;  {momenty bezwladnoasci centralne}
 Myc:=Iy- Xc*Xc*poleC ;  {tw. steinera}
 {Ixc:=Ixc/625;   {przejscie na milimetry^4}
 {Iyc:=Iyc/625;   }
{ str(Xc/5:3:3,s); {Xc/5 przejscie na milimetry}
{ komunikat:='Xc='+s+' Yc=';
 str(Yc/5:3:3,s);
 komunikat:=komunikat+s;
 outTextXY(40,30,komunikat);
 str(Ixc^:9:3,s);
 komunikat:='Ixc='+s+' Iyc=';  {laczenie numerycznego z stringiem}
 {str(Iyc^:9:3,s);
 komunikat:=komunikat+s;
 outTextXY(40,40,komunikat); }
 setColor(12);
 circle(round(Xc),round(Yc),2);   {rysowanie srodka}
 wybur:=pusty;
 pokazMyche;
 {-------------------------------}
 setColor(blue);               {mazanie loadera i komunikatu}
 outTextXY(310,getMaxY-15,load);
 outTextXY(230,getMaxY-15,'#LICZ!!!#');
 {---------------------------------------}
 writeln(plik,'xc ',xc:9:3);
 writeln(plik,'yc ',yc:9:3);
 writeln(plik,'ix ',ix:9:3);
 writeln(plik,'iy ',iy:9:3);
 writeln(plik,'ixc ',Mxc:9:3);
 writeln(plik,'iyc ',Myc:9:3);
 writeln(plik,'pole cal ',poleC:8:3);
 close(plik);
end;
{*************************************}

Nie moge rozgrysc przyczyny dlaczego w fragmencie gdzie sa liczone centralne momenty bezwladnosci moment Myc wychodzi ujemny choc nie powinien bo oba mimenty powinny byc tego samego rzedu czyli dodatni. wychodzi nato ze program wykonuje obliczenia w ten oto sposób np.: wyniki: xc 265.500 yc 260.500 ix 333671249.670 iy 344606930.330 Mxc 1902487.417 Myc -19901.916 pole cal 4889.000 czyli -19901.916= 344606930.330- 260.500^2*4889.000 co jest kompletną bzdurą. Zapomoc dziekuje!!!

lukaszmaster26.11.2006 17:36:22
#
Dołączył: 16.09.2006
Postów: 119

prawie godzine sprawdzalem twoje dzielo i nic nie znalazlem co by nie pasowalo. Pascal zapewne liczy dobrze to moze nam cos umkneło? Do prawdy nie wiem




Kontakt

Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

O Nas

Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

Bądź w kontakcie

Panel użytkownika

Zaloguj się do panelu użytkownika.
Nie masz konta? Zarejestruj się!
Zapomniałeś hasła?
Serwis binboy.org stosuje pliki cookie. Korzystając z serwisu zgadzasz się na ich przyjmowanie w Twoim urządzeniu końcowym. Dowiedz się więcej lub Zamknij to okno