19/02/10 18:05
Poggi Marco
Ciao!
Per risolvere il problema, io farei un sotto programma per il calcolo della funzione, in modo da poterlo richiamare per il calcolo del limite.
Tu avrai già elaborato qualcosa. Se si posta il codice e descrivici dove trovi difficoltà.
Per risolvere il problema, io farei un sotto programma per il calcolo della funzione, in modo da poterlo richiamare per il calcolo del limite.
Tu avrai già elaborato qualcosa. Se si posta il codice e descrivici dove trovi difficoltà.
aaa
19/02/10 20:14
yuco91
Riporto di seguito il codice che ho già scritto ( la funzione è diversa da quella ke ho menzionato precedentemente). In realtà , come potrai vedere , il programma mi calcola tutti i valori sia dell'intorno destro che di quello sinistro del valore del limite. Infatti fa variare la x per valori maggiori (e minori) di un certo incremento (decremento) e trova il corrispondente valore del limite. Io però vorrei un modo per calcolare il limite in modo più efficace e preciso .
{Nome programma} program limite; uses wincrt; {Variabili} var x, lim: real; t : char; x0 : integer; {Inizio procedure} procedure intornodestro; begin clrscr; writeln ('Per questo valore di x0 la funzione può essere studiata solo nell''intorno destro'); writeln; x:= x0 + 0.2; while x >= x0 do begin lim:= sqrt(x*x-4); writeln ('x =',x:4:2,' y =',lim:8:4); x:=x-0.02; end; readln; clrscr; end; procedure intornosinistro; begin clrscr; writeln ('Per questo valore di x0 la funzione può essere studiata solo nell''intorno sinistro'); writeln; x:= x0 - 0.2; while x <= x0 do begin lim:= sqrt(x*x-4); writeln ('x =',x:4:2,' y =',lim:8:4); x:=x+0.02; end; readln; clrscr; end; procedure proceduraerrore; begin clrscr; writeln ('##########'); writeln ('# ERRORE #'); writeln ('##########'); writeln; writeln ('Il valore di x0 inserito non appartiene al C. E.'); end; {Fine procedure} {Corpo del programma} begin repeat writeln ('******************************************************'); writeln ('* Benvenuto nel programma LIMITE DI UNA FUNZIONE !!! *'); writeln ('******************************************************'); writeln; writeln; writeln ('Questo programma consente di calcolare il limite della funzione'); writeln; writeln ('f(x)= sqrt(x^2-4) '); writeln; writeln ('per x che tende ad un valore finito.'); writeln; write ('Si introduca il valore di x0 ='); readln(x0); case x0 of -2 : intornosinistro; 2: intornodestro; else if (x0<2) AND (x0>-2) then proceduraerrore else begin x:= x0 + 0.2; while x >= x0 do begin lim:= sqrt(x*x-4); writeln ('x =',x:4:2,' y =',lim:8:4); x:=x-0.02; end; x:= x0 - 0.2; while x <= x0 do begin lim:= sqrt(x*x-4); writeln ('x =',x:4:2,' y =',lim:8:4); x:=x+0.02; end; writeln; writeln ('Il limite di sqrt(x^2-4)'); writeln ('per x--> ', x0:4); writeln ('vale ', lim:8:4); end; writeln; writeln; writeln ('Se vuoi coninuare premi Invio. Per terminare digita - N -'); readln(t); clrscr; end; until (t='n') OR (t='N'); end.
aaa
19/02/10 20:36
Poggi Marco
Cosa intendi per "un modo per calcolare il limite in modo più efficace e preciso " ?
Comunque ho notato che usi solo varibili globali, e, a mio avviso, la variabile x0 dovrebbe essere di tipo real.
Il mio consiglio, ripeto, è quello di cerare una procedura per il calcolo della funzione
Ecco un esempio:
Non è necessario riscrivere la stessa funzione nel programma!
Se si dovesse cambiare formola come faresti?
Comunque ho notato che usi solo varibili globali, e, a mio avviso, la variabile x0 dovrebbe essere di tipo real.
Il mio consiglio, ripeto, è quello di cerare una procedura per il calcolo della funzione
Ecco un esempio:
function funzione(x:real; var y:real):boolean; var delta:real; begin delta:=x*x-4; if delta<0 then funzione:=false else begin y:=sqrt(delta); funzione:=true; end; end;
Non è necessario riscrivere la stessa funzione nel programma!
Se si dovesse cambiare formola come faresti?
Ultima modifica effettuata da Poggi Marco 19/02/10 21:45
aaa
19/02/10 22:14
yuco91
Per "più preciso" intendo un programma che mi permetta di calcolare il limite normalmente , ossia un limite il cui risultato sia un numero e non una sequenza di numeri come invece mi da il programma ora. voglio calcolare il limite della funzione precisamente.
aaa
19/02/10 22:44
Poggi Marco
Non capisco quale sia la difficoltà!
Ecco un esempio:
Ecco un esempio:
program limite; uses wincrt; {Variabili} var x, lim: real; t : char; function funzione(x:real; var y:real):boolean; var delta:real; begin delta:=x*x-4; if delta<0 then funzione:=false else begin y:=sqrt(delta); funzione:=true; end; end; procedure proceduraerrore; begin clrscr; writeln ('##########'); writeln ('# ERRORE #'); writeln ('##########'); writeln; writeln ('Il valore di x0 inserito non appartiene al C. E.'); end; begin repeat writeln ('******************************************************'); writeln ('* Benvenuto nel programma LIMITE DI UNA FUNZIONE !!! *'); writeln ('******************************************************'); writeln; writeln; writeln ('Questo programma consente di calcolare il limite della funzione'); writeln; writeln ('f(x)= sqrt(x^2-4) '); writeln; writeln ('per x che tende ad un valore finito.'); writeln; write ('Si introduca il valore di x0 ='); readln(x); if funzione(x, lim) then writeln ('x =',x:4:2,' y =',lim:8:4) else proceduraerrore; writeln; writeln ('Se vuoi coninuare premi Invio. Per terminare digita - N -'); readln(t); clrscr; until (t='n') or (t='N'); end.
aaa
21/02/10 12:20
yuco91
Postato originariamente da Poggi Marco:
Non capisco quale sia la difficoltà!
Non capisco quale sia la difficoltà!
non si tratta di difficoltà , am del fatto che anche con il tuo esempio il programma non è molto preciso , anzi, da risultati scorretti . Prova ad esempio ad inserire x-->4 e vedrai che il risultato del limite invece di essere 12 , come facilmente si può capire sarà 4,xxxx .
aaa
21/02/10 17:08
Poggi Marco
Cosa intendi con 4,xxxx ?
Se si inserisce 4 viene calcolato: 4*4-4=12, e successivamente, la radice di 12 (=3.464101...). Almeno secondo la funzione che tu hai scelto.
Se si inserisce 4 viene calcolato: 4*4-4=12, e successivamente, la radice di 12 (=3.464101...). Almeno secondo la funzione che tu hai scelto.
aaa