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