Resistance calculator: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 179:
print " Ohm Volt Ampere Watt Network tree"
node.report ""
</lang>
 
;Nim Infix
<lang nim>
import strutils,strformat,sugar,sequtils
 
type
Resistor = ref object of RootObj
symbol : char
resistance,voltage : float
a,b : Resistor
 
proc res(r:Resistor) : float =
if r.symbol == '+': return r.a.res + r.b.res
if r.symbol == '*': return 1 / (1 / r.a.res + 1 / r.b.res)
r.resistance
proc setVoltage(r:Resistor, voltage:float) =
if r.symbol == '+':
let ra = r.a.res
let rb = r.b.res
r.a.setVoltage ra/(ra+rb) * voltage
r.b.setVoltage rb/(ra+rb) * voltage
if r.symbol == '*':
r.a.setVoltage voltage
r.b.setVoltage voltage
r.voltage = voltage
proc current(r:Resistor) : auto = return r.voltage / r.res
proc effect(r:Resistor) : auto = return r.current * r.voltage
proc report(r:Resistor,level:string="") =
echo fmt"{r.res:8.3f} {r.voltage:8.3f} {r.current:8.3f} {r.effect:8.3f} {level}{r.symbol}"
if r.a!=nil: r.a.report level & "| "
if r.b!=nil: r.b.report level & "| "
proc `+`*(r:Resistor,other:Resistor) : auto = return Resistor(symbol:'+', a:r, b:other)
proc `*`*(r:Resistor,other:Resistor) : auto = return Resistor(symbol:'*', a:r, b:other)
 
var R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10 : Resistor
let resistors = [6,8,4,8,4,6,8,10,6,2].map(res => Resistor(symbol:'r',resistance:res.float))
(R1,R2,R3,R4,R5,R6,R7,R8,R9,R10) = resistors
let node = ((((R8 + R10) * R9 + R7) * R6 + R5) * R4 + R3) * R2 + R1
node.setVoltage(18)
echo(" Ohm Volt Ampere Watt Network tree")
node.report()
</lang>