Найти интервал корня графически и уточнить его - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Задача 1. Для уравнения F(X)=0 определить интервал изоляции графически и сравнить его с заданным интервалом [ a , b ] . Уточнить корень уравнения методом половинного деления с заданной точностью e . lnX= 2 - X, точность e 10-3, интервал [ 1 , 2 ]

Решение задачи: «Найти интервал корня графически и уточнить его»

textual
Листинг программы
uses graph;
const
x1=-0;{начало и конец графика в реальных значениях}
x2=4;
a=1;{заданный интервал}
b=2;
e=0.001;{точность}
function F(x:real):real;
begin
F:=ln(x)-2+x;
end;
function Root(a,b,e:real):real;
var c:real;
begin
repeat
 c:=(a+b)/2;
 if F(a)*F(c)<=0 then b:=c
 else a:=c;
until b-a<e;
Root:=(a+b)/2;
end;
var mx,my,x,a1,b1:real;
    x0,y0,i,k:integer;
    s,s1,s2:string;
begin
initgraph(x0,y0,'');
x0:=50;{начало координат в центре экрана}
y0:=getmaxY div 2;
{коэффициенты по осям для перевода реальных координат в экранные}
mx:=(getmaxX-x0-20)/x2;
my:=(y0-20)/F(x2);
line(x0,y0,getmaxX,y0); {ось Х}
line(x0,getmaxy,x0,0); {ось У}
for i:=1 to trunc(x2) do   {максимальное количество засечек в одну сторону}
 begin
  line(x0-3,y0-round(i*my),x0+3,y0-round(i*my));{засечки на оси У}
  line(x0-3,y0+round(i*my),x0+3,y0+round(i*my));
  line(x0+round(i*mx),y0+3,x0+round(i*mx),y0-3); {засечки на оси Х}
  {подпись оси У}
  str(i,s);
  outtextXY(x0-30,y0-round(i*my),s);{соответственно засечкам}
  outtextXY(x0-35,y0+round(i*my),'-'+s);
  {подпись оси Х}
  outtextXY(x0+round(i*mx),y0+10,s);
 end;
{центр}
outtextXY(x0+5,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0+10,10,'Y');
{график}
x:=x1;
while x<=x2 do
 begin
  if x>0 then putpixel(x0+round(x*mx),y0-round(F(x)*my),12);
  x:=x+e; {наращиваем х}
 end;
{корни, интервалы выделены графически}
setcolor(2);
x:=x1;
while x<=x2-1 do
 begin
  if (x>0)and(F(x)*F(x+1)<0) then
   begin
    str(x:2:0,s);
    str(x+1:2:0,s1);
    a1:=x;
    b1:=x+1;
    str(Root(x,x+1,e):6:3,s2);
    outtextXY(x0+100,50,'interval ['+s+';'+s1+'] x'+'='+s2);
   end;
  x:=x+1;
 end;
{заголовок}
setcolor(12);
outtextXY(x0+100,30,'Grafik functii F=ln(x)-2+x)');
if(abs(a-a1)<e)and(abs(b-b1)<e)then
outtextXY(x0+100,70,'Interval sovpadaet s zadannym')
else outtextXY(x0+100,70,'Interval ne sovpadaet s zadannym');
readln
end.

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

  1. В начале кода объявляются переменные и функции, которые будут использоваться в дальнейшем.
  2. Затем происходит инициализация графического интерфейса с помощью функции initgraph.
  3. Определяются начальные координаты x0, y0, а также коэффициенты mx и my для перевода реальных координат в экранные.
  4. Далее идет цикл, который рисует засечки на оси У и Х, подписывает оси и выводит значения интервалов.
  5. Затем идет центральный участок графика с подписями осей и значениями интервалов.
  6. После этого происходит проверка на нахождение корней интервала (x>0 и F(x)*F(x+1)<0) и, если это условие выполняется, то выводится значение интервала и сам корень.
  7. Завершается код выводом заголовка графика и выводом сообщения о том, совпадает ли интервал с заданным или нет.
  8. В конце происходит чтение пользовательского ввода с помощью функции readln.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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