RosettaCodeData/Task/Statistics-Basic/XPL0/statistics-basic.xpl0

50 lines
1.2 KiB
Plaintext

include xpllib; \for Print
func real Mean(X, N);
real X; int N;
real Sum; int I;
[Sum:= 0.;
for I:= 0 to N-1 do
Sum:= Sum + X(I);
return Sum/float(N);
];
func real StdDev(X, N, Mean);
real X; int N; real Mean;
real Sum; int I;
[Sum:= 0.;
for I:= 0 to N-1 do
Sum:= Sum + sq(X(I) - Mean);
return sqrt(Sum/float(N));
];
int Size, J, K, Sums(10), Scale;
real A, M;
[Size:= 100;
repeat A:= RlRes(Size);
for J:= 0 to Size-1 do
A(J):= float(Ran(1_000_000)) / 1e6;
Print("For %d random numbers:\n", Size);
M:= Mean(A, Size);
Print(" mean = %1.9f\n", M);
Print(" stddev = %1.9f\n", StdDev(A, Size, M));
Scale:= Size / 100;
Print(" scale = %d per asterisk\n", Scale);
for J:= 0 to 10-1 do Sums(J):= 0;
for J:= 0 to Size-1 do
[K:= fix(Floor(A(J)*10.));
Sums(K):= Sums(K)+1;
];
for J:= 0 to 8 do
[Sums(J):= Sums(J) / Scale;
Print(" 0.%d - 0.%d: ", J, J+1);
for K:= 1 to Sums(J) do ChOut(0, ^*);
CrLf(0);
];
Print(" 0.9 - 1.0: ");
for K:= 1 to Sums(9)/Scale do ChOut(0, ^*);
CrLf(0); CrLf(0);
Size:= Size * 10;
until Size > 10_000;
]