уравнение

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
pikass
Сообщения: 14
Зарегистрирован: 23 янв 2006, 02:21

Дано уравнение . На форме 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;
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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) ВСЕГДА остается истинным.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

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

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