Как сделать, чтобы выводились несколько корней, а не один? - 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.

Объяснение кода листинга программы

  1. Объявляются переменные: a, b, h, a1, b1, delta, x, c:real; k:integer;
  2. Выводится строка ' '
  3. Присваиваются значения переменным: a:=-5; b:=5; h:=0.5; delta:=0.001; x:=a; k:=0;
  4. Задается условие для цикла while: x+h<=b
  5. Внутри цикла while выполняется проверка условия f(x)*f(x+h)<=0. Если условие истинно, то выполняется вывод строки 'Интервал [',x:4:1,';',x+h:4:1,'] '. После вывода строки увеличивается значение переменной k и присваиваются значения переменным a1:=x и b1:=x+h.
  6. Задается условие для цикла 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.
  7. Значение переменной x увеличивается на значение переменной h.
  8. Цикл while повторяется, пока условие x+h<=b выполняется.

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы