1 Востаннє редагувалося vk.win32 (15.11.2012 21:30:39)

Тема: в чему помилка?

глобал:

var
h,//Висота
  Vob,//Об'єм
  v,  //швидкість
  pr,//густина речовини
  pt,//Густина тіла
  Cop,//коефіціент опору повітря
  Cf, //коефіціє опору води
  Spl, //площа
  Ft,  //сила тяжіння
  Fa  //сила архімеда
  :real;
  ma,   //масса
  a,b,c   //сторони
  :integer;
  Mas:string;
  const
  g=9.8;
  dt=0.01;
  m=100;

головні данні

procedure TForm1.Button1Click(Sender: TObject);
begin
h:=5;                  
v:=0;
Mas:=(edit1.Text);                 
ma:=Strtoint(mas);
Timer1.Enabled :=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Ft:=ma*g;
Fa:=Pr*g*Vob;
v:=sqrt(2*g*h)*cop;
h:=h-v*dt;
if h<=2 then
   begin
          If Pt<Pr then
          begin
          v:=((ma*g)*(Pr/Pt-1));
              if h<=1 then
              begin
              v:=-(SQRT(2*Vob*g*(Pr-Pt)/(Cf*Pr*Spl)));//тут помилка, тіло не змінює напрямок на протилежний
                if h>=2 then timer1.Enabled:=false;
              end;
          end;
          
    end;
if h<=0.4 then Timer1.Enabled :=false;
Shape1.Top:=Panel1.ClientHeight-round(h*m);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.Text = 'Вода' then Pr:=1000;  
if ComboBox1.Text = 'Спирт' then Pr:=785;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
if ComboBox2.Text = 'Дуб' then Pt:=700;
if ComboBox2.Text = 'Дерево' then Pt:=450;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
var
r:real;
begin
  if ComboBox3.Text = 'Куб' then
    begin
    a:=40; b:=40;
    Shape1.Shape:=stRectangle;
    Shape1.Width:=a;
    Shape1.Height:=b;
    Cop:=1.11;
    Cf:=1.05;
    Spl:=6*sqr(a)*a;
    Vob:=sqr(a)*a*(ma/Pt);       
    end;
if ComboBox3.Text = 'Сфера' then
  begin
  a:=40; b:=40;
  Shape1.Shape:=stEllipse;
  Shape1.Width:=a;
  Shape1.Height:=b;
  Cop:=0.4;
  Cf:=0.47;
  r:=a/2;
  Spl:=4*3.14*sqr(r);
  Vob:=(4/3)*3.14*sqr(r)*r;
  end;
end;

Як ви бачите на формі Panel1, a в ній Shape1. На формі також таймер, 3 комбо бокса та едіт))
Допоможіть...

2

Re: в чему помилка?

У вас висота h завжди рахується за швидкістю з 13-го рядка, а не 22-го.
Спробуйте опустити 14-й рядок нижче 27-го, або підняти вище 13-го (відповідно тоді початкове значення v потрібно буде обрахувати раніше).

Крім того, в рядку 23 ніколи не буде true, бо уже h<=1 (рядок 20).