Newsgroup: it.comp.lang.visual-basic
Titolo: piccolo aiuto

premetto che ho iniziato a studiare Visual Basic da poche settimane, quindi
confido nella vostra indulgenza..
Ho provato a realizzare uno dei miei primi programmini per imparare e non ho
capito alcune cose.
Il "programma" ha il compito di calcolare la l'area compresa tra due estremi
in imput della distribuzione normale.
Ho seguito questi steps:
- tra i riferimenti seleziono "Microsoft excel 9.0 object library"
- aggiungo due textbox al form
- aggiungo due command button al form
-  scrivo il codice:
Private Sub Command1_Click()
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Dim e As Double
a = Text1.Text
b = Text2.Text
c = Excel.WorksheetFunction.NormDist(a, 0, 1, True)
d = Excel.WorksheetFunction.NormDist(b, 0, 1, True)
e = d - c
MsgBox e
End Sub
(non mi importa "migliorarlo" o fare la gestione degli errori, per ora, ma
solo capire)
- creo il file .exe
 il file è perfettamente funzionante se inserisco nelle text box i valori
"-1" e "+1" mi d com risultato 0,68, proprio il risultato che mi attendo.
Fin qui tutto a posto.
Il problema è che, per voi è sicuaramente ovvio, questo programma funziona
solo se si ha excel installato.
come posso far girare il programma anche su un computer che non ha istallato
office?
grazie

 solo se si ha excel installato.
Benvenuto nel mondo COM/ActiveX :)
1° Perchè ti appoggi a excell per i calcoli che vuoi fare?
a) Non sai implementarli e usi qualcosa di già fatto, ma allora se vuoi
imparare perchè non provi con qualcosa che sai?
b) Vuoi imparare a sfruttare il motore di excell, ma allora è ovvio che ti
serve excell :)
2° I riferimenti che ti ritrovi in VB non sono messi a caso: sono tutti i
componenti ActiveX (beh, non tutti molti sono elencati nei componenti, altri
in tutti e due...) che hai installato, e che possono far parte dei più
diversi programmi (office, appunto, Acrobat reader, DirectX, ecc...).
Vuoi usarli? Se sono liberi puoi farlo, a patto che li installi come si deve
sul PC di destinazione.
Per i riferimenti a excell _devi_ avere excell :(
Per la maggior parte basta dare il tuo progetto in pasto al setup wizard e
ci pensa lui a farti un setup del tuo programma.
Per il resto... ci sarebbe da scrivere un (centinaio?) libro, ma non ho ne
voglia, ne tempo, ne le conoscenze adatte a farlo :)
Ciao

 grazie
Condivido tutto quanto ti ha scritto zanna in primo luogo, non potrei fare
altrimenti.
Cmq,ragionando alla buona e con il beneficio di inventario, per risolvere il
tuo problema la cosa è "abbastanza" semplice.
Diciamo che "l' aggiunta principale" che devi fare al tuo programma non è
altro che una funzione che ricrei la funzione di calcolo che usi in Excel.
Ovviamente poi dovrai richiamare la funzione che hai creato tu al posto di
quella che hai usato in excel.
Prima di creare la funzione di calcolo sulla distribuzione Normale devi
sapere di quali strumenti hai bisogno.
Se non ricordo male, anzi sono sicuro, la funzione della distribuzione
nonrmale non è integrabile (in senso matematico), ma per calcolarla ti
servono le tabelle dei quantili, oppure ti crei una procedura "passo passo"
che partendo dal valore di a fino al valore b, con apporssimazione da te
scelta, calcoli i valori della funzione.
Insomma, i passaggi teorici dovresti riuscire a ricostruirli, è semplice
matematica.
Non ho mai provato sinceramente, ma credo che sarebbe interessante.
A questo punto, una volta creata la funzione il gioco è fatto.
Se hai bisogno di aiuto per creare la funzione rispondimi pure in privato
(togli le "k" dall'indirizzo).
Ciao.

Giuseppe:
  puoi fare tutto da VB.  Ti allego una routine per il
calcolo dell' integrale definito tra due estremi A e B:
nel tuo caso la funzione da integrare (F_Inte) e' la
espressione della distribuzione normale.
Ciao e se poi avessi problemi con il suo uso, contattami
pure.
Franco
Web: 
http://www.flanguasco.org
-----------------------------------------------------------------------------------
Public Const PI# = 3.14159265358979 ' 4# * Atn(1#)
Public Function Integra(ByVal A#, ByVal B#, Optional ByVal EPS# = 0.0001) As Double
'
'   Routine per il calcolo dell' Integrale Definito  di F_Inte(x)
'   compreso tra A e B.
'
'   Tradotto dalla Subroutine FORTRAN di:
'       Mathematical Methods for Digital Computers  Vol. II
'       di A. Ralston, H. S. Wilf
'       John Wiley & Sons, Inc.
'
'
    Dim K&, N&, J&, J1&, L&, u&, V&
    Dim h#, F#, Sig#
    ReDim W#(1 To 50, 1 To 50)
'
    h = B - A
    K = 0
    F = F_Inte(A)
    W(1, 1) = ((F_Inte(A + h) + F) * h) / 2#
'
    Do
        K = K + 1
        h = h / 2#
        Sig = 0
        N = 2 ^ (K - 1)
        For J = 1 To N
            J1 = 2 * J - 1
            Sig = Sig + F_Inte(A + J1 * h)
        Next J
'
        W(K + 1, 1) = W(K, 1) / 2# + h * Sig
        For L = 1 To K
            u = K + 1 - L
            V = L + 1
            W(u, V) = (4# ^ (V - 1) * W(u + 1, V - 1) - W(u, V - 1)) _
                    / (4# ^ (V - 1) - 1)
        Next L
    Loop While Abs(W(u, V) - W(u, V - 1)) > EPS
'
    Integra = W(1, V)
'
'
'
End Function
Private Function F_Inte(ByVal X#) As Double
'
'
    F_Inte = Exp(-X * X / 2) / Sqr(2 * PI) ' Distribuzione Normale.
'
'
'
End Function

 Per i riferimenti a excell _devi_ avere excell :(
che intendi per "liberi"? free, cioè gratuiti?
Comunque grazie per l'aiuto, sei stato chiaro, (purtroppo) ho capito
Solo una cosa non mi è chiara, se le librerie non possono essere sfruttate
per le proprie applicazioni indipendenti, che c...volo le hanno messe a
fare?
ciao