JEST TO w ogóle DO ZROBIENIA???
Hmm.. Spróbujmy :>
uses Math
...
type
TArr = array of Integer;
...
procedure PodzielNaLiczby(Liczba, IleSkladnikow: Integer; Variation: Real; var Tablica: TArr);
var
a,b,c,g,i: Integer;
begin
Randomize;
SetLength(Tablica,IleSkladnikow);
b:=0; g:=0;
for i:=1 to IleSkladnikow do begin
a:=(Liczba*i) div IleSkladnikow-b;
Inc(b,a);
repeat
c:=Random(Round(2*Variation*a))+Round((1-Variation)*a)
until c>=0;
Inc(g,c);
Tablica[i-1]:=c;
end;
g:=Liczba-g;
while g<>0 do for i:=0 to High(Tablica) do begin
a:=Tablica[i]+Sign(g);
if a>=0 then begin
Tablica[i]:=a;
Dec(g,Sign(g));
end;
end;
end;
Objaśnienia:
Liczba - liczba którą dzielimy
IleSkladnikow - bez komentarza
Variation - liczba z zakresu 0..1 oznaczająca maksymalne odchylenie od wartości średniej; jeżeli ustawimy 0 wszystkie liczby będą prawie równe; jeżeli 1 bardzo zróżnicowane.
Tablica - "procedural result"