Oppure

Loading
27/09/09 16:30
matteog
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??
#include "stdafx.h"
#include <math.h>;
#include <iostream>
using namespace std;

int fattoriale(int numero);
int main()
{
	double p;
	double q;
	int N=0,K=0;
	double long hat,gat,lat;
	cout<<"quante prove vuoi fare??"<<endl;
	cin>>N;
	cout<<"quale e' la probabilità dell'evento??"<<endl;
	cin>>p;
	q=1-p;
    for(int I=0;I<N;I++)
	{
		long double space=0,mase=0,mat=0,cat=0,sat=0;
		gat=0;lat=0;hat=0;
		space=pow(p,K);
		mase=pow(q,(N-K));
		gat=fattoriale(N);hat=fattoriale(K);lat=fattoriale(N-K);
		sat=space*mase*(gat/(hat*lat));
		cout<<"ecco il valore della P : "<<sat<<endl;
	K++;
	}
	system("pause");
	return 0;
}
int fattoriale(int numero)
{
	int i;
	int f=1;
	for(i=1;i<=numero;i++)
	{
		f=f*i;
	}
	return f;
}







grazie mille a chi mi aiuterà:)
aaa
27/09/09 16:43
theprogrammer
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.
aaa
27/09/09 16:46
matteog
grazie amico sei grande!!adesso mi calcola fino a 100 anche se la stampa a video è sotto forma di esponenziale grazie
aaa
28/09/09 21:15
gigisoft
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 28/09/09 21:17
aaa