Newsgroup: it.comp.lang.visual-basic
Titolo: problema probabilistico...

Ciao a tutti,
devo scrivere una macro in excel che mi scriva sul foglio tutte le
combinazioni possibili che si potrebbero ottenere lanciando 10 volte
una moneta con possibili valori di 1 e -1 (come se fosse testa-croce)
la probabilità per entrambi è di 0.5 e ogni lancio è indipendente
dall'evento precedente. Qualcuno può aiutarmi? penso che si tratti di
un ciclo ma non so assolutamente come iniziare. Grazie a chiunque
voglia aiutarmi.

 ha scritto nel messaggio
news:828c10d7.02080...@posting.google.com...

Immagina che il tuo -1 sia uno 0. Quindi tu vuoi trovare tutte le stringhe
di 10 cifre composti con i numeri 0 e 1.
Quindi è come dire che ti servono tutti i numeri scritti in base 2 compresi
tra 0000000000 e 1111111111. in base 10 , 1111111111 equivale a
1+2+2^2+2^3+...+2^9=2^10-1.
Quindi per trovare tutti i numeri fai un ciclo con i tra 0 e 2^10-1=1023 e
trasformi ogni volta i in base 2 completando eventualmente con degli 0
quando il numero ottenuto abbia meno cifre di 10 (esempio se i=10 ==> i in
base 2=1010 e completato con 0 quanto bastano per arrivare a 10 cifre
diventa 0000001010). Fatto ciò scandisci il numero ottenuto in base 2 cifra
per cifra e trasformi ogni 0 in -1 e il gioco è fatto.
Spero di essere stato chiaro.
Giacomo Bellucci
Dipartimento di Matematica
"Leonida Tonelli"
Università degli Studi di Pisa

 ha scritto nel messaggio
news:828c10d7.02080...@posting.google.com...

Il modo più gnocco è mettere nella prima colonna tutti i numeri decimali da
0 a 2^(n-1), dove n è il numero di lanci.
Poi si mette nella seconda colonna la stringa binaria equivalente.
Nella terza colonna si aggiungono gli zeri a sinistra per arrivare a n
caratteri
Nelle colonne successive si spezza la stringa contenuta nella terza colonna.
A questo punto si ha una sequenza di celle contenenti 0 o 1, rappresentanti
tutte le possibili combinazioni.
E' talmente facile che volendo lo puoi fare anche con il registratore,
facendo alla fine poche modifiche.
Ciao
Alberto

 una moneta con possibili valori di 1 e -1 (come se fosse testa-croce)
tenendo per buono quanto gia' detto da Giacomo:
Sub Sviluppa()
    Dim Risposta As String
    Dim Stringa As String, Numero As Long, Ricorrenze As Integer
    Risposta = InputBox("Inserisci il numero di Ricorrenze: ", "Sviluppo",
2)
    Ricorrenze = Val(Risposta)
    Stringa = String(Ricorrenze, "0")
    For Numero = 0 To (2 ^ Ricorrenze) - 1
        Range("a" & CStr(Numero) + 1).Select
        Selection.NumberFormat = Stringa
        Selection.Value = Calcolo(Stringa, Numero, Ricorrenze)
' SE PROPRIO VUOI IL -1 ALLORA
' UTILIZZA IL CODICE QUI SOTTO
'        Selection.NumberFormat = "@"
'        Selection.Value = Replace(Calcolo(Stringa, Numero, Ricorrenze),
"0", "-1")
    Next Numero
    MsgBox "finito"
'
End Sub
Function Calcolo(ByVal Stringa As String, ByVal Numero As Long, Volte As
Integer) As String
    Dim N As Integer, Valore As Long
    For N = Volte - 1 To 0 Step -1
        Valore = 2 ^ N
        If (Numero \ Valore) = 1 Then
            Numero = Numero - Valore
            Mid(Stringa, Volte - N, 1) = "1"
        End If
    Next N
    Calcolo = Stringa
End Function
beppe

ale chiede

Ecco una soluzione ricorsiva:
------------
Private Const n = 10
Private iSol As Integer
Private Sub monete(ByVal i As Integer)
  If i = n + 1 Then
    iSol = iSol + 1
  Else
    Cells(iSol + 1, i) = -1
    monete i + 1
    Cells(iSol + 1, i) = 1
    monete i + 1
  End If
End Sub
Public Sub start()
  Range(Cells(2, 1), Cells(2 ^ n + 1, n)).FormulaR1C1 = "=R[-1]C"
  iSol = 0
  monete 1
End Sub
------------------
Ciao, Silv:o)