Форум «Всё о Паскале» _ Алгоритмы _ Помогите найти ошибку в коде
Автор: nowichok9 4.02.2011 13:08
Помогите найти ошибку
Код
program algebra23; var a,b,c,d,i,e,f: integer; begin writeln('видите a b c'); readln(a, b, c); writeln; for i:= -10 to 10 do begin e:=a*sqr(i)+b*i+c; write(' (',i,';',e,')'); end; write('нахождение дискриминанта'); D:= sqr(b)-(4*a*b); writeln; writeln('дискриминант = ',d); writeln('x1=',-b,'+',sqrt(d),' / ',2*a,' = ',(-b+sqrt(d))/(2*a),' '); {ошибка 207: ошибочная операция с плавающей точкой} writeln('x2 = ',-b*-1,'-',sqrt(d),' / ',2*a,' = ',(b*-1-sqrt(d))/(2*a)); readln; end.
если дискриминант = 0 то выполняется чувствую какая то простая ошибка а понять в чём не могу
Автор: TarasBer 4.02.2011 13:11
Если дискриминант меньше нуля, то облом наступает при попытке извлечь квадратный корень из отрицательного числа. Если равен, то ничего происходить не должно. Ещё облом - если a=0 - тогда деление нуля на ноль будет.
Автор: nowichok9 4.02.2011 13:18
Спасибо тогда как сделать что бы программа не завершалась
Добавлено через 7 мин. всё догадался попробую через метки
Автор: TarasBer 4.02.2011 13:31
Зачем метки?!
if d>= 0 then begin writeln; writeln('дискриминант = ',d); writeln('x1=',-b,'+',sqrt(d),' / ',2*a,' = ',(-b+sqrt(d))/(2*a),' '); writeln('x2 = ',-b*-1,'-',sqrt(d),' / ',2*a,' = ',(b*-1-sqrt(d))/(2*a)); end else begin writeln('дискрииминант меньшу нуля, решений нет'); end;
Автор: Lapp 5.02.2011 4:57
Цитата(TarasBer @ 4.02.2011 13:31)
Зачем метки?!
хи-хи )) Тарас настолько испугался, что сразу выложил код )) страааашный GOTO
Автор: TarasB 5.02.2011 12:13
Lapp, тут тогда нужна картинка не с демоном, а с велоцераптором.
Автор: TarasBer 3.06.2011 13:19
Автор: Lapp 3.06.2011 22:48
Цитата(TarasB @ 5.02.2011 13:13)
Lapp, тут тогда нужна картинка не с демоном, а с велоцераптором.
Спасибо. А то я все ломал голову, что за зверь такой (про WD знаю, и даже использую)).