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.