Resistor mesh: Difference between revisions

Content added Content deleted
(added FreeBASIC)
Line 458: Line 458:
endfunction
endfunction
</lang>
</lang>
=={{Header|FreeBASIC}}==
<lang freebasic>' version 01-07-2018
' compile with: fbc -s console

#Define n 10

Dim As UInteger nn = n * n
Dim As Double g(-nn To nn +1, -nn To nn +1)
Dim As UInteger node, row, col

For row = 1 To n
For col = 1 To n
node += 1
If row > 1 Then
g(node, node) += 1
g(node, node - n) = -1
End If
If row < n Then
g(node, node) += 1
g(node, node + n) = -1
End If
If col > 1 Then
g(node, node) += 1
g(node, node -1) = -1
End If
If col < n Then
g(node, node) += 1
g(node, node +1) = -1
End If
Next
Next

Dim As UInteger ar = 2, ac = 2
Dim As UInteger br = 7, bc = 8
Dim As UInteger a = ac + n * (ar -1)
Dim As UInteger b = bc + n * (br -1)

g(a, nn +1) = -1
g(b, nn +1) = 1

Print : Print "Nodes a: "; a, " b: "; b

' solve linear system using Gauss-Seidel method with pivoting
Dim As UInteger i, j, k
Dim As Double y

Do
For j = 1 To nn
For i = j To nn
If g(i, j) <> 0 Then Exit For
Next
If i = nn +1 Then
Print : Print "No solution"
Exit Do
End If
For k = 1 To nn +1
Swap g(j, k), g(i, k)
Next
y = g(j, j)
For k = 1 To nn +1
g(j, k) = g(j, k) / y
Next
For i = 1 To nn
If i <> j Then
y = -g(i, j)
For k = 1 To nn +1
g(i, k) = g(i, k) + y * g(j, k)
Next
End If
Next
Next

Print
Print "Resistance ="; Abs(g(a, nn +1) - g(b, nn +1)); " Ohm"
Exit Do
Loop

' empty keyboard buffer
While Inkey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
End</lang>
{{out}}
<pre>Nodes a: 12 b: 68

Resistance = 1.60899124173073 Ohm</pre>


=={{header|Go}}==
=={{header|Go}}==