Jump to content

Price fraction: Difference between revisions

Add Seed7 example
(→‎{{header|C}}: not clever, but less error prone)
(Add Seed7 example)
Line 1,682:
1,00 1,00
</pre>
 
=={{header|Seed7}}==
<lang seed7>$ include "seed7_05.s7i";
include "float.s7i";
 
const func float: computePrice (in float: x) is func
result
var float: result is 0.0;
begin
if x >= 0.0 and x < 0.06 then
result := 0.10;
elsif x < 0.11 then
result := 0.18;
elsif x < 0.36 then
result := flt(((trunc(x * 100.0) - 11) div 5) * 6 + 26) / 100.0;
elsif x < 0.96 then
result := flt(((trunc(x * 100.0) - 31) div 5) * 4 + 50) / 100.0;
else
result := 1.0;
end if;
end func;
 
const proc: main is func
local
var integer: i is 0;
begin
for i range 0 to 100 do
writeln(flt(i) / 100.0 digits 2 <& " " <& computePrice(flt(i) / 100.0) digits 2);
end for;
end func;</lang>
 
The following variant of ''computePrice'' works with a table:
<lang seed7>const array array float: table is [] (
[] (0.06, 0.10), [] (0.11, 0.18), [] (0.16, 0.26), [] (0.21, 0.32), [] (0.26, 0.38),
[] (0.31, 0.44), [] (0.36, 0.50), [] (0.41, 0.54), [] (0.46, 0.58), [] (0.51, 0.62),
[] (0.56, 0.66), [] (0.61, 0.70), [] (0.66, 0.74), [] (0.71, 0.78), [] (0.76, 0.82),
[] (0.81, 0.86), [] (0.86, 0.90), [] (0.91, 0.94), [] (0.96, 0.98), [] (1.01, 1.00));
 
const func float: computePrice (in float: x) is func
result
var float: result is 0.0;
local
var integer: index is 1;
begin
if x >= 0.0 then
while x >= table[index][1] do
incr(index);
end while;
result := table[index][2];
else
raise RANGE_ERROR;
end if;
end func;</lang>
 
=={{header|Smalltalk}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.