Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - bernulli programma che stampa il valore della probabilità nella distribuzione
Forum - C/C++ - bernulli programma che stampa il valore della probabilità nella distribuzione

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 18:30
Domenica, 27/09/2009
ho un problema se infatti scrivo un valore del genere 60 quando mi chiede fino a quando deve ripetere mi stamapa dei valori insensati mi sapete consigliare come fare per aumentare la portata delle variabili??cè un modo per aumentare la grandezza di queste??
Codice sorgente - presumibilmente C

  1. #include "stdafx.h"
  2. #include <math.h>;
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int fattoriale(int numero);
  7. int main()
  8. {
  9.         double p;
  10.         double q;
  11.         int N=0,K=0;
  12.         double long hat,gat,lat;
  13.         cout<<"quante prove vuoi fare??"<<endl;
  14.         cin>>N;
  15.         cout<<"quale e' la probabilità dell'evento??"<<endl;
  16.         cin>>p;
  17.         q=1-p;
  18.     for(int I=0;I<N;I++)
  19.         {
  20.                 long double space=0,mase=0,mat=0,cat=0,sat=0;
  21.                 gat=0;lat=0;hat=0;
  22.                 space=pow(p,K);
  23.                 mase=pow(q,(N-K));
  24.                 gat=fattoriale(N);hat=fattoriale(K);lat=fattoriale(N-K);
  25.                 sat=space*mase*(gat/(hat*lat));
  26.                 cout<<"ecco il valore della P : "<<sat<<endl;
  27.         K++;
  28.         }
  29.         system("pause");
  30.         return 0;
  31. }
  32. int fattoriale(int numero)
  33. {
  34.         int i;
  35.         int f=1;
  36.         for(i=1;i<=numero;i++)
  37.         {
  38.                 f=f*i;
  39.         }
  40.         return f;
  41. }



grazie mille a chi mi aiuterà:)

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:43
Domenica, 27/09/2009
La funzione

fattoriale

restituisce un int.

Devi modificarla per farle restituire un long double (ovviamente, calcolando con questo tipo di dato).

Ma attenzione perche' oltre un certo valore, non hai modo di calcolare il fattoriale con i tipi di dati standard.

PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 18:46
Domenica, 27/09/2009
grazie amico sei grande!!adesso mi calcola fino a 100 anche se la stampa a video è sotto forma di esponenziale grazie

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 23:15
Lunedì, 28/09/2009
Salve,

la tua formula


gat=fattoriale(N);hat=fattoriale(K);lat=fattoriale(N-K);
... (gat/(hat*lat));


equivale alla formula del coefficiente binomiale C(n,k)

ebbene esiste un metodo ricorsivo per calcolarlo senza fare uso del fattoriale:

C(n, k) = C(n - 1, k - 1) + C(n - 1, k)

con C(n,0) = C(n,n) = C(0,0) = 1

computazionalmente dovrebbe essere lievemente piu' oneroso, ma evita che il risultato dei fattoriali esploda in valori troppo alti, alzando un po' il limite dei valori calcolabili.

Ciao. :k:

Luigi

Ultima modifica effettuata da gigisoft il 28/09/2009 alle 23:17
PM Quote