Как сделать, чтобы выводились несколько корней, а не один? - Pascal ABC
Формулировка задачи:
Решение задачи: «Как сделать, чтобы выводились несколько корней, а не один?»
textual
Листинг программы
var a,b,h,a1,b1,delta,x,c:real;
k:integer;
begin
writeln(' ');
a:=-5;
b:=5;
h:=0.5;
delta:=0.001;
x:=a;
k:=0;
while x+h<=b do
begin
if f(x)*f(x+h)<=0 then
begin
write('Интервал [',x:4:1,';',x+h:4:1,'] ');
inc(k);
a1:=x;
b1:=x+h;
while abs(b1-a1)>delta do
begin
c:=(a1+b1)/2;
if f(a1)*f(c)<=0 then b1:=c else a1:=c;
end;
writeln('x',k,'=',(a1+b1)/2:6:3);
end;
x:=x+h;
end;
end.
Объяснение кода листинга программы
- Объявляются переменные: a, b, h, a1, b1, delta, x, c:real; k:integer;
- Выводится строка ' '
- Присваиваются значения переменным: a:=-5; b:=5; h:=0.5; delta:=0.001; x:=a; k:=0;
- Задается условие для цикла while: x+h<=b
- Внутри цикла while выполняется проверка условия f(x)*f(x+h)<=0. Если условие истинно, то выполняется вывод строки 'Интервал [',x:4:1,';',x+h:4:1,'] '. После вывода строки увеличивается значение переменной k и присваиваются значения переменным a1:=x и b1:=x+h.
- Задается условие для цикла while: abs(b1-a1)>delta. Если условие истинно, то выполняется вывод строки 'x',k,'=',(a1+b1)/2:6:3. После вывода строки значение переменной k увеличивается на единицу. Если условие не выполняется, то значение переменной a1 присваивается значению переменной c, которое вычисляется как (a1+b1)/2. Значение переменной b1 затем присваивается значению переменной c, если f(a1)*f(c)<=0, в противном случае значение переменной a1 присваивается значению переменной c.
- Значение переменной x увеличивается на значение переменной h.
- Цикл while повторяется, пока условие x+h<=b выполняется.