Сапунов Павел
Метод 0,5

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Links
Кожевенное мастерство: сумки, ремни своими руками
 Ваша оценка:


 Метод половинного деления - это один из самых простейших и самых надёжных методов решения уравнений.
 Обычно метод половинного деления в программах реализуют следующим образом:
 
 
 
 { Листинг 1.1 Turbo Pascal }
 uses crt;
 
 function f(x:real):real;
 begin f:=x*x-16; end;
 
 var
  dx,x,y,a,b, ya,yb :real;
 Begin clrscr;
  dx:=0.1; a:=1; b:=11;
 repeat
  ya:=f(a); yb:=f(b);
  x:=(a+b)/2;
  y:=f(x);
  if y*ya>0 then a:=x;
  if y*yb>0 then b:=x;
  if y=0 then
  begin a:=x; b:=x; end;
 until b-a 
 writeln(' x=',x:12:3, ' y=',y:7:3);
 
 readln;
 end.
 
 
 
 Но если поставить задачу написать тот же метод без оператора IF, то это можно сделать так:
 
 
 { Листинг 2.1 Turbo Pascal }
 uses crt;
 
 function f(x:real):real;
 begin f:=x*x-16; end;
 
 function sign(x:real):integer;
 begin
  if x>0 then sign:=1; { этот "иф" не считается, то есть мы его как бы не "видим" }
  if x=0 then sign:=0;
  if x<0 then sign:=-1;
 end;
 
 var
  dx,x :real; t:array[-1..1]of real;
 
 Begin clrscr;
 
 dx:=0.1;
 t[-1]:=1; t[1]:=11; t[0]:=t[-1]-9;
 
 repeat
 
  x:=(t[-1]+t[1])/2;
  t[ sign( f(x)*t[1] ) ]:=x;
 
 until (t[1]-t[-1]t[-1]);
 
 writeln('x=',x:12:3, ' y=',f(x):7:3);
 
 readln;
 end.
 
 
 Получилась симпатичная программа...
 Какая из этих двух маленьких программ лучше, сказать трудно. Это, так сказать, дело вкуса.
 Павел Сапунов
 15 декабря 2008 года
 
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"