Option Explicit
Dim n As Integer
Dim p As Double
Dim q As Double 'probabilità di fallimento
Dim yMax As Double
Dim xMax As Double
Dim yMin As Double
Dim xMin As Double
Dim bernoul As Boolean
Dim pois As Boolean
Dim gaus As Boolean
Dim scrittaP(0 To 1000) As String
Dim scrittaB(0 To 1000) As String
Dim scrittaG(0 To 1000) As String
Dim vdis(0 To 1000) As Double 'vettore distribuzione usata
'Disegna gli assi cartesiani
Private Sub cmdAssi_Click()
xMax = Val(txtProve.Text) + 1.6
'imposta la scala tenendo conto del numero di prove
grafico.Scale (xMin, yMax)-(xMax, yMin)
'asse x
grafico.Line (xMin, 0)-(xMax, 0)
'asse y
grafico.Line (0, yMax)-(0, (yMin - 0.05))
End Sub
'Operazioni con Gauss
Private Sub CmdGauss_Click()
Dim i As Double
n = Val(txtProve.Text)
p = Val(txtP.Text)
If (n = Null Or n < 1 Or n > 1000 Or p < 0 Or p > 1 Or p = Null) Then
MsgBox "Errore nell'inserimento dei dati...prego controllare!", vbCritical, "ERRORE"
Else
Dim var As Double
Dim mu As Double
Dim pgreco As Double
Dim gaussiana As Double
Dim gaussy As Double
pgreco = 3.14
mu = n * p
var = n * p * (1 - p)
lblRis.Caption = "Risultato Gauss :"
lstRis.Clear
frmTabella.lstGauss.Clear
'curva di gauss
For i = -0.6 To n + 1.6 Step 0.005
gaussiana = (1 / (Sqr(var * 2 * pgreco))) * (Exp(-((i - mu) ^ 2) / (2 * var)))
grafico.PSet (i, gaussiana), vbGreen
Next i
'risultati
For i = 0 To n
gaussy = (1 / (Sqr(var * 2 * pgreco))) * (Exp(-((i - mu) ^ 2) / (2 * var)))
scrittaG(i) = "P(" & i & ")=" & gaussy
lstRis.AddItem scrittaG(i)
Next i
gaus = True
End If
End Sub
'Operazioni con Poisson
Private Sub CmdPoisson_Click()
Dim i As Integer 'variabile contatore
n = Val(txtProve.Text)
p = Val(txtP.Text)
If (n = Null Or n < 1 Or n > 1000 Or p < 0 Or p > 1 Or p = Null) Then
MsgBox "Errore nell'inserimento dei dati...prego controllare!", vbCritical, "ERRORE"
Else
For i = 0 To n
vdis(i) = Poisson(i)
Next i
For i = 0 To n
'sinistro
grafico.Line (i - 0.5, 0)-(i - 0.5, vdis(i)), QBColor(6)
'destro
grafico.Line (i + 0.5, 0)-(i + 0.5, vdis(i)), QBColor(6)
'tetto
grafico.Line (i - 0.5, vdis(i))-(i + 0.5, vdis(i)), QBColor(6)
Next i
lblRis.Caption = "Risultato Poisson :"
lstRis.Clear
frmTabella.lstPoisson.Clear
For i = 0 To n
scrittaP(i) = "P(" & i & ")=" & vdis(i)
lstRis.AddItem scrittaP(i)
Next i
pois = True
End If
End Sub
'Formula di Poisson
Private Function Poisson(ByVal x As Integer) As Double
Dim div As Double
Dim i As Double
div = 1
If x > 0 Then
For i = 0 To x - 1
div = div * (n * p) / (x - i)
Next i
End If
Poisson = div * Exp(-(n * p)) 'probabilità di Poisson
End Function
'pulisce le textBox, la listBox e il grafico
Private Sub cmdPulisci_Click()
grafico.Cls
txtP.Text = ""
txtProve.Text = ""
lstRis.Clear
lblRis.Caption = "Risultato :"
frmTabella.lstBernoulli.Clear
frmTabella.lstPoisson.Clear
frmTabella.lstGauss.Clear
bernoul = False
pois = False
gaus = False
End Sub
'si occupa di far visualizzare la tabella
Private Sub CmdTabella_Click()
Dim i As Integer
frmTabella.Show
frmMain.Visible = False
'poisson
If pois = True Then
For i = 0 To n
frmTabella.lstPoisson.AddItem scrittaP(i)
Next i
End If
'bernoulli
If bernoul = True Then
For i = 0 To n
frmTabella.lstBernoulli.AddItem scrittaB(i)
Next i
End If
'gaus
If gaus = True Then
For i = 0 To n
frmTabella.lstGauss.AddItem scrittaG(i)
Next i
End If
End Sub
'gestisce l'entrata
Private Sub Form_Load()
n = 10
p = 0.5
yMax = 1
xMin = -0.6
yMin = -0.05
lblRis.Caption = "Risultato :"
bernoul = False
pois = False
gaus = False
End Sub
'Calcola il fattoriale
Public Function Fattoriale(num As Double) As Double
Dim F As Double
F = 1
Do While num > 0
F = F * num
num = num - 1
Loop
Fattoriale = F
End Function
'Formula di Bernoulli
Private Function bernoulli(ByVal x, ByVal probability) As Double
Dim combinazioni As Double
Dim t As Double 'variabile contatore
combinazioni = 1 'inizializzo le combinazioni a 1
q = 1 - p 'probabilità di fallimento
probability = probability ^ x
q = q ^ (n - x)
For t = 0 To x - 1
combinazioni = combinazioni * ((n - t) / (x - t))
Next t
bernoulli = combinazioni * probability * q 'probabilità di Bernoulli
End Function
'Operazioni con Bernoulli
Private Sub cmdBernoulli_Click()
Dim i As Integer 'variabile contatore
n = Val(txtProve.Text)
p = Val(txtP.Text)
If (n = Null Or n < 1 Or n > 1000 Or p < 0 Or p > 1 Or p = Null) Then
MsgBox "Errore nell'inserimento dei dati...prego controllare!", vbCritical, "ERRORE"
Else
For i = 0 To n
vdis(i) = bernoulli(i, p)
Next i
For i = 0 To n
'sinistro
grafico.Line (i - 0.5, 0)-(i - 0.5, vdis(i)), QBColor(4)
'destro
grafico.Line (i + 0.5, 0)-(i + 0.5, vdis(i)), QBColor(4)
'tetto
grafico.Line (i - 0.5, vdis(i))-(i + 0.5, vdis(i)), QBColor(4)
Next i
lblRis.Caption = "Risultato Bernoulli :"
lstRis.Clear
frmTabella.lstBernoulli.Clear
For i = 0 To n
scrittaB(i) = "P(" & i & ")=" & vdis(i)
lstRis.AddItem scrittaB(i)
Next i
bernoul = True
End If
End Sub