Сапунов Павел : другие произведения.

Метод 0,5

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

  Метод половинного деления - это один из самых простейших и самых надёжных методов решения уравнений.
  Обычно метод половинного деления в программах реализуют следующим образом:
  
  
  
  { Листинг 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т список

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