Форум программистов, компьютерный форум CyberForum.ru

Случайные числа - C++

Восстановить пароль Регистрация
 
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 16:30     Случайные числа #1
C++
1
2
3
4
5
6
7
int main() 
{ 
srand(time(0));
int a = rand()%100;
cout << a << endl;
system("pause");
}
Есть вот такой способ задания случайных чисел от 0 до 100, но вот что меня смутило, каждый раз числа создаются либо +7 от предыдущего, либо +3, либо +10... И всегда по возрастанию, пока не дойдет до 100. А есть ли еще способы создания генератора, без использования времени?
В PHP вроде так
PHP
1
$a = rand(0,100);
И числа без всякой зависимости от чего-либо генерируются, можно ли что-то подобное сделать на C++?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 16:30     Случайные числа
Посмотрите здесь:

C++ случайные числа в с++
Случайные числа C++
Случайные числа C++
Случайные числа C++
C++ Случайные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.10.2013, 16:51     Случайные числа #2
Цитата Сообщение от Corax111 Посмотреть сообщение
И числа без всякой зависимости от чего-либо генерируются
Такое разве возможно?
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 17:08  [ТС]     Случайные числа #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Такое разве возможно?
это я и хочу узнать, относительно PHP возможно) Я только что привел пример
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
17.10.2013, 17:14     Случайные числа #4
Цитата Сообщение от Corax111 Посмотреть сообщение
это я и хочу узнать, относительно PHP возможно) Я только что привел пример
А вы что думаете что оно в php иначе работает ?

Добавлено через 46 секунд
Цитата Сообщение от Corax111 Посмотреть сообщение
но вот что меня смутило, каждый раз числа создаются либо +7 от предыдущего, либо +3, либо +10...
Параноя
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 17:20  [ТС]     Случайные числа #5
Цитата Сообщение от Avazart Посмотреть сообщение
Параноя
Почему это?
Ну, в PHP я не проверял, по возрастанию они появляются или нет, точнее не задумывался над этим.
И да, это не параноя, а так оно и есть, потому что я раз 20 перезапускал программу и так оно и выходит...
Ладно спрошу так, зачем в rand() скобки? В них же что-то можно написать?
FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
17.10.2013, 17:26     Случайные числа #6
Цитата Сообщение от Corax111 Посмотреть сообщение
Ладно спрошу так, зачем в rand() скобки? В них же что-то можно написать?
Почитайте про функции.
Цитата Сообщение от Corax111 Посмотреть сообщение
И числа без всякой зависимости от чего-либо генерируются
Программно такое невозможно.
Для ваших нужд rand() полностью подойдёт.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.10.2013, 17:38     Случайные числа #7
Corax111, если работа кода не устраивает, то усложните его. Создайте массив с рандомными значениями (там уже будет не только по возрастанию), рандомно выберите из него число.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
17.10.2013, 17:46     Случайные числа #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Такое разве возможно?
std::random_device
В линуксе использует dev/random, туда выводятся шумы с устройств.

ТС, вам хватит ПГСЧ на основе Вихря Мерсенна, смотрите на std::mt19937
Но все это из С++11

Добавлено через 34 секунды
Если компилятор свежий поставить не вариант, то boost/random
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 17:49  [ТС]     Случайные числа #9
MrGluck, по правде говоря я Вас не понял))
alsav22, спасибо за совет)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
17.10.2013, 17:55     Случайные числа #10
Цитата Сообщение от Corax111 Посмотреть сообщение
MrGluck, по правде говоря я Вас не понял))
что именно?
ГСЧ - генератор случайных чисел,
ПГСЧ - псевдо-генератор случайных чисел
Вихрь Мерсенна
генератор недетерменированных СЧ
Одна из разновидностей генератора на основе Вихря Мерсенна

Добавлено через 1 минуту
С++11 - стандарт языка С++
boost/random - библиотека, содержащая набор класов и функций для работы со СЧ. С++11 взял основные генераторы оттуда, ничего из других мест.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
17.10.2013, 18:15     Случайные числа #11
Цитата Сообщение от Corax111 Посмотреть сообщение
int a = rand()%100;
когда то давно поднималась эта тема и было доказано,что у остатка от деление плохое распределение
предлагалось сделать примерно так
C++
1
int a= (double)rand()/(double)MAX_INT*100;
подробности и доказательства не помню лет пятнадцать прошло
Цитата Сообщение от Corax111 Посмотреть сообщение
А есть ли еще способы создания генератора, без использования времени?
могу предложить такой вариант
C++
1
2
3
4
5
6
int a=0;
while(!kbhit())
  {
     a++;
   a%=100;
  }
функция kbhit возвращает 0 если клавиша на клавиатуре не нажата и 1 если нажата
т.е запускаешь программу цикл крутится a прибавляется
нажал на клавишу цикл прервался и в а практически случайное число потому что каждый раз будешь нажимать по разному
можешь это число передать srand для инициализации генератора и потом вызвать rand
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 20:24  [ТС]     Случайные числа #12
Благодарю еще раз всех ответивших, но, ответьте пожалуйста еще на один вопрос...
Есть некоторый массив, с тремя значениями. В случайном порядке я пытаюсь вызвать элементы массива, на что компилятор не ругается, но очень очень очень сильно ругается консоль...

Выдает кучу символов всяких разных, переодически поле со знаками вопросами, а потом опять какая-то кодировка, сопровождающаяся пиканием. В чем же ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdlib.h> 
#include <ctime>
#include <string>
using namespace std;
 
 
int main() 
{ 
    setlocale(LC_ALL, "Russian");
    string a[3] = {"Tiger", "Bear", "Horse"};
    srand(time(0));
    cout << a[rand()%10] << endl;
    system("pause");
}
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
17.10.2013, 20:41     Случайные числа #13
Цитата Сообщение от Corax111 Посмотреть сообщение
string a[3] = {"Tiger", "Bear", "Horse"}
размер массива 3
а ты обращаешься к 10
Цитата Сообщение от Corax111 Посмотреть сообщение
cout << a[rand()%10]
разумеется вылезаешь за границы массива
поправь
C++
1
cout << a[rand()%3] << endl;
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 21:04  [ТС]     Случайные числа #14
C++
1
2
3
string animal[5] = {"Tiger", "Horse", "Bear", "Wolf", "Pantera"};
    cout << animal[rand()%10] << endl;
    system("pause");
Перефразировал массив, так сказать, и снова вопрос)) Да, знаю, слишком много вопросов, но лучше уж спросить у спецов, чем компасировать себе мозг и ни к чему не прийти)) Итак, выдает только horse, всех остальных выдавать не хочет)) Так и должно быть, или где-то косяк?)

Добавлено через 1 минуту
Все, спасибо) Исправил, все работает)) Не знал что так можно))

Добавлено через 11 минут
А вот, еще один вопросик возник, а можно ли делать массив переменных, если да, то как?) Ну, что-то вроде
C++
1
2
3
4
5
string h = "Horse";
string e = "Elephant";
string t = "Tiger";
string w = "wolf";
string animal[4] = {h, e, t, w}; //Как-то так? (Если возможно)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
17.10.2013, 21:06     Случайные числа #15
Цитата Сообщение от Corax111 Посмотреть сообщение
А вот, еще один вопросик возник, а можно ли делать массив переменных, если да, то как?) Ну, что-то вроде
А что-то мешает взять и проверить?
Да, можно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 21:30     Случайные числа
Еще ссылки по теме:

C++ Случайные числа.
Случайные числа C++
C++ Случайные числа

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

Или воспользуйтесь поиском по форуму:
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 21:30  [ТС]     Случайные числа #16
MrGluck, вы правы, ничего не мешает, но мало-ли, текст же вводится в кавычках, а числа нет, может переменные еще как-то) Просто проще спросить, чем 10 раз пробовать разными способами))
Yandex
Объявления
17.10.2013, 21:30     Случайные числа
Ответ Создать тему
Опции темы

Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru