esercizi di matematica con turbo pascal 1.1 su mac

varianti programmi per ricerca radici con metodo di bisezione


program bis5a;
 
var a,b,medio,x:real;
    k,n,t:integer;
    y1,y2,y3,y4,y5:string;
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 vedi(es,ed:real);
begin
 for k:=1 to n do
  begin
   medio:=(es+ed)/2;
   if t=1 then begin if f1(es)*f1(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f1(es):10:6,'..f(d)=',f1(medio):10:6);end;
   if t=2 then begin if f2(es)*f2(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f2(es):10:6,'..f(d)=',f2(medio):10:6);end;
   if t=3 then begin if f3(es)*f3(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f3(es):10:6,'..f(d)=',f3(medio):10:6);end;
   if t=4 then begin if f4(es)*f4(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f4(es):10:6,'..f(d)=',f4(medio):10:6);end;
   if t=5 then begin if f5(es)*f5(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f5(es):10:6,'..f(d)=',f5(medio):10:6);end;
   writeln('sinistro=',es:10:6,'..destro=',ed:10:6,'..medio=',medio:10:6);
   writeln('-------------------------------------------------------');
   end;
   writeln('radice approssimata:',medio:0:8);
   writeln('premi enter');readln;end;
   procedure leggidati;
   begin
    gotoxy(45,13);write('estremo sinistro=');readln(a);
    gotoxy(45,14);write('estremo destro  =');readln(b);
    if a=100 then uscita;
    gotoxy(45,16);write('numero iterazioni?prova 20 ');readln(n);
    vedi(a,b);
   end;
   procedure prova;
   var g,h,k:integer;
   begin
    clearscreen;
    case t of
     1:writeln(y1);
     2:writeln(y2);
     3:writeln(y3);
     4:writeln(y4);
     5:writeln(y5);
    end;
    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 ');
     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;leggidati;end;
    procedure scelta;
    var ancora:integer;
    begin
     clearscreen;
     y1:='-7x+2e(-3x)-1';
     y2:='2*sqrt(x)-3e(-x)  solo valori POSITIVI o ZERO';
     y3:='2e(-x)+2x^2-3';
     y4:='2*sqrt(x)+3x-1    solo valori POSITIVI o ZERO';
     y5:='3sin(x)/cos(x)+x-1';
     writeln('funzioni memorizzate per provare');
     writeln('1..',y1);
     writeln('2..',y2);
     writeln('3..',y3);
     writeln('4..',y4);
     writeln('5..',y5);
     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
    clearscreen;
    scelta;
    writeln('premi enter');readln;
    end.

 


program bis9a;
var a,b,medio,x:real;
    k,n,pausa:integer;
    y1:string;
function f1(x:real):real;
begin f1:=-7*x+2*exp(-3*x)-1;end;
procedure uscita;
begin
writeln('funzione sempre con stesso segno:riprova o esci');
writeln('premi enter ');readln;readln;halt;
end;
procedure vedi(es,ed:real);
begin
 for k:=1 to n do
  begin
   medio:=(es+ed)/2;
   if f1(es)*f1(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f1(es):10:6,'..f(d)=',f1(medio):10:6);
   writeln('sinistro=',es:10:6,'..destro=',ed:10:6,'..medio=',medio:10:6);
   writeln('-------------------------------------------------------');
   if pausa=1 then begin write('bisezione n.',k,' su ',n,' premi emter');
   readln;end;end;
   writeln('radice approssimata:',medio:0:8);
   writeln('premi enter');readln;end;
   procedure leggidati;
   begin
    gotoxy(45,13);write('estremo sinistro=');readln(a);
    gotoxy(45,14);write('estremo destro  =');readln(b);
    if a=100 then uscita;
    gotoxy(45,16);write('numero iterazioni?prova 20 ');readln(n);
    vedi(a,b);
   end;
   procedure prova;
   var g,h,k:integer;
   begin
    clearscreen;
    writeln('prima si cercano valori funzione entro campo assegnato');
    writeln('prendere nota valori ove la funzione cambia segno ');
    writeln('se cambia segno,annotare valori della variabile ');
    writeln('scegli estremo sinistro e destro per calcolo radice');
    writeln('scrivi 100..100 se funzione sempre con stesso segno ');
    writeln('---------------------------------------------------');
    write('scrivi valore iniziale per calcolo funzione ');readln(g);
    write('scrivi valore finale per calcolo funzione   ');readln(h);
    writeln('premi enter');readln;clearscreen;
      for k:=g to h do begin writeln('per x= ',k:8,'..f(x)=  ',f1(k):8:6);end;
    leggidati;end;
    procedure scelta;
    var ancora:integer;
    begin
     clearscreen;
     y1:='-7x+2e(-3x)-1';
     writeln('funzioni memorizzate per provare');
     writeln(y1);
     writeln('scrivi 1 per pausa durante visualizzazione...0=senza pausa');
     readln(pausa);
     prova;
     writeln('-------------------------------------');
     write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
     if ancora=1 then scelta;
    end;
    begin
    clearscreen;
    scelta;
    writeln('premi enter');readln;
    end.

program bis11a;
 
var a,b,medio,x:real;
    k,n,pausa:integer;
    y1:string;
function f1(x:real):real;
begin f1:=-7*x+2*exp(-3*x)-1;end;
procedure uscita;
begin
writeln('funzione sempre con stesso segno:riprova o esci');
writeln('premi enter ');readln;readln;halt;
end;
procedure vedi(es,ed:real);
begin
 for k:=1 to n do
  begin
   medio:=(es+ed)/2;
   if f1(es)*f1(medio)<=0 then ed:=medio else es:=medio;
   writeln('f(s)=',f1(es):10:6,'..f(d)=',f1(medio):10:6);
   writeln('sinistro=',es:10:6,'..destro=',ed:10:6,'..medio=',medio:10:6);
   writeln('-------------------------------------------------------');
   if pausa=1 then begin write('bisezione n.',k,' su ',n,' premi enter');
   readln;end;end;
   writeln('radice approssimata:',medio:0:8);
   writeln('premi enter');readln;end;
   procedure prova;
   var g,h,k:integer;
   begin
    clearscreen;
    writeln('prima si cercano valori funzione entro campo assegnato');
    writeln('poi il programma cerca primi valori discordi per funzione ');
    writeln('quindi assegna campo per ricerca radice approssimata ');
    writeln('---------------------------------------------------');
    write('scrivi valore iniziale per calcolo funzione ');readln(g);
    write('scrivi valore finale per calcolo funzione   ');readln(h);
    write('scrivi numero bisezioni da eseguire:20......');readln(n);
    writeln('premi enter');readln;clearscreen;
      for k:=g to h do begin writeln('per x= ',k:8,'..f(x)=  ',f1(k):8:6);
      if f1(k)*f1(k-1)<=0 then vedi(k-1,k);end;
      if f1(k)*f1(k-1)>0 then uscita;
   end;
    procedure scelta;
    var ancora:integer;
    begin
     clearscreen;
     y1:='-7x+2e(-3x)-1';
     writeln('funzioni memorizzate per provare');
     writeln(y1);
     writeln('scrivi 1 per pausa durante visualizzazione...0=senza pausa');
     readln(pausa);
     prova;
     writeln('-------------------------------------');
     write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
     if ancora=1 then scelta;
    end;
    begin
    clearscreen;
    scelta;
    writeln('premi enter');readln;
    end.

program bis12a;
var a,b,medio,x:real;
    k,n,pausa,sosta:integer;
    y1:string;
function f1(x:real):real;
begin f1:=-7*x+2*exp(-3*x)-1;end;
procedure uscita;
begin
writeln('funzione sempre con stesso segno:riprova o esci');
writeln('premi enter ');readln;readln;halt;
end;
procedure vedi(es,ed:integer);
var passo,z:real;
    p,opzione:integer;
begin
writeln('estremi entro i quali cercare radice ',es:12,ed:12);
writeln('assegna passo per ricerca 0.1  0.001   0.0001  ');readln(passo);
writeln('scrivi numero valori da provare 10..20..30..   ');readln(n);
writeln('scrivi 1 per vedere singoli risultati oppure 2 ');readln(sosta);
z:=es;
writeln('osserva valore funzione che cambia segno per trovare radice');
writeln('se non cambia segno,prova altro passo o numero valori ');
writeln('premi enter');readln;clearscreen;
 for p:=1 to n do
  begin
   writeln('per x= ',z:8:6,'  f(x)= ',f1(z):8:6);z:=z+passo;
   if sosta=1 then begin readln end;end;
   writeln('-------------------------------------------------------');
  write('per altro passo scrivi 1..per fine scrivi 2 ');readln(opzione);
  if opzione =1 then vedi(es,ed) else uscita;
end;
   procedure prova;
   var g,h,k:integer;
   begin
    clearscreen;
    writeln('prima si cercano valori funzione entro campo assegnato');
    writeln('poi il programma cerca primi valori discordi per funzione ');
    writeln('quindi assegna campo per ricerca radice approssimata ');
    writeln('---------------------------------------------------');
    write('scrivi valore iniziale per calcolo funzione ');readln(g);
    write('scrivi valore finale per calcolo funzione   ');readln(h);
    write('scrivi numero calcoli da eseguire:20......');readln(n);
    writeln('premi enter');readln;clearscreen;
      for k:=g to h do begin writeln('per x= ',k:8,'..f(x)=  ',f1(k):8:6);
      if f1(k)*f1(k-1)<=0 then vedi(k-1,k);end;
      if f1(k)*f1(k-1)>0 then uscita;
   end;
    procedure scelta;
    var ancora:integer;
    begin
     clearscreen;
     y1:='-7x+2e(-3x)-1';
     writeln('funzioni memorizzate per provare');
     writeln(y1);
     writeln('scrivi 1 per pausa durante visualizzazione...0=senza pausa');
     readln(pausa);
     prova;
     writeln('-------------------------------------');
     write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
     if ancora=1 then scelta;
    end;
    begin
    clearscreen;
    scelta;
    writeln('premi enter');readln;
    end.

program bis13a;
var a,b,medio,x:real;
    k,n,pausa,sosta:integer;
    y1:string;
function f1(x:real):real;
begin f1:=-7*x+2*exp(-3*x)-1;end;
procedure uscita;
begin
writeln('funzione sempre con stesso segno:riprova o esci');
writeln('premi enter ');readln;readln;halt;
end;
procedure vedi(es,ed:integer);
var passo,z,y2:real;
    p,opzione:integer;
begin
writeln('estremi entro i quali cercare radice ',es:12,ed:12);
writeln('assegna passo per ricerca 0.1  0.001   0.0001  ');readln(passo);
writeln('scrivi numero valori da provare 10..20..30..   ');readln(n);
writeln('scrivi 1 per vedere singoli risultati oppure 2 ');readln(sosta);
z:=es;
writeln('osserva valore funzione che cambia segno per trovare radice');
writeln('se non cambia segno,prova altro passo o numero valori ');
writeln('premi enter');readln;clearscreen;
 for p:=1 to n do
  begin
   writeln('per x= ',z:8:6,'  f(x)= ',f1(z):8:6);z:=z+passo;
   if y2*f1(z)<=0 then
   begin writeln('*** probabile radice o seguente ***');readln;end;
   y2:=f1(z);
   if sosta=1 then begin readln end;end;
   writeln('-------------------------------------------------------');
  write('per altro passo scrivi 1..per fine scrivi 2 ');readln(opzione);
  if opzione =1 then vedi(es,ed) else uscita;
end;
   procedure prova;
   var g,h,k:integer;
   begin
    clearscreen;
    writeln('prima si cercano valori funzione entro campo assegnato');
    writeln('poi il programma cerca primi valori discordi per funzione ');
    writeln('quindi assegna campo per ricerca radice approssimata ');
    writeln('---------------------------------------------------');
    write('scrivi valore iniziale per calcolo funzione ');readln(g);
    write('scrivi valore finale per calcolo funzione   ');readln(h);
    write('scrivi numero calcoli da eseguire:20......');readln(n);
    writeln('premi enter');readln;clearscreen;
      for k:=g to h do begin writeln('per x= ',k:8,'..f(x)=  ',f1(k):8:6);
      if f1(k)*f1(k-1)<=0 then vedi(k-1,k);end;
      if f1(k)*f1(k-1)>0 then uscita;
   end;
    procedure scelta;
    var ancora:integer;
    begin
     clearscreen;
     y1:='-7x+2e(-3x)-1';
     writeln('funzioni memorizzate per provare');
     writeln(y1);
     writeln('scrivi 1 per pausa durante visualizzazione...0=senza pausa');
     readln(pausa);
     prova;
     writeln('-------------------------------------');
     write('altra prova:scrivi 1...fine:scrivi 2 ');readln(ancora);
     if ancora=1 then scelta;
    end;
    begin
    clearscreen;
    scelta;
    writeln('premi enter');readln;
    end.