Old Russian measure of length: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: add to_others method) |
(Added solution for Action!) |
||
Line 58: | Line 58: | ||
vershok: 22.497187852 |
vershok: 22.497187852 |
||
versta: 0.000937383 |
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> |
</pre> |
||