Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Генератор случайных чисел для FoxPro 7.0

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
user1
Гость





СообщениеДобавлено: Ср Июн 16 2004 08:54    Заголовок сообщения: Генератор случайных чисел для FoxPro 7.0 Ответить с цитатой

Здравствуйте. Возникла проблема, средствами фоксы нужно сгенерировать неупорядоченный массив целых неповторяющихся чисел от 1 до N. Может у кого есть алгоритм, желательно быстрый.
Заранее благодарен.
Вернуться к началу
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Ср Июн 16 2004 09:33    Заголовок сообщения: Ответить с цитатой

Алгоритм такой: заполнить массив нулями. Пробежать все число от 1 до N. Каждое число записать в случайное место (по циклу: случайное место, пока не наткнемся на 0). Небольшая оптимизация: Если записываем в край массива, уменьшаем на 1 интервал поиска случайного места. Это даст большой выигрыш при больших N, когда почти все места уже заняты.
Можно так. Записать все числа по порядку. Потом по циклу, два числа, со случайными номерами переставляем местами, то есть перемешиваем массив. Антисортировка.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Ср Июн 16 2004 10:07    Заголовок сообщения: Ответить с цитатой

INT(N * RAND( ) + 1)
и проверять не было ли этого числа ранее
Вернуться к началу
user1
Гость





СообщениеДобавлено: Чт Июн 17 2004 15:58    Заголовок сообщения: Ответить с цитатой

Спасибо, GREA. Реально помогло!
Вернуться к началу
user1
Гость





СообщениеДобавлено: Чт Июн 17 2004 16:04    Заголовок сообщения: Ответить с цитатой

Anonymous писал(а):
INT(N * RAND( ) + 1)
и проверять не было ли этого числа ранее

Не дурак. Об этом в help написано. Когда остается одно свободное место, оно ищется почти до бесконечности.
Вернуться к началу
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Чт Июн 17 2004 19:55    Заголовок сообщения: Ответить с цитатой

Подумал маленько, и пришло мне в голову, что можно сначала записать все числа по порядку. Потом последовательно пробегать все элементы массива и каждый менять местами с элементом в случайной позиции (даже с самим собой). Так получится наиболее быстро и более случайно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Пт Июн 18 2004 10:29    Заголовок сообщения: Ответить с цитатой

Интересно, при каком это N
"оно ищется почти до бесконечности"?
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...