Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Одномерный массив. Как заполнить числами от 1 до 10? [D4, WinME]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо