![]() |
|
#1
|
|||
|
|||
![]() Обращаюсь к функции 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, 15.05.2009 в 17:12. |
#2
|
|||
|
|||
![]() Это весь код? o_O
Тут повиснуть не на чем... |
#3
|
|||
|
|||
![]() Код:
//расчет потерь в КУ 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
|
|||
|
|||
![]() У вас условие завершение цикла может никогда не выполниться, если изначально L < Lk. В теле цикла эти переменные вообще не изменяются!.. Или покажите мне, где??
|
#5
|
|||
|
|||
![]() Почему L > Lk. ?????
У меня написано While l<=Lk do Я задаю в Эдитах Lk и Ln, в пределах этих значениях L и меняется |
#6
|
|||
|
|||
![]() Ksully, у вас бесконечный цикл! Чтобы цикл когда-нибудь все-таки завершился, необходимо, чтобы выполнилось условие L > Lk...
Цитата:
|