Oppure

Loading
19/02/10 12:51
yuco91
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 ?
aaa
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à.
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:
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:

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 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.
aaa