IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Инициализация массивов
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: andrey

Репутация: -  0  +


Я вот у здесь нашел Массивы. Матрицы. Типичные задачи. "Инициализация массивов случайными значениями", а как правильно сделать инициализацию массива случаайными значениями и так чтобы это значения в массиве не повторялись в диопозоне 1 до 1000? Помогите пожалуйста!

я делаю так и незнаю как правильно сделать проверку на повторение :

Код

rocedure TForm1.Button1Click(Sender: TObject);
const
k=1000;
var
mas:array of integer;
i,n:integer;
begin
n:=StrToInt(Edit1.Text);
SetLength(Mas, n);
Stringgrid1.RowCount:=1;
randomize;
for i:=0 to n do mas[i]:=random(k);
Stringgrid1.RowCount:=n;
For i:=0 to n do
        Stringgrid1.cells[0,i]:=inttostr(mas[i]);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Обрати внимание - дин. массив индексируется от 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;



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: andrey

Репутация: -  0  +


Получается размер массива равен константе к , а мне надо размерность вводить самому т.е. размер массива должен быть равен N. При попытке изменить размер на N не выполняет ининцилизацию, почему?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
размер массива должен быть равен N

Это у тебя где написано? У тебя написано, что тебе надо проинициализировать StringGrid.Cells случайными значениями (по крайней мере это следует из твоей программы)... А уж каким способом - это не оговаривается... Не нравится std::shuffle из стандартной библиотеки С++ - придумывай свой велосипед...

Добавлено через 6 мин.
В крайнем случае всегда можно после перемешивания массива уменьшить его размер до требуемого:
SetLength(mas, n);


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: andrey

Репутация: -  0  +


А зжесь нельзя размер массива самому произвольно вводить через Edit (n := StrToInt(Edit1.Text) - это должно быть размером массива ) ?


Добавлено через 2 мин.
ой, предидущее сообщен ие написал до редоктирования!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Можно-то оно можно, только пойми: если ты установишь размер массива не в 1000, то тебе придется при занесении элементов в этот массив проверять дубликаты вместо того чтобы просто заполнить элементы значениями индексов как это сделал я...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: andrey

Репутация: -  0  +


Да я понял, просто мне надо было изменить размер массива на N что бы потом в этом массиве производить поиск ключа. SetLength(mas, n); - это вроде помогло! Спасибо за помощь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.10.2020 11:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name