добавлен исходный код и ссылки
This commit is contained in:
parent
c83ed6cf42
commit
4be7b9c4ce
15 changed files with 438 additions and 1 deletions
26
01-знакомство-с-языком-d/src/chapter-1-6/app.d
Normal file
26
01-знакомство-с-языком-d/src/chapter-1-6/app.d
Normal file
|
@ -0,0 +1,26 @@
|
|||
import std.stdio : writeln, stdin;
|
||||
import std.exception : enforce;
|
||||
import stats;
|
||||
|
||||
void main(string[] args)
|
||||
{
|
||||
Stat[] stats;
|
||||
foreach (arg; args[1 .. $])
|
||||
{
|
||||
auto newStat = cast(Stat) Object.factory("stats." ~ arg);
|
||||
enforce(newStat, "Invalid statistics function: " ~ arg);
|
||||
stats ~= newStat;
|
||||
}
|
||||
for (double x; stdin.readf(" %s ", &x) == 1;)
|
||||
{
|
||||
foreach (s; stats)
|
||||
{
|
||||
s.accumulate(x);
|
||||
}
|
||||
}
|
||||
foreach (s; stats)
|
||||
{
|
||||
s.postprocess();
|
||||
writeln(s.result());
|
||||
}
|
||||
}
|
48
01-знакомство-с-языком-d/src/chapter-1-6/stats.d
Normal file
48
01-знакомство-с-языком-d/src/chapter-1-6/stats.d
Normal file
|
@ -0,0 +1,48 @@
|
|||
module stats;
|
||||
|
||||
interface Stat
|
||||
{
|
||||
void accumulate(double x);
|
||||
void postprocess();
|
||||
double result();
|
||||
}
|
||||
|
||||
class Min : Stat
|
||||
{
|
||||
private double min = double.max;
|
||||
|
||||
void accumulate(double x)
|
||||
{
|
||||
if (x < min)
|
||||
{
|
||||
min = x;
|
||||
}
|
||||
}
|
||||
|
||||
void postprocess() {} // Ничего не делать
|
||||
|
||||
double result()
|
||||
{
|
||||
return min;
|
||||
}
|
||||
}
|
||||
|
||||
class Max : Stat
|
||||
{
|
||||
private double max = double.min_normal;
|
||||
|
||||
void accumulate(double x)
|
||||
{
|
||||
if (x > max)
|
||||
{
|
||||
max = x;
|
||||
}
|
||||
}
|
||||
|
||||
void postprocess() {} // Ничего не делать
|
||||
|
||||
double result()
|
||||
{
|
||||
return max;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue