Я пытаюсь написать код в VBA, который возвращает вероятность получения суммы S, бросающей X кубиков, каждая с Y сторонами (например, бросая 1 шестигранный кубик + 2 восьмигранных кубика + 2 четырехсторонних кубика ).
Учитывая мой плохой опыт и знания VBA, я написал некрасивый код, который охватывает X <= 5; что я хотел бы получить, так это найти более простой, лучший и более оптимизированный способ использования произвольно большого X. </p>
Вот мой код:
Sub Somma()
Dim dado1, dado2, dado3, dado4, dado5 As Integer
Dim inp As Double
Dim prob As Long
som = Sheets("Prob").Range("d11").Value
'set each variable to each die's sides
dado1 = Sheets("Prob").Range("d2").Value
dado2 = Sheets("Prob").Range("d3").Value
dado3 = Sheets("Prob").Range("d4").Value
dado4 = Sheets("Prob").Range("d5").Value
dado5 = Sheets("Prob").Range("d6").Value
prob = 0
If Sheets("Prob").Range("d7").Value = 2 Then 'how many dice are used
For d1 = 1 To dado1
For d2 = 1 To dado2
If d1 + d2 >= inp Then prob = prob + 1
Next d2
Next d1
Sheets("Prob").Range("d14").Value = prob
Else
If Sheets("Prob").Range("d7").Value = 3 Then
For d1 = 1 To dado1
For d2 = 1 To dado2
For d3 = 1 To dado3
If d1 + d2 + d3 >= inp Then prob = prob + 1
Next d3
Next d2
Next d1
Sheets("Prob").Range("d14").Value = prob
Else
If Sheets("Prob").Range("d7").Value = 4 Then
For d1 = 1 To dado1
For d2 = 1 To dado2
For d3 = 1 To dado3
For d4 = 1 To dado4
If d1 + d2 + d3 + d4 >= inp Then prob = prob + 1
Next d4
Next d3
Next d2
Next d1
Sheets("Prob").Range("d14").Value = prob
Else
For d1 = 1 To dado1
For d2 = 1 To dado2
For d3 = 1 To dado3
For d4 = 1 To dado4
For d5 = 1 To dado5
If d1 + d2 + d3 + d4 + d5 >= inp Then prob = prob + 1
Next d5
Next d4
Next d3
Next d2
Next d1
Sheets("Prob").Range("d14").Value = prob
End If
End If
End If
End Sub
Это прекрасно работает, но, как было сказано ранее:
- это некрасиво
- ограничено.