![]() |
|
#1
|
|||
|
|||
![]() Написал две программы, обе не работают Подскажите пожалуйста в чем ошибка
![]() Первая: Код:
var a1,a2,a3,b1,b2,b3,x,y; Begin a1:=StrToFloat(Edit1.Text); a2:=StrToFloat(Edit2.Text); a3:=StrToFloat(Edit3.Text); b1:=StrToFloat(Edit4.Text); b2:=StrToFloat(Edit5.Text); b3:=StrToFloat(Edit6.Text); if (sqrt(sqr(b1-a1)=sqr(b2-a2))=sqr(b3-a3)then Edit9.Text:= 'коллениарны' else Edit9.Text:= 'не коллениарны' if sqrt(sqr(a1)+sqr(a2)+sqr(a3)>sqrt(sqr(b1)+sqr(b2)+sqr(b3) then Bebin Edit7.Text:= 'A>B'; x:=sqrt(sqr(a1)+sqr(a2)+sqr(a3)/sqrt(sqr(b1)+sqr(b2)+sqr(b3); end; else if sqrt(sqr(a1)+sqr(a2)+sqr(a3)<sqrt(sqr(b1)+sqr(b2)+sqr(b3) then Edit9.Text:= 'A<B' y:=sqrt(sqr(b1)+sqrt(sqr(b2)+sqrt(sqr(b3) /sqrt(sqr(a1+sqr(a2)+sqrt(sqr(a3); else Edit9.Text:= 'A=B' if(a1=b1)and(a2=b2)and(a3=b3) then Edit9.Text:='одинак.напр.' else Edit9.Text:='против.напр.' End. и вторая: Var K,L,j,i: integer Y:array[1..10,1..10] of real; X:array[10..10] of real; Begin L:=StrToint(Edit1.Text); K:=StrToint(Edit2.Text); StringGrid1.ColCount:=k+1 StringGrid1.RoWCount:=1 StringGrid2.ColCount:=k+1 StringGrid2.RowVount:=1 For j:=1 to K do StringGrid1.Cells[o,j]:=intToStr(j); For i=1 to L do StringGrid1.Cells[i,o]:=intToStr(i); For j:=1 to K do For i=1 to L do y[j;i]:=strtoFloat(StringGrid1.Cells[j;i]; For i:=1 to L do Begin X[i]=0; For j:=1 to K do X[j]:=X[i]+y[j;i]; end. StringGrid2.Visible:=True; For i=1 to L do StringGrid2.Cells[j,o]:=FloattoStr(x[i]); End. Последний раз редактировалось Admin, 09.06.2010 в 16:47. |
#2
|
|||
|
|||
![]() Первая здесь:
Код:
if (sqrt(sqr(b1-a1)=sqr(b2-a2))=sqr(b3-a3)then Код:
if (sqrt(sqr(b1-a1)-sqr(b2-a2))=sqr(b3-a3)then Во второй - индексы в гриде начинаются с 0. |
#3
|
|||
|
|||
![]() Код:
var a1,a2,a3,b1,b2,b3,x,y; Код:
if sqrt(sqr(a1)+sqr(a2)+sqr(a3)>sqrt(sqr(b1)+sqr(b2)+sqr(b3) then и тут: Код:
x:=sqrt(sqr(a1)+sqr(a2)+sqr(a3)/sqrt(sqr(b1)+sqr(b2)+sqr(b3); Код:
y:=sqrt(sqr(b1)+sqrt(sqr(b2)+sqrt(sqr(b3) /sqrt(sqr(a1+sqr(a2)+sqrt(sqr(a3); Код:
For j:=1 to K do StringGrid1.Cells[o,j]:=intToStr(j); For i=1 to L do StringGrid1.Cells[i,o]:=intToStr(i); Переменную о опишите и присвойте |
#4
|
|||
|
|||
![]() Спасибо сейчас исправим
|
#5
|
|||
|
|||
![]() Код:
procedure TForm1.N2Click(Sender: TObject); Var x,y,h,a,b:real; Cod :integer; str1,str2:string; begin Memo1.Lines.Add(' X F(X)'); Val(Edit1.Text, a, cod); Val(Edit2.Text, b, cod); Val(Edit3.Text, h, cod); x:=a; while x<=b+h/2 do begin {Str2:=Edit4.Text; } y:=(x/(x+6))+(sqrt(x-4)); Str(x:8:2,str1); Str(x:8:3,str2); if CheckBox1.Checked then Memo1.Lines.Add(Str1+str2); x:=x+h; end end; Project Project1.EXE raised exception class EInvalidOp with message 'Invalid floating point operation'. Process stopped. Use Step or Run to continue. Выделяет эту формулу: y:=(x/(x+6))+(sqrt(x-4)); |
#6
|
||||
|
||||
![]() Цитата:
Посмотреть в отладчике, что в переменной X. |
#7
|
|||
|
|||
![]() Цитата:
![]() Данные от 1 до 3 А как его запустить? И удаляешь (-4) все работает нормально! А при данных от 10 до 30 табулюе |
#8
|
||||
|
||||
![]() SQRT не работает с отрицательными значениями
|
#9
|
|||
|
|||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Цитата:
Можно, например, проверять значение X: Код:
if x >= 4 then y := (x/(x+6)) + (sqrt(x-4)) else // тут что- то сделать, если Х - 4 < 0 |
#11
|
|||
|
|||
![]() Нашел решение!
Код:
procedure TForm1.N2Click(Sender: TObject); Var x,y,h,a,b,z,t:real; Cod :integer; str1,str2:string; begin Memo1.Lines.Add(' X F(X)'); Val(Edit1.Text, a, cod); Val(Edit2.Text, b, cod); Val(Edit3.Text, h, cod); t := StrToFloat(Edit3.Text);//це дописав x:=a; while x<=b+t/2 do begin y := (x/(x+6)) + (sqrt(x-4));//Формула Str(x:8:2,str1); Str(x:8:3,str2); if CheckBox1.Checked then Memo1.Lines.Add(Str1+str2); x:=x+h; if CheckBox2.Checked then begin FileName:='C:\test.txt'; Memo1.Lines.SaveToFile(FileName); end; end; |