![]() |
|
#1
|
|||
|
|||
![]() Доброго времени суток уважаемые форумчане !
Я хочу перемешать числа в массиве (для того, чтоб получился неупорядоченный массив неповторяющихся чисел) делаю так : Создаю упорядоченный массив Код:
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 не помогло ![]() |