listati con turbo pascal per bisezione (varianti)

bise2 bise4a bise4b bise4c bise4d biseziona1 biseziona2


program bise2;
uses crt;
var a,b,medio,ampiezza,errore,x,y:real;

function f(x:real):real;
 begin
 f:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;
 
 procedure leggi_dati;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4..2..4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5..6..6 =');read(b);
  until f(a)*f(b)<0;
  gotoxy(25,15);write('errore..prova 0.001 =');read(errore);
 end;
 
 procedure calcola (es,ed:real);
 begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
  ampiezza:=ed-es;
  write('estremo sinistro:',es:5:8);
  writeln(' estremo destro:',ed:12:8);
  
  if ampiezza<errore then
   begin
    writeln;
    write('radice approssimata :',medio:0:8);
    writeln(' errore=',errore:0:9);
   end
   else
    calcola(es,ed);
  end;
  
  begin
  clrscr;
  leggi_dati;
  clrscr;
  writeln('a= ',a:5:6,' b=  ',b:12:6);
  readln;
  calcola(a,b);
  writeln('premi enter');
  readln;
  end.
     
  
           

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

function f(x:real):real;
 begin
 f:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;
 
 procedure leggi_dati;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4..2..4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5..6..6 =');read(b);
  until f(a)*f(b)<0;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
 end;
 
 procedure calcola (es,ed:real);
 begin
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f(es):12:8);
  write('Fd:',f(ed):12:8);
  writeln('Fm:',f(medio):12:8);
  writeln('-------------------------------------------------------');
  end;
  writeln('radice approssimata:',medio:0:8);
  end;
   
  
  begin
  clrscr;
  leggi_dati;
  clrscr;
  writeln('a= ',a:5:6,' b=  ',b:12:6);
  calcola(a,b);
  writeln('premi enter');
  readln;
  end.
     
  
           

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

function f(x:real):real;
 begin
 f:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;

 
 procedure calcola (es,ed:real);
 begin
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln(' medio:',medio:12:8);
  write('Fs:',f(es):12:8);
  write(' Fd:',f(ed):12:8);
  writeln(' Fm:',f(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  end;
  writeln('radice approssimata:',medio:0:8); 
  end;
   

 
 procedure leggi_dati;
 begin
 clrscr;
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4..2..4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5..6..6 =');read(b);
  until f(a)*f(b)<0;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  clrscr;
  writeln('a= ',a:5:6,' b=  ',b:12:6);
  calcola(a,b);
  write('per altra prova,scrivi 1...per finire scrivi 2 ');readln(scelta);
  if scelta=1 then leggi_dati;
 end;
  
  begin
  clrscr;
  leggi_dati;
  clrscr;
  
  writeln('premi enter');
  readln;
  end.
     
  
           

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

function f(x:real):real;
 begin
 f:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;

 
 procedure calcola (es,ed:real);
 begin
 for k:=1 to n do
  begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln(' medio:',medio:12:8);
  write('Fs:',f(es):12:8);
  write(' Fd:',f(ed):12:8);
  writeln(' Fm:',f(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  end;
  writeln('radice approssimata:',medio:0:8); 
  end;
   

 
 procedure leggi_dati;
 begin
 clrscr;
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4..2..4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5..6..6 =');read(b);
  until f(a)*f(b)<0;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  clrscr;
  writeln('a= ',a:5:6,' b=  ',b:12:6);
  calcola(a,b);
  write('per altra prova,scrivi 1...per finire scrivi 2 ');readln(scelta);
  if scelta=1 then leggi_dati;
 end;
  
  begin
  clrscr;
  leggi_dati;
  clrscr;
  
  writeln('premi enter');
  readln;
  end.
     
  
           

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

function f1(x:real):real;
 begin
 f1:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;
 
 function f2(x:real):real;
 begin
 f2:=x*x*x-9*x+1;
 end;
 
function f3(x:real):real;
 begin
 f3:=x*x*x-9*x*x+5;
 end;
 
 function f4(x:real):real;
 begin
 f4:=x*x*x-4*x*x+2*x-5;
 end;
 
 function f5(x:real):real;
 begin
 f5:=x*x*x-3*x*x+5*x-6;
 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;
 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f1(es):12:8);
  write('Fd:',f1(ed):12:8);
  writeln('Fm:',f1(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  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; 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f2(es):12:8);
  write('Fd:',f2(ed):12:8);
  writeln('Fm:',f2(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  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; 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f3(es):12:8);
  write('Fd:',f3(ed):12:8);
  writeln('Fm:',f3(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  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; 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f4(es):12:8);
  write('Fd:',f4(ed):12:8);
  writeln('Fm:',f4(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  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; 
  write('estremo sinistro:',es:12:8);
  write(' estremo destro:',ed:12:8);
  writeln('medio:',medio:12:8);
  write('Fs:',f5(es):12:8);
  write('Fd:',f5(ed):12:8);
  writeln('Fm:',f5(medio):12:8);
  writeln('-------------------------------------------------------');
  READLN;
  end;
  writeln('radice approssimata:',medio:0:8);
  READLN;
  end;

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

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

 procedure leggi_dati3;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova -2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova  0 =');read(b);
  until f3(a)*f3(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola3(a,b);
 end;
 
 procedure leggi_dati4;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 4 =');read(b);
  until f4(a)*f4(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola4(a,b);
 end;
 
  procedure leggi_dati5;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 0 =');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*x*x*x-7*x*x*x+2*x*x-100*x+610;');
 writeln('2...f2:=x*x*x-9*x+1;');
 writeln('3...f3:=x*x*x-9*x*x+5;');
 writeln('4...f4:=x*x*x-4*x*x+2*x-5;');
 writeln('5.. f5:=x*x*x-3*x*x+5*x-6;');
 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 bise4d;
uses crt;
var a,b,medio,x,y:real;
    k,n,tipo:integer;

function f1(x:real):real;
 begin
 f1:=x*x*x*x-7*x*x*x+2*x*x-100*x+610;
 end;
 
 function f2(x:real):real;
 begin
 f2:=x*x*x-9*x+1;
 end;
 
function f3(x:real):real;
 begin
 f3:=x*x*x-9*x*x+5;
 end;
 
 function f4(x:real):real;
 begin
 f4:=x*x*x-4*x*x+2*x-5;
 end;
 
 function f5(x:real):real;
 begin
 f5:=x*x*x-3*x*x+5*x-6;
 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..2..4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 5..6..6 =');read(b);
  until f1(a)*f1(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola1(a,b);
 end;

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

 procedure leggi_dati3;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova -2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova  0 =');read(b);
  until f3(a)*f3(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola3(a,b);
 end;
 
 procedure leggi_dati4;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 2 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 4 =');read(b);
  until f4(a)*f4(b)<0 ;
  gotoxy(25,15);write('numero bisezioni..prova 10 =');read(n);
  calcola4(a,b);
 end;
 
  procedure leggi_dati5;
 begin
  repeat
   gotoxy(25,13);write('estremo sinistro...prova 4 =');read(a);
   gotoxy(25,14);write('estremo destro     prova 0 =');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*x*x*x-7*x*x*x+2*x*x-100*x+610;');
 writeln('2...f2:=x*x*x-9*x+1;');
 writeln('3...f3:=x*x*x-9*x*x+5;');
 writeln('4...f4:=x*x*x-4*x*x+2*x-5;');
 writeln('5.. f5:=x*x*x-3*x*x+5*x-6;');
 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 biseziona1;
(* calcolo valori funzione entro campo da indicare *)
(* scelta estremi sinistro e destro per calcolo radice approssimata *)
(* scegliere tra valori di x ove la funzione cambia segno *)
uses crt;
var a,b,medio,ampiezza,errore,x,y:real;

function f(x:real):real;
 begin
 f:=x*x*x-9*x+1;  (* funzione inserire...poi riattivare con COMPILE-RUN *)
 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');
  for k:=g to h do
  writeln('per x=',k:8,' ....f(x).....=',f(k):8:6);
  end;
  
 
 procedure calcola (es,ed:real);
 begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
  ampiezza:=ed-es;
  write('estremo sinistro:',es:5:8);
  writeln(' estremo destro:',ed:12:8);  
  if ampiezza<errore then
   begin
    writeln;
    write('radice approssimata :',medio:0:8);
    writeln(' errore=',errore:0:9);
   end
   else
    calcola(es,ed);
  end;
 
  procedure leggi_dati;
 begin
  repeat
   gotoxy(45,13);write('estremo sinistro  ');read(a);
   gotoxy(45,14);write('estremo destro    ');read(b);
  until f(a)*f(b)<0;
  errore:=0.001;
  clrscr;
  writeln('a=',a:5:6,'b= ',b:12:6);
 end;
 
 procedure scelta;
 var ancora:integer;
 begin
 prova;
 leggi_dati;
 calcola(a,b);
 readln;
 write('scrivi 1 per altra prova..scrivi 2 per finire ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  end.
     
  
           

program biseziona2;
(* calcolo valori funzione entro campo da indicare *)
(* scelta estremi sinistro e destro per calcolo radice approssimata *)
(* scegliere tra valori di x ove la funzione cambia segno *)
(* uscita se funzione sempre stesso segno *)
uses crt;
var a,b,medio,ampiezza,errore,x,y:real;

function f(x:real):real;
 begin
 f:=9*x*x+4;  (* funzione inserire...poi riattivare con COMPILE-RUN *)
 end;
 
 procedure uscita;
 begin
 clrscr;
 writeln('funzione sempre stesso segno:fine operazione');
 writeln('premi enter per uscire ');Readln;READLN;
 halt;
 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 1000..1000 per uscire da richiesta ');
  for k:=g to h do
  writeln('per x=',k:8,' ....f(x).....=',f(k):8:6);
  end;
  
 
 procedure calcola (es,ed:real);
 begin
  medio:=(es+ed)/2;
  if f(es)*f(medio)<=0 then
       ed:=medio
        else
         es:=medio;
  ampiezza:=ed-es;
  write('estremo sinistro:',es:5:8);
  writeln(' estremo destro:',ed:12:8);  
  if ampiezza<errore then
   begin
    writeln;
    write('radice approssimata :',medio:0:8);
    writeln(' errore=',errore:0:9);
   end
   else
    calcola(es,ed);
  end;
 
  procedure leggi_dati;
 begin
  repeat
   gotoxy(45,13);write('estremo sinistro  ');read(a);
   gotoxy(45,14);write('estremo destro    ');read(b);
   if a=1000 then uscita;
  until f(a)*f(b)<0;
  errore:=0.001;
  clrscr;
  writeln('a=',a:5:6,'b= ',b:12:6);
 end;
 
 procedure scelta;
 var ancora:integer;
 begin
 prova;
 leggi_dati;
 calcola(a,b);
 readln;
 write('scrivi 1 per altra prova..scrivi 2 per finire ');readln(ancora);
 if ancora=1 then scelta;
 end;
 
  begin
  clrscr;
  scelta;
  end.