Я вот у здесь нашел http://forum.pascal.net.ru/index.php?showtopic=2694 "Инициализация массивов случайными значениями", а как правильно сделать инициализацию массива случаайными значениями и так чтобы это значения в массиве не повторялись в диопозоне 1 до 1000? Помогите пожалуйста!
я делаю так и незнаю как правильно сделать проверку на повторение :
Обрати внимание - дин. массив индексируется от 0 до N - 1...
procedure TForm1.Button5Click(Sender: TObject);
const
k = 1000;
var
mas: array of integer;
i, n, T, swap: integer;
begin
n := StrToInt(Edit1.Text);
SetLength(mas, k);
StringGrid1.RowCount := 1;
Randomize;
for i := 0 to k - 1 do mas[i] := i + 1;
// реализуем алгоритм перемешивания - Shuffle
for i := 0 to k - 1 do begin
swap := random(k);
T := mas[i];
mas[i] := mas[swap];
mas[swap] := T;
end;
StringGrid1.RowCount := n;
For i := 0 to n - 1 do
StringGrid1.Cells[0, i] := IntToStr(mas[i]);
SetLength(mas, 0); // Освобождаем массив
end;
Получается размер массива равен константе к , а мне надо размерность вводить самому т.е. размер массива должен быть равен N. При попытке изменить размер на N не выполняет ининцилизацию, почему?
SetLength(mas, n);
А зжесь нельзя размер массива самому произвольно вводить через Edit (n := StrToInt(Edit1.Text) - это должно быть размером массива ) ?
Добавлено через 2 мин.
ой, предидущее сообщен ие написал до редоктирования!
Можно-то оно можно, только пойми: если ты установишь размер массива не в 1000, то тебе придется при занесении элементов в этот массив проверять дубликаты вместо того чтобы просто заполнить элементы значениями индексов как это сделал я...
Да я понял, просто мне надо было изменить размер массива на N что бы потом в этом массиве производить поиск ключа. SetLength(mas, n); - это вроде помогло! Спасибо за помощь!