в общем алгоритм такой: тупо генерим 5 случайных чисел(в твоем примере от 0 до 447). сохраняем их в массив. этот массив отсортировывем. а потом собственно получаем диапазоны, то есть твои части))
в принципе можно столкнуться с такой проблемой, что может сгенерится одинаковые числа, но это не страшно, просто какие-то компоненты одинаковые будут. да и проверку можно вставить непосредственно перед генерацией элемента.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
m:array[1..4] of integer;
i,j,n,r2,r,temp:integer;
begin
randomize;
n:=4;
r:=0;
r2:=0;
for i:=1 to n-1 do
begin
m[i]:=random(447);
for j:=1 to i do
if m[i]<m[j] then
begin
temp:=m[i];
m[i]:=m[j];
m[j]:=temp;
end;
end;
m[4]:=447;
for i:=1 to n do
begin
r:=(m[i]-r2);
r2:=m[i];
m[i]:=r;
end;
form1.Caption:='';
for i:=1 to 4 do
form1.Caption:= form1.Caption+inttostr(m[i])+';';
end;