Percolation/Site percolation: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) m (→{{header|11l}}) |
m (→{{header|FreeBASIC}}: bug fixed) |
||
Line 850: | Line 850: | ||
#define WET "v" |
#define WET "v" |
||
Dim Shared As String grid |
Dim Shared As String grid |
||
Dim Shared As Integer last, lastrow, m, n |
Dim Shared As Integer last, lastrow, m, n |
||
Sub |
Sub makeGrid(x As Integer, y As Integer, p As Double) |
||
⚫ | |||
⚫ | |||
m = x |
m = x |
||
n = y |
n = y |
||
grid = String(x*(y+1)+1, Chr(10)) |
|||
last = Len(grid) |
last = Len(grid) |
||
lastrow = last - n |
|||
⚫ | |||
⚫ | |||
For i = 0 To x-1 |
For i = 0 To x-1 |
||
For j = 1 To y |
For j = 1 To y |
||
Mid(grid, 1+i*(y+1)+j, 1) = Iif(Rnd < p, EMPTY, SOLID) |
|||
Next j |
Next j |
||
Next i |
Next i |
||
End Sub |
End Sub |
||
Function ff(i As Integer) As |
Function ff(i As Integer) As Integer |
||
If i <= 0 Or i >= last Or |
If i <= 0 Or i >= last Or Mid(grid, i, 1) <> EMPTY Then Return 0 |
||
Mid(grid, i, 1) = WET |
|||
Return i >= lastrow Or |
Return (i >= lastrow) Or ff(i+m+1) Or ff(i+1) Or ff(i-1) Or ff(i-m-1) |
||
End Function |
End Function |
||
Line 881: | Line 881: | ||
End Function |
End Function |
||
Randomize Timer |
|||
⚫ | |||
⚫ | |||
⚫ | |||
percolate() |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
For |
For ip = 0 To 10 |
||
⚫ | |||
If i Mod 15 = 0 Then Print |
|||
Next i |
|||
⚫ | |||
For ip As Ubyte = 0 To 10 |
|||
p = ip / 10 |
p = ip / 10 |
||
cnt = 0 |
|||
For i = 1 To 10000 |
For i = 1 To 10000 |
||
makeGrid(15, 15, p) |
|||
cnt += (percolate() = 1) |
|||
Next i |
Next i |
||
Print Using "p=#.#: #.####"; p; |
Print Using "p=#.#: #.####"; p; Abs(cnt / 10000) |
||
Next ip |
Next ip |
||
Sleep</syntaxhighlight> |
Sleep</syntaxhighlight> |
||