yuco91 (Normal User)
Rookie
Messaggi: 21
Iscritto: 25/08/2009
|
Salve raga. dovrei realizare un programma per il calcolo dei limiti di una funzione . La funzione è già stabilita : " y=2x+1 " . il programma deve solo dare il risultato del limite di quella funzione per x-->c , dove c è un numero che inseriamo da tastiera.
sapreste aiutarmi ?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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à.
|
|
yuco91 (Normal User)
Rookie
Messaggi: 21
Iscritto: 25/08/2009
|
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 .
Codice sorgente - presumibilmente Delphi |
{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.
|
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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:
Codice sorgente - presumibilmente Delphi |
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 il 19/02/2010 alle 22:45 |
|
yuco91 (Normal User)
Rookie
Messaggi: 21
Iscritto: 25/08/2009
|
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.
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Non capisco quale sia la difficoltà!
Ecco un esempio:
Codice sorgente - presumibilmente Delphi |
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.
|
|
|
yuco91 (Normal User)
Rookie
Messaggi: 21
Iscritto: 25/08/2009
|
Postato originariamente da Poggi Marco:
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 . |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|
yuco91 (Normal User)
Rookie
Messaggi: 21
Iscritto: 25/08/2009
|
Ok . scusami , non avevo letto bene il codice che mi hai gentilmente postato. Era più semplice di come pensassi .
Se invece volessi farlo in generale, di una funzione inserita da tastiera ? qualche suggerimento ?
|
|