Страница 1 из 1

уравнение

Добавлено: 26 фев 2006, 00:15
pikass
Дано уравнение . На форме 3 Edita, Memo и 1 кнопка для выполнения.
В 1 Edite задается начальное значение x, во втором конечное, а в третьем вводится шаг вычислений. Ну это все просто, все выводится. А когда устанавливаю например шаг h=0, то
программа зацикливается. Там нужен обработчик 0, я его по всякому делал , но все не то. Может кто подскажет как.
Вот код программы (без обработчика):

procedure TForm1.Calc1Click(Sender: TObject);
var y,x,h,xn,xk,m:single;
s,s1:string;
begin
xn:=strtofloat(Edit1.Text);
xk:=strtofloat(Edit2.Text);
if xn>xk then
begin
m:=xn;
xn:=xk;
xk:=m;
end;
h:=strtofloat(Edit3.Text);
x:=xn;


while x<=xk do
begin
y:=(5*x*x*x*x)-(3*x*x*x)+(15*x*x)-4;
memo1.Lines.Add(' arg '+ floattostrf(x,fffixed,3,2)+ ' func ' +floattostrf(y,fffixed,3,2));
x:=x+h;

end;

Re: уравнение

Добавлено: 26 фев 2006, 09:52
BBB
pikass писал(а): .........
А когда устанавливаю например шаг h=0, то
программа зацикливается.
..............
Ну а как она не зациклится, если написано:

while x<=xk do
begin
y:=(5*x*x*x*x)-(3*x*x*x)+(15*x*x)-4]
x:=x+h;
end;

У тебя счетчик цикла (т.е. x) в случае (h = 0) никак не изменяется. Соответственно, условие цикла (x<=xk) ВСЕГДА остается истинным.

Добавлено: 26 фев 2006, 10:47
Игорь Акопян
1. при входе в процедуру проверить значение на 0, если да - выйти с ошибкой
2. вместо Edit использовать MaskEdit, курить доку про ValidateEdit (как-то так)
3. (я бы сделал) Кнопку привязать к Action, у которого и проверять ненулевое значение в едите

ЗЫ. Используйте тэг CODE для вставки исходника!