Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    Calcolo del valore approssimato di e(x)

    Salve amici del Forum!!!Qualcuno mi sa spiegare qual'è l'errore nel programma, che riporto di seguito, redatto in Pascal, che ha il compito di calcolare e(x) in forma approssimata assegnando ad x ed n valori opportuni (con x variabile ed n=5) e seguendo la nota formula di McLaurin secondo cui:

    e(x)=1+x+x^2/2!+x^3/3!+x^4/4!+....

    poichè il programma medesimo pur risultando sintatticamente corretto, non mi visualizza il risultato finale. Forse il problema è nel compilatore ( mi riferisco alla necessità dell'uso opportuno dell'istruzione readln per visualizzare il risultato con Dev-Pascal )?
    Riporto di seguito il testo del programma:

    codice:
    program EsponenzialeApprossimato(input,output);
    const n=5;
    var  x : real;
    function Potenza( x : real): real;
    begin
         if n=0
         then Potenza:=1
         else Potenza:=x*Potenza(n-1);
    
    end;{ fine funzione Potenza }
    
    function Fattoriale( n : integer): integer;
    begin
         if n=0
         then Fattoriale:=1
         else Fattoriale:=n*Fattoriale(n-1);
    
    end;{ fine funzione Fattoriale }
    
    function Esponenziale( x : real ):real;
    var i : integer;
        Somma : real;
    begin
      Somma:=0;
      for i:=1 to n
               do begin
                       Somma:=Somma+((Potenza(x))/(Fattoriale(i)));
                       readln;
                  end;
      Esponenziale:=Somma;
    readln;
    end;{ fine function Esponenziale }
    { Corpo del programma }
    begin
    
      writeln('----------------------------- Dati di ingresso -------------------------------');
      writeln;
      write('Fornire il valore della variabile x : ');
      readln(x);
      writeln;
      Esponenziale(x);
      writeln('Il valore di e(x) approssimato al termine di ordine', n ,'e'': ',Esponenziale(x));
      readln;
    
    end.
    Forse è scorretta l'istruzione Fattoriale(i), per calcolare di volta in volta n!, poichè si usa un parametro che è una variabile facendolo passare per parametro per valore ( tuttavia i assume di volta in volta valori costanti nella sommatoria ) ?
    Ringraziando da ora chiunque sia in grado di fornirmi una risposta corretta saluto tutti. Ciao!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52
    Scuste, non ho specificato che il programma è ovviamente compilato in linguaggio Pascal!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    [Pascal]: calcolo del valore approssimato di e(x)

    Scusate ancora. Volevo avere conferma se è lecita la generalizzazione del problema sopra proposto, con il seguente programma:

    codice:
    program EsponenzialeApprossimato(input,output);
    var   i,n : integer;
          x : real;
    function Potenza( x : real): real;
    begin
         if i=0
         then Potenza:=1
         else Potenza:=x*Potenza(i-1);
    
    end;{ fine funzione Potenza }
    
    function Fattoriale( i : integer): integer;
    begin
         if i=0
         then Fattoriale:=1
         else Fattoriale:=i*Fattoriale(i-1);
    
    end;{ fine funzione Fattoriale }
    
    function Esponenziale( x : real ):real;
    var i : integer;
        Somma : real;
    begin
      Somma:=0;
      for i:=1 to n
               do begin
                       Somma:=Somma+((Potenza(x))/(Fattoriale(i)));
                       readln;
                  end;
      Esponenziale:=Somma;
    readln;
    end;{ fine function Esponenziale }
    { Corpo del programma }
    begin
    
      writeln('----------------------------- Dati di ingresso -------------------------------');
      writeln;
      write('Fornire il valore della variabile x : ');
      readln(x);
      writeln;
      write('Fornire il valore della variabile n : ');
      readln(n);
      writeln;
      Esponenziale(x);
      writeln('Il valore di e(x) approssimato al termine di ordine', n ,'e'': ',Esponenziale(x));
      readln;
    
    end.
    Grazie a tutti per la collaborazione.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    [Pascal]: calcolo del valore approssimato di e(x)

    Correggo un errore: nella funzione Esponenziale non deve comparire la dichiarazione di variabile i : integer; per i noti problemi relativi alle regole sui campi d'azione delle variabili stesse dichiarate nelle procedure e nelle funzioni. Dunque il programma per il quale chiedo la verifica della correttezza e che generalizza il problema proposto all'inizio di questo post è il seguente:

    codice:
    program EsponenzialeApprossimato(input,output);
    var   i,n : integer;
          x : real;
    function Potenza( x : real): real;
    begin
         if i=0
         then Potenza:=1
         else Potenza:=x*Potenza(i-1);
    
    end;{ fine funzione Potenza }
    
    function Fattoriale( i : integer): integer;
    begin
         if i=0
         then Fattoriale:=1
         else Fattoriale:=i*Fattoriale(i-1);
    
    end;{ fine funzione Fattoriale }
    
    function Esponenziale( x : real ):real;
    var Somma : real;
    begin
      Somma:=0;
      for i:=1 to n
               do begin
                       Somma:=Somma+((Potenza(x))/(Fattoriale(i)));
                       readln;
                  end;
      Esponenziale:=Somma;
    readln;
    end;{ fine function Esponenziale }
    { Corpo del programma }
    begin
    
      writeln('----------------------------- Dati di ingresso -------------------------------');
      writeln;
      write('Fornire il valore della variabile x : ');
      readln(x);
      writeln;
      write('Fornire il valore della variabile n : ');
      readln(n);
      writeln;
      Esponenziale(x);
      writeln('Il valore di e(x) approssimato al termine di ordine', n ,'e'': ',Esponenziale(x));
      readln;
    
    end.
    Grazie a coloro che mi forniranno risposte esaurienti. Ciao!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    [Pascal]: calcolo del valore approssimato di e(x)

    Un'ultima correzione; nella function Esponenziale il valore iniziale della variabile Somma è 1 dunque alla riga 23 bisogna scrivere:

    Somma:=1;

    Ciao.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    [Pascal]: calcolo del valore approssimato di e(x)

    Questo è il programma per il calcolo approssimato di e(x) di cui sopra.
    codice:
    program EsponenzialeApprossimato(input,output);
    var  i,n : integer;
          x : real;
    function Potenza( x : real): real;
    begin
         if i=0
         then Potenza:=1
         else Potenza:=x*Potenza(i-1);
    
    end;{ fine funzione Potenza }
    
    function Fattoriale( i : integer): integer;
    begin
         if i=0
         then Fattoriale:=1
         else Fattoriale:=i*Fattoriale(i-1);
    
    end;{ fine funzione Fattoriale }
    
    function Esponenziale( x : real ):real;
    var Somma : real;
    begin
      Somma:=1;
      for i:=1 to n
               do begin
                       Somma:=Somma+((Potenza(x))/(Fattoriale(i)));
                       readln;
                  end;
      Esponenziale:=Somma;
    readln;
    end;{ fine funzione Esponenziale }
    { Corpo del programma }
    begin
    
      writeln('----------------------------- Dati di ingresso -------------------------------');
      writeln;
      write('Fornire il valore della variabile x : ');
      readln(x);
      writeln;
      write('Fornire il valore della variabile n : ');
      readln(n);
      writeln;
      Esponenziale(x);
      readln;
      writeln('Il valore di e(x) con x pari a ',x,' approssimato al termine di ordine ',n,' e'': ',Esponenziale(x));
      readln;
    
    end.
    Dovrebbe essere corretto sia per quel che riguarda la sintassi che per quel che riguarda gli errori a tempo di esecuzione. Grazie a tutti comunque!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.