program ob; Uses Crt; const e=0.001; var a,b,a1,b1,xx:real; w:char; procedure menu; begin ClrScr; gotoxy(5,3); writeln (' 1. Метод половинного деления'); gotoxy(5,4); writeln (' 2. Метод простой итерации'); gotoxy(5,5); writeln (' 3. Метод касательных'); gotoxy(5,6); writeln (' 4. Метод хорд'); gotoxy(5,7); writeln (' 5. Комбинированный метод'); gotoxy(5,8); writeln (' ******************************'); gotoxy(5,9); writeln (' Выход - 0'); end; function func(x:real):real; var y:real; begin y:=exp(-x*ln(2))-sin(x); func:=y; end; procedure poldel(var a,b:real); {Метод половинного деления} var p,q,c:real; begin c:=(a+b)/2; p:=func(a); q:=func(c); while abs(b-a)>e do begin if (p*q<0) or (p*q=0) then b:=c else a:=c; c:=(a+b)/2; p:=func(a); q:=func(c); end; writeln ('корень уравнения - ',a:1:3); writeln ('Проверка:',func(a):1:5); delay(3000); clrscr; menu; readln end; procedure m_iter(var a,b:real); {Метод итерации} var x0,x1,pr:real; begin writeln ('введите произвольное число из промежутка [',a:2:0,',',b:2:0,'] '); readln (x0); x1:=x0+(0.3*func(x0)); while abs(x1-x0)>e do begin x0:=x1; x1:=x0+(0.3*func(x0)); end; writeln ('корень уравнения равен ',x0:1:3); writeln ('Проверка:',func(x0):1:5); delay(3000); clrscr; menu; readln end; procedure m_kas(var a,b:real); {Метод касательных} var x1,x0,y:real; begin writeln('введите х0 из [',a:2:0,',',b:2:0,']'); readln(x0); x1:=x0-(func(x0)/(-exp(-x0*(ln(2)))*ln(2)-cos(x0))); while abs(x1-x0)>e do begin x0:=x1; x1:=x0-(func(x0)/(-exp(-x0*(ln(2)))*ln(2)-cos(x0))); end; writeln('Корень уравнения - x=',x1:3:3); writeln ('Проверка:',func(x1):1:5); delay(3000); clrscr; menu; readln end; procedure m_hord(var a,b:real); {Метод хорд} var x1,x0,y,nt:real; begin {writeln ('Если необходимо изменить функцию, войдите в программу');} writeln('введите х0 из [',a:2:0,',',b:2:0,']'); readln(x0); if ((func(b)<0) and (exp(-b*(-ln(2)))*sqr(ln(2))+sin(b)<0)) or ((func(b)>0) and (exp(-b*(-ln(2)))*sqr(ln(2))+sin(b)<0)) then begin x1:=x0-(func(x0)*(b-x0))/(func(b)-func(x0)); while abs(x1-x0)>e do begin x0:=x1; x1:=x0-(func(x0)*(b-x0))/(func(b)-func(x0)); end end else begin x1:=a-(func(a)*(x0-a))/(func(x0)-func(a)); while abs(x1-x0)>e do begin x0:=x1; x1:=a-(func(a)*(x0-a))/(func(x0)-func(a)); end end; writeln('Корень уравнения - x=',x1:3:3); writeln ('Проверка:',func(x1):1:5); delay(3000); clrscr; menu; readln end; procedure m_komb(var a,b:real); var x1,x0,y,nt:real; begin writeln('введите х0 из [',a:2:0,',',b:2:0,']'); readln(x0); if ((func(b)<0) and (exp(-b*(-ln(2)))*sqr(ln(2))+sin(b)<0)) or ((func(b)>0) and (exp(-b*(-ln(2)))*sqr(ln(2))+sin(b)<0)) then begin x1:=x0-(func(x0)*(b-x0))/(func(b)-func(x0)); while abs(x1-x0)>e do begin x0:=x1; x1:=x0-(func(x0)*(b-x0))/(func(b)-func(x0)); x0:=x1; x1:=x0-(func(x0)/(-exp(-x0*(ln(2)))*ln(2)-cos(x0))); end end else begin x1:=a-(func(a)*(x0-a))/(func(x0)-func(a)); while abs(x1-x0)>e do begin x0:=x1; x1:=a-(func(a)*(x0-a))/(func(x0)-func(a)); x0:=x1; x1:=x0-(func(x0)/(-exp(-x0*(ln(2)))*ln(2)-cos(x0))); end end; writeln('Корень уравнения - x=',x1:3:3); writeln ('Проверка:',func(x1):1:5); delay(3000); clrscr; menu; readln end; begin clrscr; writeln ('введите концы промежутка:'); readln (a1); readln(b1); clrscr; menu; w:=readkey; while w<>'0' do begin case w of '1':poldel(a1,b1); '2':m_iter(a1,b1); '3':m_kas(a1,b1); '4':m_hord(a1,b1); '5':m_komb(a1,b1); end; delay(2000); w:=readkey; end; readln end.