Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
newbie666
Заблокирован
#1

Как генерить монотонно возрастающие числа? - C++

02.09.2013, 11:56. Просмотров 976. Ответов 22
Метки нет (Все метки)

Привет! Суть проблемы такова. Надо генерить длинные (long long) числа, чтоб они были всё время разные и плавно возрастающие. Генериться они должны всегда правильно, вне зависимости от того, сколько раз подряд была запущенна программа, сколько раз компьютер был перезагружен и тд... Понятно, что в принципе тут надо завязываться на дату, но тут так же возникает проблема - если этот генератор запускать в цикле, то текущее время просто не успевает обновится и номера остаются одинаковыми....
http://www.cyberforum.ru/cpp-beginners/thread754611.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2013, 11:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как генерить монотонно возрастающие числа? (C++):

Проверить, монотонно ли растут числа в массиве
{ int a={1,8,56,98,25,-9,45,64,17,5,79}; for (int k = 0; k < 12; k++) {...

Распечатать возрастающие серии последовательности в обратном порядке
Пусть дана последовательность целых чисел. Распечатать возрастающие серии...

Распечатать возрастающие последовательности заданных чисел в обратном порядке
Ребят, помогите, у меня такое задание: Считая, что элементами стека являются...

Нужно вывести все возможные возрастающие 6-ти значные комбинации
Задачка: Нужно вывести все возможные возрастающие 6-ти значные комбинации из...

Найти максимально длинные возрастающие последовательности чисел массива
Попалась такая задача, только вот не пойму, что значит максимально длинные...

22
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
02.09.2013, 12:00 #2
легче тогда завязать не на время, а просто при выходе программы сохранять последнее значение в файл например
1
newbie666
Заблокирован
02.09.2013, 12:09  [ТС] #3
Цитата Сообщение от Raali Посмотреть сообщение
просто при выходе программы сохранять последнее значение в файл например
ну так то оно так, но в моём случае возможен крах системы и соответственно все файла тоже крякнут... А хотелось бы не завязываться на локал хост, а просто получать дату и время с сервера например или ещё как - то ...
0
vndtta
90 / 67 / 21
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
02.09.2013, 12:13 #4
Цитата Сообщение от newbie666 Посмотреть сообщение
... если этот генератор запускать в цикле, то текущее время просто не успевает обновится и номера остаются одинаковыми....
обычно генератор случайных чисел 1 раз инициализируется(текущим временем), а потом генерериуются ичсла из псвевдослучайной последовательности

http://www.cplusplus.com/reference/cstdlib/srand/?kw=srand
0
newbie666
Заблокирован
02.09.2013, 12:17  [ТС] #5
Цитата Сообщение от vndtta Посмотреть сообщение
обычно генератор случайных чисел 1 раз инициализируется(текущим временем), а потом генерериуются числа из псвевдослучайной последовательности
Всё верно, но этот номер может повторится при повторном запуске программы.... А если учесть, что программа будет запускаться тысячи раз, то уникальность случайных номеров, даже в формате long long ставится под вопрос....
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
02.09.2013, 12:20 #6
Меня вообще смущают в одном контексте слова "случайные" и "монотонно возрастающие".
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.09.2013, 12:21 #7
Цитата Сообщение от 0x10 Посмотреть сообщение
Меня вообще смущают в одном контексте слова "случайные" и "монотонно возрастающие".
более того,
Цитата Сообщение от newbie666 Посмотреть сообщение
плавно возрастающие.
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
02.09.2013, 12:25 #8
Цитата Сообщение от vndtta Посмотреть сообщение
Всё верно, но этот номер может повторится при повторном запуске программы
одной и той же даты, учитывая год, быть 2 раза не может) только в другом измерении наверное

Цитата Сообщение от 0x10 Посмотреть сообщение
Меня вообще смущают в одном контексте слова "случайные" и "монотонно возрастающие".
наверное что то типа

C++
1
num[a] = num[a-1] + rand()%2;
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
02.09.2013, 12:31 #9
Цитата Сообщение от newbie666 Посмотреть сообщение
программа будет запускаться тысячи раз, то уникальность случайных номеров, даже в формате long long ставится под вопрос
Положите в коробку два шарика - черный и белый. Достаньте из нее один. Запомните цвет извлеченного. Положите обратно. Посмотрите на звезды, почитайте бальмонта, полистайте календарь майя. Теперь достаньте еще раз шар из коробки. Какова вероятность, что он будет такого же цвета как в прошлый раз?

Это я к тому, что если так критично появление тех же чисел в заданном диапазоне, исключайте их.
Или придумайте кардинально новый подход к генерации псевдослучайных чисел. Но опыт поколений показал, что это не так-то и просто.

Добавлено через 51 секунду
Цитата Сообщение от Raali Посмотреть сообщение
одной и той же даты, учитывая год, быть 2 раза не может
12.12.12
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.09.2013, 12:32 #10
Цитата Сообщение от Raali Посмотреть сообщение
C++
1
num[a] = num[a-1] + rand()%2;
не стыкуется
Цитата Сообщение от newbie666 Посмотреть сообщение
чтоб они были всё время разные
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
02.09.2013, 12:36 #11
Цитата Сообщение от Thinker Посмотреть сообщение
Сообщение от newbie666
чтоб они были всё время разные
если перед запуском делать srand от даты, то будут разные

Цитата Сообщение от SatanaXIII Посмотреть сообщение
12.12.12
и когда второй раз при нашей жизни такое будет
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.09.2013, 12:39 #12
Цитата Сообщение от Raali Посмотреть сообщение
если перед запуском делать srand от даты, то будут разные
речь не о srand, а об алгоритме

Цитата Сообщение от Raali Посмотреть сообщение
num[a] = num[a-1] + rand()%2;
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
02.09.2013, 12:43 #13
Цитата Сообщение от Raali Посмотреть сообщение
и когда второй раз при нашей жизни такое будет
В сто двенадцатом году. "Проблема две тысячи" - не слыхали?
Я к тому, что от формата зависит.

Цитата Сообщение от Raali Посмотреть сообщение
если перед запуском делать srand от даты, то будут разные
ТС говорит, что возможен вариант запуска второй копии программы, при еще не сменившемся значения времени. Надо какую-нибудь развертку монитора тогда уж приплетать. )
1
newbie666
Заблокирован
02.09.2013, 12:55  [ТС] #14
да..... думаю случайного генератора в размерности Long long будет достаточно ))) Вот где бы взять такой генератор, что б генерил огромные числа в формате unsigned Long long и чтоб можно было бы задавать кол-во циферок, тоесть чтоб все номера были бы одной длинны как бы, например, максимальной для беззнакового long long ....
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
02.09.2013, 13:03 #15
Короче, пошла какая-то муть.
Автор, сформулируйте задачу полностью.

Не по теме:

id пользователя генерит чтоли...

0
newbie666
Заблокирован
02.09.2013, 13:06  [ТС] #16
id пользователя генерит чтоли...
Что то вроде того ))) Вот и задача сформулирована )
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
02.09.2013, 13:27 #17
newbie666, под виндой доступна функция UuidCreate http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Под никсами uuid_generate http://linux.die.net/man/3/uuid_generate
2
vndtta
90 / 67 / 21
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
02.09.2013, 13:44 #18
Цитата Сообщение от SatanaXIII Посмотреть сообщение
12.12.12
штамп времени включает в себя: год месяц число час минута секунда - и это минимум
0
newbie666
Заблокирован
02.09.2013, 13:48  [ТС] #19
Цитата Сообщение от vndtta Посмотреть сообщение
год месяц число час минута секунда
там ещё и миллисекунды есть, но этого не достаточно )

Добавлено через 50 секунд
вряд ли конечно, т.к. винда - это не ОСРВ, но всё же, может кто слышал как получить время с точностью до наносекунд в windows ? ))))
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
02.09.2013, 13:59 #20
Цитата Сообщение от newbie666 Посмотреть сообщение
вряд ли конечно, т.к. винда - это не ОСРВ, но всё же, может кто слышал как получить время с точностью до наносекунд в windows ? ))))
это для того чтобы была разница между временем запуска приложений?) наверное придется создавать какой то общий сервер все таки, который распределяет данные...
0
02.09.2013, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2013, 13:59
Привет! Вот еще темы с решениями:

Элементы монотонно возрастают
Здравствуйте. Есть задача, где нужно подсчитать количество участков в массиве,...

Определить, является ли последовательность монотонно возрастающей
Разработать программу, которая определяет, является ли введенная...

Поиск максимальной по длине монотонно неубывающей подпоследовательности вещественных чисел
Напишите на языке C / C++ программу поиска максимальной по длине монотонно...

Найти количество участков, на которых монотонно убывают элементы динамического массива
Дан массив размера N.Найти количество участков, на которых его элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru