Показать сообщение отдельно
  #1  
Старый 21.08.2009, 13:23
kaizer131 kaizer131 вне форума
Начинающий
 
Регистрация: 01.11.2008
Сообщения: 112
Репутация: 10
По умолчанию перемешать массив

Доброго времени суток уважаемые форумчане !
Я хочу перемешать числа в массиве (для того, чтоб получился неупорядоченный массив неповторяющихся чисел)
делаю так :
Создаю упорядоченный массив
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
i,a:integer;
begin
 a:=1;
for I := 0 to n-1   do
  begin
   osn_mass[i]:=a;
   a:=a+1;
  end;
end;

затем при показе формы перемешиваю его и вывожу в label :
Код:
procedure TForm1.FormShow(Sender: TObject);
var
i,tmp,j,z:integer;
s:string;
begin
for I := 0 to n-1  do
begin
Randomize;
j:=Random(n);
z:=Random(n);
tmp:=osn_mass[z];
osn_mass[z]:=osn_mass[j];
osn_mass[j]:=tmp;
end;
 s:='';
for I := 0 to n-1  do
  begin
   s:=s+ Inttostr( osn_mass[i])+' ';
  end;
   form1.Label1.Caption:= s;
end;
При компиляции выдаёт ошибку
First chance exception at $7C81EB33. Exception class EAccessViolation with message 'Access violation at address 00465B9D in module '....exe'. Read of address 0000037C'. Process .....exe (15052)
и указывает на строку form1.Label1.Caption:= s;
Насколько я понимаю проблемы с памятью, при прогоне програппы по строкам (F7) обратил внимание что последний элемент массива всегда принимает значение 0 , и при обращении к нему возможно возникает ошибка .
Подскажите в чём может быть проблема ?
PS: Изменение условия цикла на for I := 1 to n do и от for I := 1 to n-1 do не помогло
Ответить с цитированием