Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 04:16   #1
chuikoff
Новичок
Джуниор
 
Регистрация: 03.06.2011
Сообщений: 2
По умолчанию Рекурсия исключения псевдослучайных повторенных вариантов.

Есть список:

Код:
pre:= TstringList.Create;
В нём примерно такие строки:

Код:
[1]=1;
[2]=2;
[3]=3;
[4]=4;
..etc..
Далее появляется случайное число:

Код:
Randomize;
v:=1+Random(sit);
Но прежде чем выполнять следующую часть программы, мне нужно проверить, есть ли это случайное число в этом списке, если есть продолжаю, если нету снова получаю случайное число и сверяю с наличием в списке, если строк нету, заканчиваю выполнение, пишу что строк нету. Помогите кодом, как лучше реализовать?

ps. в списке не важно обращаться к значению или к индексу, они равные и одинаковые.
www.chuikoff.ru - Сайт веб-разработчика
chuikoff вне форума Ответить с цитированием
Старый 03.06.2011, 05:10   #2
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

ну ты покажи хоть какую-нибудь свою реализацию, мы же не будем писать код за тебя.
maxionans вне форума Ответить с цитированием
Старый 03.06.2011, 08:57   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) при чём здесь рекурсия?!

2) нумерация в листе идёт от нуля.
а что в [0]= ????

3)
Цитата:
в списке не важно обращаться к значению или к индексу, они равные и одинаковые.
если индекс и значение (ну с учётом того, что индекс число, а содержимое - строка) ВСЕГДА равны (непонятно, правда, зачем подобное мутить - но Ваше дело!)
тогда проверить, если число в списке или нет:
Код:
 v:=1+Random(sit);
 if V <=  (pre.Count+1) then .... Есть в списке такое число
 else .... Нет в списке такого числа;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.06.2011, 09:04   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Код:
if v in [0..pre.count-1] then 
// продолжай 
else 
//нельзя
но это только при абсолютной гарантии, что индексы и данные равны.

И, да, нулик надо ))
phomm вне форума Ответить с цитированием
Старый 04.06.2011, 13:27   #5
chuikoff
Новичок
Джуниор
 
Регистрация: 03.06.2011
Сообщений: 2
По умолчанию

Ладно, сформулирую по-другому:

#1
Код:
//Открываем файл БД для чтения
AssignFile(fdb,'db.txt');
Reset(fdb);
//Заполняем форму ответов и кол-во ситуаций
pse:= TstringList.Create;
 repeat
   readln(fdb,vid);//номер
   readln(fdb,otv1); //Название маяка
   readln(fdb,otv2); //Описание маяка
   readln(fdb,otv3); //Регион
   pse.add(vid);
   ProForm.ListBox1.items.add(otv1);
  until vid=sit;
  closefile(fdb);
в список pse добавляются ИД маяков, от 1 до 10. В лист-бокс названия маяков.

#2
Код:
//Получаем случайное изображение-задание
Randomize;
v:=1+Random(sit);
// Ищем ситуацию в файле
repeat
   readln(fdb,vid);//номер
   readln(fdb,otv1); //Название маяка
   readln(fdb,otv2); //Описание маяка
   readln(fdb,otv3); //Регион
until v=vid;
//Показываем изображение с полученным ИД
Image1.Picture.LoadFromFile('img/img_'+ IntToStr(v)+'.jpg');
Далее я нажимаю кнопку ответить. Из списка pse удаляется строка с номером V.
И вот мне интересно, те элементы что выше v поменяют индекс на единицу меньше, или строка просто высвободится, т.е.
Если выпало 4, то после удаления будет
pse[1]=1
pse[2]=2
pse[3]=3
............здесь было 4
pse[5]=5
pse[6]=6

Но если индекс элементов меняется после удаления, тогда нужно удалять значение, чтобы строка становилась пустой, и тогда проверять
pse[v]='' это значит что ситуация уже была, и тогда снова подобрать случайное число, и проверить на пустоту строки, если пустая, ищем новое число случано и делаем тоже самое, если значение есть, то выполняем код дальше.
www.chuikoff.ru - Сайт веб-разработчика
chuikoff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия. Перебор всевозможных вариантов элементов матрицы Mr_freeman Помощь студентам 15 02.03.2011 21:08
генератор псевдослучайных чисел duff Паскаль, Turbo Pascal, PascalABC.NET 18 27.04.2010 23:59
Генератор псевдослучайных чисел Max- Помощь студентам 12 21.05.2009 21:06
генератор псевдослучайных чисел - распределение elsin Общие вопросы Delphi 12 15.05.2008 16:07