listati con turbo pascal per bisezione (varianti)

bis1 bis1a bis2 bis2a bis3 bis3a


program bis1;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo:integer;

function f1(x:real):real;
 begin
 f1:=x*x*x-9*x+1;
 end;
 
 function f2(x:real):real;
 begin
 f2:=x*x*x-27*x+7;
 end;
 
function f3(x:real):real;
 begin
 f3:=x*x*x*x*x-4*x*x*x*x+3*x*x+2;
 end;
 
 function f4(x:real):real;
 begin
 f4:=2*x-3*cos(x)+1;
 end;
 
 function f5(x:real):real;
 begin
 f5:=3*ln(x)-3*x*x+6*x-1;
 end;
 

 
 procedure calcola1 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
   
   procedure calcola2 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
   end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola3 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola4 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

   procedure calcola5 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

 procedure leggi_dati1;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova -4..0..2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova -3..1..3 =');read(b);
  until f1(a)*f1(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola1(a,b);
 end;

 procedure leggi_dati2;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0..-6..5 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1..-5..6 =');read(b);
  until f2(a)*f2(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola2(a,b);
 end;
   

 procedure leggi_dati3;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 1..3..-2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 2..4..0 =');read(b);
  until f3(a)*f3(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola3(a,b);
 end;
 
 procedure leggi_dati4;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1 =');read(b);
  until f4(a)*f4(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola4(a,b);
 end;
 
  procedure leggi_dati5;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 2.. =');read(a);
   gotoxy(25,14);write('estremo destro     prova 3 =');read(b);
  until f5(a)*f5(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola5(a,b);
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=x^3-9x+1');
 writeln('2...f2:=x^3-27x+7');
 writeln('3...f3:=x^5-4x^4+3x^2+2');
 writeln('4...f4:=2x-3cos(x)+1');
 writeln('5.. f5:=3ln(x)-3x^2+6x-1');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(tipo);
 case tipo of
 1:leggi_dati1;
 2:leggi_dati2;
 3:leggi_dati3;
 4:leggi_dati4;
 5:leggi_dati5;
 end;
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.
     
  
           

program bis1a;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo,t:integer;

function f1(x:real):real;
 begin
 f1:=x*x*x-9*x+1;
 end;
 
 function f2(x:real):real;
 begin
 f2:=x*x*x-27*x+7;
 end;
 
function f3(x:real):real;
 begin
 f3:=x*x*x*x*x-4*x*x*x*x+3*x*x+2;
 end;
 
 function f4(x:real):real;
 begin
 f4:=2*x-3*cos(x)+1;
 end;
 
 function f5(x:real):real;
 begin
 f5:=3*ln(x)-3*x*x+6*x-1;
 end;
 
 procedure uscita;
 begin
 writeln('funzione sempre con stesso segno:riprova o esci');
 writeln('premi enter ');readln;readln;
 halt;
 end;

 procedure calcola1 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
   
   procedure calcola2 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
   end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola3 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola4 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

   procedure calcola5 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

  
 procedure leggi_dati(dati:integer);
 begin
   gotoxy(45,13);write('estremo sinistro =');read(a);
   gotoxy(45,14);write('estremo destro   =');read(b);
   if a=100 then uscita;
   n:=20; (* bisezioni *)
  case dati of
  1:calcola1(a,b);
  2:calcola2(a,b);
  3:calcola3(a,b);
  4:calcola4(a,b);
  5:calcola5(a,b);
 end;
 end;

procedure prova(t:integer);
var g,h,k:integer;
begin
clrscr;
write('scrivi valore iniziale per calcolo funzione:');readln(g);
write('scrivi valore finale per calcolo funzione  :');readln(h);
writeln('...scegli estremo sinistro e destro per calcolo radice '); 
writeln('...scrivi 100..100 se funzione sempre con stesso segno,o per FINE ');
 case t of 
 1:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f1(k):8:6);end;
 2:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f2(k):8:6);end;
 3:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f3(k):8:6);end;
 4:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f4(k):8:6);end;
 5:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f5(k):8:6);end;
 end; 
 leggi_dati(t);
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=x^3-9x+1');
 writeln('2...f2:=x^3-27x+7');
 writeln('3...f3:=x^5-4x^4+3x^2+2');
 writeln('4...f4:=2x-3cos(x)+1');
 writeln('5.. f5:=3ln(x)-3x^2+6x-1...SOLO X POSITIVI');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(tipo);
 prova(tipo);
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.
     
  
           

program bis2;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo:integer;

function f1(x:real):real;
 begin
 f1:=-7*x+2*exp(-3*x)-1;
 end;
 
 function f2(x:real):real;
 begin
 f2:=2*sqrt(x)-3*exp(-x);
 end;
 
function f3(x:real):real;
 begin
 f3:=2*exp(-x)+2*x*x-3;
 end;
 
 function f4(x:real):real;
 begin
 f4:=2*ln(x)+3*x-1;
 end;
 
 function f5(x:real):real;
 begin
 f5:=3*sin(x)/cos(x)+x-1;
 end;
 

 
 procedure calcola1 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
   
   procedure calcola2 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
   end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola3 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola4 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

   procedure calcola5 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

 procedure leggi_dati1;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1 =');read(b);
  until f1(a)*f1(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola1(a,b);
 end;

 procedure leggi_dati2;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1 =');read(b);
  until f2(a)*f2(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola2(a,b);
 end;
   

 procedure leggi_dati3;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 1...-1 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 2...0  =');read(b);
  until f3(a)*f3(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola3(a,b);
 end;
 
 procedure leggi_dati4;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0.50 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1.00 =');read(b);
  until f4(a)*f4(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola4(a,b);
 end;
 
  procedure leggi_dati5;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0.. =');read(a);
   gotoxy(25,14);write('estremo destro     prova 1 =');read(b);
  until f5(a)*f5(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola5(a,b);
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=-7x+2e(-3x)-1');
 writeln('2...f2:=2*sqrt(x)-3e(-x)');
 writeln('3...f3:=2e(-x)+2x^2-3');
 writeln('4...f4:=2ln(x)+3x-1');
 writeln('5.. f5:=3*sin(x)/cos(x)+x-1');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(tipo);
 case tipo of
 1:leggi_dati1;
 2:leggi_dati2;
 3:leggi_dati3;
 4:leggi_dati4;
 5:leggi_dati5;
 end;
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.
     
  
           

program bis2a;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo,t:integer;

function f1(x:real):real;
 begin
 f1:=-7*x+2*exp(-3*x)-1;
 end;
 
 function f2(x:real):real;
 begin
 f2:=2*sqrt(x)-3*exp(-x);
 end;
 
function f3(x:real):real;
 begin
 f3:=2*exp(-x)+2*x*x-3;
 end;
 
 function f4(x:real):real;
 begin
 f4:=2*sqrt(x)+3*x-1;
 end;
 
 function f5(x:real):real;
 begin
 f5:=3*sin(x)/cos(x)+x-1;
 end;
 
 procedure uscita;
 begin
 writeln('funzione sempre con stesso segno:riprova o esci');
 writeln('premi enter ');readln;readln;
 halt;
 end;

 procedure calcola1 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
   
   procedure calcola2 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
   end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola3 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola4 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

   procedure calcola5 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

  
 procedure leggi_dati(dati:integer);
 begin
   gotoxy(45,13);write('estremo sinistro =');read(a);
   gotoxy(45,14);write('estremo destro   =');read(b);
   if a=100 then uscita;
   n:=20; (* bisezioni *)
  case dati of
  1:calcola1(a,b);
  2:calcola2(a,b);
  3:calcola3(a,b);
  4:calcola4(a,b);
  5:calcola5(a,b);
 end;
 end;

procedure prova(t:integer);
var g,h,k:integer;
begin
clrscr;
write('scrivi valore iniziale per calcolo funzione:');readln(g);
write('scrivi valore finale per calcolo funzione  :');readln(h);
writeln('...scegli estremo sinistro e destro per calcolo radice '); 
writeln('...scrivi 100..100 se funzione sempre con stesso segno,o per FINE ');
 case t of 
 1:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f1(k):8:6);end;
 2:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f2(k):8:6);end;
 3:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f3(k):8:6);end;
 4:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f4(k):8:6);end;
 5:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f5(k):8:6);end;
 end; 
 leggi_dati(t);
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=-7x+2e(-3x)-1');
 writeln('2...f2:=2*sqrt(x)-3e(-x).SOLO VALORI POSITIVI o ZERO;');
 writeln('3...f3:=2*e(-x)+2x^2-3');
 writeln('4...f4:=2sqrt(x)+3x-1  ....SOLO VALORI POSITIVI o ZERO;');
 writeln('5.. f5:=3sin(x)/cos(x)+x-1');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(tipo);
 prova(tipo);
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.
     
  
           

program bis3;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo:integer;

function f1(x:real):real;
 begin
 f1:=x*x*x-2*x*x+4*x-5;
 end;
 
 function f2(x:real):real;
 begin
 f2:=2*x*x*x-3*x*x+x-1;
 end;
 
function f3(x:real):real;
 begin
 f3:=x*x*x-13*x-14;
 end;
 
 function f4(x:real):real;
 begin
 f4:=x*x*x-4*x-11;
 end;
 
 function f5(x:real):real;
 begin
 f5:=x*x*x*x-3*x*x*x+1;
 end;
 

 
 procedure calcola1 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
   
   procedure calcola2 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
   end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola3 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;


   procedure calcola4 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

   procedure calcola5 (es,ed:real);
 begin
 clrscr;
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio; 
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

 procedure leggi_dati1;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova -5 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5  =');read(b);
  until f1(a)*f1(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola1(a,b);
 end;

 procedure leggi_dati2;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova -1 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 6 =');read(b);
  until f2(a)*f2(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola2(a,b);
 end;
   

 procedure leggi_dati3;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 1...-1 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 2...6  =');read(b);
  until f3(a)*f3(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola3(a,b);
 end;
 
 procedure leggi_dati4;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 0 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 6 =');read(b);
  until f4(a)*f4(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola4(a,b);
 end;
 
  procedure leggi_dati5;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 1.. =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5 =');read(b);
  until f5(a)*f5(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 20 =');read(n);
  calcola5(a,b);
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=x^3-2x^2+4x-5');
 writeln('2...f2:=2x^3-3x^2+x-1');
 writeln('3...f3:=x^3-13x-14');
 writeln('4...f4:=x^3-4x-11');
 writeln('5.. f5:=x^4-3x^3+1');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(tipo);
 case tipo of
 1:leggi_dati1;
 2:leggi_dati2;
 3:leggi_dati3;
 4:leggi_dati4;
 5:leggi_dati5;
 end;
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.
     
  
           

program bis3a;
(* calcola valori funzione entro campo da assegnare *)
(* scelta estremi sinistro e destro tra valori calcolati sopra *)
(* cerca radice approssimata dopo n bisezioni da indicare  *)
uses crt;
var a,b,medio,x,y:real;
    k,n,t:integer;

function f1(x:real):real;
 begin
 f1:=-7*x+2*exp(-3*x)-1;
 end;
 
 function f2(x:real):real;
 begin
 f2:=2*sqrt(x)-3*exp(-x);
 end;
 
function f3(x:real):real;
 begin
 f3:=2*exp(-x)+2*x*x-3;
 end;
 
 function f4(x:real):real;
 begin
 f4:=2*sqrt(x)+3*x-1;
 end;
 
 function f5(x:real):real;
 begin
 f5:=3*sin(x)/cos(x)+x-1;
 end;
 
 procedure uscita;
 begin
 writeln('funzione sempre con stesso segno:riprova o esci');
 writeln('premi enter ');readln;readln;
 halt;
 end;

 procedure calcola (es,ed:real);
 begin
 clrscr;
 
 if t=1 then begin
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f1(es)*f1(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end else
  
  if t=2 then begin
  for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f2(es)*f2(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end else 
  
  if t=3 then begin 
  for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f3(es)*f3(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end else 
  
  if t=4 then begin
  for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f4(es)*f4(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end else 
  
  if t=5 then begin 
  for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f5(es)*f5(medio)<=0 then
       ed:=medio
        else
         es:=medio;  
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;
  end;
  
 procedure leggi_dati;
 begin
   gotoxy(45,13);write('estremo sinistro =');read(a);
   gotoxy(45,14);write('estremo destro   =');read(b);
   if a=100 then uscita;
   gotoxy(45,16);write('numero iterazioni :prova 20..=');readln(n);
   calcola(a,b);
 end;

procedure prova;
var g,h,k:integer;
begin
clrscr;
write('scrivi valore iniziale per calcolo funzione:');readln(g);
write('scrivi valore finale per calcolo funzione  :');readln(h);
writeln('...scegli estremo sinistro e destro per calcolo radice '); 
writeln('...scrivi 100..100 se funzione sempre con stesso segno,o per FINE ');
 case t of 
 1:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f1(k):8:6);end;
 2:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f2(k):8:6);end;
 3:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f3(k):8:6);end;
 4:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f4(k):8:6);end;
 5:begin  for k:=g to h do writeln('per x=',K:8,'...f(x)=',f5(k):8:6);end;
 end; 
 leggi_dati;
 end;
 

  procedure scelta;
  var ancora:integer;
 begin
 clrscr;
 writeln('funzioni memorizzate da provare ');
 writeln('1...f1:=-7x+2e(-3x)-1');
 writeln('2...f2:=2*sqrt(x)-3e(-x).SOLO VALORI POSITIVI o ZERO;');
 writeln('3...f3:=2*e(-x)+2x^2-3');
 writeln('4...f4:=2sqrt(x)+3x-1  ....SOLO VALORI POSITIVI o ZERO;');
 writeln('5.. f5:=3sin(x)/cos(x)+x-1');
 writeln('----------------------------------');
 write('indica funzione da provare 1,2,3,4,5.');readln(t);
 prova;
 WRITELN('-------------------------------');
 write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  writeln('premi enter');
  readln;
  end.