![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одномерный массив. Как заполнить числами от 1 до 10? [D4, WinME]
UDS © (2002-04-03 23:07:00)Я уже задавал этот вопрос, но его куда-то ушли... Или такие ламерские вопросы вообще тут не рассматриваются. Как тогда,господа, учиться нам начинающим?
Проблема вот в чем: я заполняю массив A[i]: integer числами от 1 до 10 в произвольном порядке (for i:=1 to 10 do A[i]:=(random(10)+1). КАК СДЕЛАТЬ ЧТОБЫ ВЫПАДАЮЩИЕ ЧИСЛА НЕ ПОВТОРЯЛИСЬ. Помогите пожалуйста! Это нужно для дальнейшей работы над программой. Ни в FAQе, ни во всем форуме я ответа не нашёл! Заранее спасибо.
Fantasist (2002-04-04 01:01:00) [21]Ага. Я когда-то решал такую вещь только надо было заполнить случайными числами 1..n. Такой вариант(тут он не нужен но...):
1. Создаем пустой список S каждый элемент которого содержит 2 поля:
number
meaning
2. Берем случайное число k от 1..n,
3. Ищем k в списке S по полю number; ecли оно не находиться - присваиваем текущему элементу массива значение k, и в S добавляем запись:
number=k;
meaning=n;
ежели находиться, то текущему элементу массива присваеваим значение meaning, а meaning меняем на значение n.
4. Уменьшаем n на один и переходим к шагу 2.
UDS (2002-04-04 00:50:00) [22]Chepel Проверил-работает!!!!! На досуге разберусь поглубже. Пиво за мной!!!!!
P.S. Тема не закрывается. Кто придумает способ лучше- с удовольствием рассмотрим!
Chepel (2002-04-04 00:33:00) [23]в догонку...
st: string; в предыдущем примере не нужно =) сорри...
Chepel (2002-04-04 00:30:00) [24]тупой, но проверенный способ =)
для массива A[1..10] of Integer;
будет:
var
i, n: Integer;
r1, r2: Integer;
st: string;
begin
for i:=1 to 10 do
begin
r1 := Random(10)+1;
r2 := Random(10)+1;
n := a[r1];
a[r1] := a[r2];
a[r2] := n;
end;
UDS (2002-04-04 00:15:00) [25]1 2 3 4 5 6 7 8 9 10 КАК ПЕРЕМЕШАТЬ? А-У! Ну ответьте, плиз!!!!!!!!!!!!!!!!
UDS (2002-04-03 23:51:00) [26]Заполняю for i:=1 to 10 do A[i]:=i; а дальше Как смешать?
UDS (2002-04-03 23:49:00) [27]КАК ПЕРЕТАСОВАТЬ????????????
Anatoly Podgoretsky (2002-04-03 23:48:00) [28]Сначало заполни массив последовательно цифрами от 1 до 10, а зптем перетасуй ч помощью random
UDS (2002-04-03 23:42:00) [29]Проверять всю цепочку IFами это не выход. Что будет если значений в массиве будет гораздо больше, или это будет вообще 2-мерный массив? Кто-то мне говорил что эта проблема решаема с помощью обмена между двумя(?) значениями с помощью SWAP. Но я толком не понял как это сдулать. Я ваще не знаю пока еще что такое SWAP и с чем его едят. Думал что тут мне разжуют это дело.
Я UDS...Прием...
Song (2002-04-03 23:31:00) [30]2UDS © (03.04.02 23:21)
VID © (03.04.02 23:13) просто пошутил, у него 1-ое Апреля запоздалое.
UDS (2002-04-03 23:21:00) [31]Да RANDOMIZE стественно написан, но это не спасает от случайного повторного выпадения какого-либо числа. Получается что-то типа-
4 5 2 1 2 8 6 9 4 7 . Видим что числа 4 и 2 повторяются и присутствие RANDOMIZE не спасает.
Song (2002-04-03 23:21:00) [32]Random не может гарантировать Вам, что не выпадут повторяющиеся ранее числа. Чтобы ограничить совпадение, Вам нужно после каждого Random, проверять на совпадение всю цепочку.
VID (2002-04-03 23:13:00) [33]перед циклом напищи
RANDOMIZE;