Program bisseccion;                (* Victor Manuel Iniestra Alvarez *)
                                   (* An lisis Num‚rico      Grupo E *)
VAR                                (* 30 Agosto 1993       Biseccion *)
   tole:extended;                  (* Usa la recursi¢n para calcular *)
   iteraciones:Word;               (* f(x)=0                         *)
   inicio,final:extended;

Function f(x:extended):extended;

         BEGIN
              f:=exp(x)+exp(-x*ln(2))+2*cos(x)-6
         END;

Procedure PideDatos(VAR tol,x,y:extended;VAR ite:Word);

          BEGIN
               WriteLn;
               ite:=0;
               REPEAT
                     Write('Dame el n£mero de iteraciones: ');
                     ReadLn(ite);
               UNTIL (ite>0);
               REPEAT
                     Write('Dame la tolerancia (0-1): ');
                     ReadLn(tol)
               UNTIL (tol>0)AND(tol<1);
               WriteLn('Dame un intervalo lo m s peque¤o que puedas: ');
               REPEAT
                     Write('Dame el n£mero menor: ');
                     ReadLn(x);
                     Write('Dame el n£mero mayor: ');
                     ReadLn(y);
               UNTIL x=1 THEN
               BEGIN
                    p:=(a+b)/2;
                    IF (Abs(a-b)<=tole)OR(f(p)=0) THEN
                    BEGIN
                       WriteLn;
                       WriteLn('La ra¡z es ',p:19:d)
                    END
                    ELSE
                    BEGIN
                         Write(iteraciones-operaciones+1:10,'         ',a:5:d);
                         IF f(a)<0 THEN
                            Write('       -      ')
                         ELSE
                            Write('       +      ');
                         Write(b:5:d);
                         IF f(p)<0 THEN
                            Write('       -      ')
                         ELSE
                            Write('       +      ');
                         WriteLn(p:5:d,Abs(a-b):7);
                         IF f(a)*f(p)<0 THEN
                            busca(a,p,operaciones-1);
                         IF f(p)*f(b)<0 THEN
                            busca(p,b,operaciones-1);
                    END
               END
               ELSE
                   WriteLn('Se me acabo la cuerda.')
          END;

BEGIN
     ReadLn;
     PideDatos(tole,inicio,final,iteraciones);
     IF f(inicio)*f(final)<0 THEN
     BEGIN
        WriteLn;
        WriteLn('Bisecci¢n:');
        WriteLn;
        WriteLn('F(x)=exp(x)+exp(-x*ln(2))+2*cos(x)-6       x î [1,2]');
        WriteLn;
        WriteLn('F(1)= -        F(2)= +');
        WriteLn;
        WriteLn(' iteraci¢n:           a:       F(a):      b:       F(p):      p:     |a-b|:');
        WriteLn;
        Busca(inicio,final,iteraciones)
     END
     ELSE
         WriteLn('Una de tres: Uno de los valores dados es una ra¡z (o ambos),'+
                 'existen un n£mero   par de raices en el intervalo o no existen'+
                 ' raices en el intervalo.');
     WriteLn;
     WriteLn('Ya acabe.');
     ReadLn
END.



    Source: geocities.com/v.iniestra/apuntes/ana_num

               ( geocities.com/v.iniestra/apuntes)                   ( geocities.com/v.iniestra)