Function SolveX(a,b,c:real; var x1,x2:real):integer; { Возвращает: -1 - нет вещественных корней 0 - один корень х1 1 - два корня х1,х2 } var D:real; begin D:=b*b-4*a*c; if D<0 then SolveX:=-1 else if D=0 then begin x1:=(1+b*c0)/(2*c); if x1=b then SolveX:=-1 else SolveX:=0 end else begin D:=sqrt(D); x1:=(1+b*c-D)/(2*c); x2:=(1+b*c+D)/(2*c); if x1=b then begin SolveX:=0; x1:=x2 end else if x2=b then SolveX:=0 else SolceX:=1 end end;
Во-первых, не whill, а while. Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу. Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.
{
Возвращает:
-1 - нет вещественных корней
0 - один корень х1
1 - два корня х1,х2
}
var D:real;
begin
D:=b*b-4*a*c;
if D<0 then SolveX:=-1
else
if D=0 then begin
x1:=(1+b*c0)/(2*c);
if x1=b then SolveX:=-1 else SolveX:=0
end
else begin
D:=sqrt(D);
x1:=(1+b*c-D)/(2*c);
x2:=(1+b*c+D)/(2*c);
if x1=b then begin SolveX:=0; x1:=x2 end
else
if x2=b then SolveX:=0
else SolceX:=1
end
end;
Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу.
Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.