Old Russian measure of length: Difference between revisions

Added solution for Action!
(→‎{{header|Ruby}}: add to_others method)
(Added solution for Action!)
Line 58:
vershok: 22.497187852
versta: 0.000937383
</pre>
 
=={{header|Action!}}==
{{libheader|Action! Real Math}}
<lang Action!>INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
 
DEFINE PTR="CARD"
DEFINE UNIT_COUNT="10"
 
PTR ARRAY
names(UNIT_COUNT),
values(UNIT_COUNT)
BYTE count=[0]
 
PROC Append(CHAR ARRAY name REAL POINTER value)
names(count)=name
values(count)=value
count==+1
RETURN
 
PROC Init()
REAL
arshin,centimeter,kilometer,meter,
sazhen,vershok,versta
 
ValR("0.7112",arshin) Append("arshins",arshin)
ValR("0.01",centimeter) Append("centimeters",centimeter)
ValR("1000",kilometer) Append("kilometers",kilometer)
ValR("1",meter) Append("meters",meter)
ValR("2.1336",sazhen) Append("sazhens",sazhen)
ValR("0.04445",vershok) Append("vershoks",vershok)
ValR("1066.8",versta) Append("versts",versta)
RETURN
 
BYTE FUNC GetUnit()
BYTE i,res
 
FOR i=1 TO count
DO
PrintF("%B-%S",i,names(i-1))
IF i<count THEN Put(32) FI
OD
PutE()
DO
PrintF("Get unit (1-%B): ",count)
res=InputB()
UNTIL res>=1 AND res<=count
OD
RETURN (res-1)
 
PROC PrintResult(REAL POINTER value BYTE unit)
BYTE i
REAL res,tmp
 
PutE()
FOR i=0 TO count-1
DO
IF i=unit THEN
RealAssign(value,res)
ELSE
RealMult(value,values(unit),tmp)
RealDiv(tmp,values(i),res)
FI
Print(" ") PrintR(res)
PrintF(" %S%E",names(i))
OD
PutE()
RETURN
 
PROC Main()
BYTE unit
REAL value
 
Put(125) PutE() ;clear screen
Init()
 
DO
Print("Get value: ")
InputR(value)
unit=GetUnit()
PrintResult(value,unit)
OD
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Old_Russian_measure_of_length.png Screenshot from Atari 8-bit computer]
<pre>
Get value: 1
1-arshins 2-centimeters 3-kilometers 4-meters 5-sazhens 6-vershoks 7-versts
Get unit (1-7): 4
 
1.40607424 arshins
100 centimeters
1.0E-03 kilometers
1 meters
.4686914135 sazhens
22.49718785 vershoks
9.37382827E-04 versts
 
Get value: 10
1-arshins 2-centimeters 3-kilometers 4-meters 5-sazhens 6-vershoks 7-versts
Get unit (1-7): 7
 
15000 arshins
1066800 centimeters
10.668 kilometers
10668 meters
5000 sazhens
240000 vershoks
10 versts
</pre>
 
Anonymous user