Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.05.2009, 17:04
Ksully Ksully вне форума
Прохожий
 
Регистрация: 17.04.2009
Сообщения: 23
Репутация: 10
По умолчанию модуль Math

Обращаюсь к функции Power, когда в запущенной программе нажимаю расчет, компьютер долго думает, а потом выдает "Out of memory"
С чем это может быть связано???
Компютер не совсем старый
Код:
 begin
       w:=l/(3600*a*b);
       Reky:=(w*dtr)/v;
       aa:=1/Reky;
       tt:=0.2/(sqr(fi));
       yy:=fi-0.94;
       bb:=Power(aa,0.2);
       if fi<1 then
       begin
       cc:=0;
       dd:=0 ;
       end
       else
      begin
       cc:=Power(yy,(-0.59));
       dd:=Power(aa,tt);
      end;
Admin: Где теги?

Последний раз редактировалось Admin, 15.05.2009 в 17:12.
Ответить с цитированием
  #2  
Старый 15.05.2009, 17:30
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Это весь код? o_O
Тут повиснуть не на чем...
Ответить с цитированием
  #3  
Старый 15.05.2009, 17:32
Ksully Ksully вне форума
Прохожий
 
Регистрация: 17.04.2009
Сообщения: 23
Репутация: 10
По умолчанию

Код:
//расчет потерь в КУ
procedure TForm3.Button2Click(Sender: TObject);

var
 w,L,sher,v,t,tst,dl,p,rr,yy,Ptr,a,b,d,lamda,Re,Reky,tt,ksi:real;
 k,i,j,z:integer;
 aa,bb,cc,dd:real;
begin

  v:=strtofloat(Form1.StringGrid2.Cells[1,1]);
  p:= strtofloat(Form1.StringGrid2.Cells[1,2]);
   a:=strtofloat(Form1.StringGrid1.Cells[1,5]);
  b:=strtofloat(Form1.StringGrid1.Cells[1,6]);
 for z := 0 to StringGrid2.RowCount - 1 do
    StringGrid2.Rows[z].Clear();
      Ln:=StrToFloat(Form1.Edit1.Text);
      Lk:=StrToFloat(Form1.Edit3.Text);
      Step:=StrToFloat(Form1.Edit5.Text);
      L:=Ln;
      i:=1;
      k:=0;

 While l<=Lk do
   begin

       w:=l/(3600*a*b);
       Reky:=(w*dtr)/v;
       aa:=1/Reky;
       tt:=0.2/(sqr(fi));
       yy:=fi-0.94;
       bb:=Power(aa,2/10);
       if fi<1 then
       begin
       cc:=0;
       dd:=0 ;
       end
       else
      begin
       cc:=Power(yy,(-59/100));
       dd:=Power(aa,tt);
      end;

       begin
       //расчет для КУ
       //пароперегреватель
       if (sigma1<=sigma2) and (fi>=0.06) and (fi<=1) then
        ksi:=2*(1/(sqrt(sigma1-1)))*bb*Zparo
     else
       if (sigma1>sigma2) and (fi>1) and (fi<=8) then
        ksi:=0.38*(1/(sqrt(sigma1-1)))*cc*dd*Zparo
     else
       if (sigma1>sigma2) and (fi>8) and (fi<=15) then
         ksi:=0.118*(1/(sqrt(sigma1-1)))*Zparo;
     // end;
     Form3.StringGrid2.Cells[0,0]:='Re';
     Form3.StringGrid2.Cells[1,0]:='Коэф сопр паропер';
     Form3.StringGrid2.Cells[0,i]:=FloatToStr(Reky);
     Form3.StringGrid2.Cells[1,i]:=FloatToStr(ksi);
  i:=i+1;
  W:=W+step;
  k:=k+1;
  end;  end;
  Form3.StringGrid2.RowCount:=k+1;
end;

Вот вся процедура, при нажатии на баттон зависает

Последний раз редактировалось Ksully, 15.05.2009 в 17:41.
Ответить с цитированием
  #4  
Старый 15.05.2009, 17:40
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

У вас условие завершение цикла может никогда не выполниться, если изначально L < Lk. В теле цикла эти переменные вообще не изменяются!.. Или покажите мне, где??
Ответить с цитированием
  #5  
Старый 15.05.2009, 17:46
Ksully Ksully вне форума
Прохожий
 
Регистрация: 17.04.2009
Сообщения: 23
Репутация: 10
По умолчанию

Почему L > Lk. ?????
У меня написано While l<=Lk do
Я задаю в Эдитах Lk и Ln, в пределах этих значениях L и меняется
Ответить с цитированием
  #6  
Старый 15.05.2009, 17:51
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Ksully, у вас бесконечный цикл! Чтобы цикл когда-нибудь все-таки завершился, необходимо, чтобы выполнилось условие L > Lk...
Цитата:
Сообщение от Ksully
Код:
While l<=Lk do
Но ни та, ни другая переменная в цикле никак не модифицируются. Соответственно, однажды войдя в цикл, вы не выйдете из него. Отсюда ошибка.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:28.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025