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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Evgeni pengwin
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 20
#1

Почему рандомное число всегда равно 22? - C++

10.02.2013, 12:40. Просмотров 948. Ответов 13
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <ctime>
using namespace std;
int main ()
{
    // нужны две константы (Ширины и высоты поля)
    
    
    const int Width (20), Height (10); //ширина и высота
    const char Live ('#'), Dead ('*'); // мертвые и живые клетки
    
    // нужна переменная которая будет указывать кол-во поколений
    
    
    int Generation (5);
    
    // Массивы (у клеток может быть два состояния живое или мертвое, поэтому проще создать тип Bool (trye- живая клетка, False - мертвая))
 
 
    bool Mass [Width * Height] = {false};
 
    srand ((unsigned) time (NULL));
 
    //_______________________________________________________________________________
    
    // показ содержимого массива
 
    //___________________________________________________________________________________
 
    for (int y = 0 ; y < Height; y++)
    {
        for (int x = 0; x < Width; x++)
        {
            if (Mass [x + y * Width])
            {
                cout << Live;
            }
            else
            {
            cout << Dead;
            }
        }
        cout << endl;
    }
    // Рандом для массива
    
    
    short Random = rand ();
    cout << Random << endl;
 
    
 
return 0;
}
рандомное число всегда 22.... почему ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2013, 12:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему рандомное число всегда равно 22? (C++):

Почему произведение всегда равно 0? - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); srand(time(0)); const int...

Элементарный математический код, но почему то всегда равно 0,0000 - C++
Элементарный математический код, но почему то всегда равно 0,0000. Тут я еще использую старые функции ввода-вывода, потому что так надо на...

Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ - C++
Вот что нужно написать кодом: сравнить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем, например,...

Дано рандомное вещественное число P, найти число M после запятой - C++
1)Дано рандомное вещественное число P, найти число М после запятой, если пользователь задает точность количества чисел после запятой. 2)...

Рандомное число - C++
Здравствуйте, в общем я пытаюсь использовать ф-цию srand, но получается странно. Пример кода: int main() { ...

Получить рандомное число от 1 до 10 - C++
Как получить рандомное число а от 1 до 10.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
10.02.2013, 12:53 #2
Evgeni pengwin, вот как выводится у меня
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
-2287
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
-1450
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
31181
http://liveworkspace.org/code/1vFQ23$1
потрудитесь выложить весь код
1
Evgeni pengwin
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 20
10.02.2013, 13:13  [ТС] #3
все проблема не актуальна (само собой как то решилось))
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2013, 13:16 #4
Evgeni pengwin,
Цитата Сообщение от Evgeni pengwin Посмотреть сообщение
// показ содержимого массива
Цитата Сообщение от Evgeni pengwin Посмотреть сообщение
bool Mass [Width * Height] = {false};
- он же ведь инициализирован у тебя одними false
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <ctime>
using namespace std;
int main ()
{
    // нужны две константы (Ширины и высоты поля)
    const int Width  = 20;
    const int Height = 10; 
    char Live  = '#';
    char Dead  = '*'; // мертвые и живые клетки
    
    // нужна переменная которая будет указывать кол-во поколений
    int Generation = 5;
    // Массивы (у клеток может быть два состояния живое или мертвое, 
    //поэтому проще создать тип Bool (trye- живая клетка, False - мертвая))
    bool Mass [Width * Height] = {false};
    srand (time (0));
    //_______________________________________________________________________________
    
    // показ содержимого массива (Ну а где ты его инициалиизровал.хотя бы так 
    //Mass [x + y * Width] = rand() % 2;???Ну как можно допускать такие детские ошибки?(!)
 
    //___________________________________________________________________________________
 
    for (int y = 0 ; y < Height; y++)
    {
        for (int x = 0; x < Width; x++)
        {
            Mass [x + y * Width] = rand() % 2;
            if (Mass [x + y * Width])
                cout << Live;
            else
                cout << Dead;
        }
        cout << endl;
    }
    // Рандом для массива
    
    
    short Random = rand ();
    cout << Random << endl;
    return 0;
}
Цитата Сообщение от Evgeni pengwin Посмотреть сообщение
short Random = rand ();
Цитата Сообщение от Evgeni pengwin Посмотреть сообщение
рандомное число всегда 22.... почему ?
- потмоу что у ранда возвращаемый тип int а не short
1
Миниатюры
Почему рандомное число всегда равно 22?  
paserge
-3 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 42
12.02.2013, 02:16 #5
Рандом это псевдослучайное число которое выбирается из длинного ряда постоянных чисел поэтому чтобы получить реально случайное число надо умножить его на что то типа даты.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 02:26 #6
Цитата Сообщение от paserge Посмотреть сообщение
Рандом это псевдослучайное число которое выбирается из длинного ряда постоянных чисел поэтому чтобы получить реально случайное число надо умножить его на что то типа даты.
не совсем так уж и просто
для сишного ГПСЧ (генератора псевдослучайных чисел) в большинстве стандартных библиотек используется ЛКМ (линейный конгруэнтный метод). Вообщемто он выглядит так:

http://www.cyberforum.ru/cgi-bin/latex.cgi?X_{k+1} = (a X_k + c)~~\bmod~~m

a, c, m для стандартной библиотеки фиксированы, а от X0 зависит вся последовательность. Если X0 давать на вход генератора один и тот же, то и последовательности псевдослучайных чисел окажутся одинаковые. (Этот x0 отдаленно и есть то, что дается на вход srand)

Чтобы последовательности были каждый раз разные туда суют текующую дату в представлении time_t
1
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 08:09 #7
лучше использовать с++ рандом, и инициаллизировать его девайсид, а не временем, чем Сишный сранд...)
0
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
12.02.2013, 09:55 #8
лучше использовать с++ рандом, и инициаллизировать его девайсид, а не временем, чем Сишный сранд...)
Вот еще бы примерчик для наглядности, мы бы вам даже спасибо сказали)
0
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 18:42 #9
C++
1
2
3
4
5
6
typedef boost::mt19937 RNGType;
    boost::random::random_device rd;
    RNGType rng(rd());
    boost::uniform_int<> one_to_six( 1, 600 );
    boost::variate_generator< RNGType, boost::uniform_int<> >dice(rng, one_to_six);
    return dice();
Добавлено через 59 минут
ой, тоже самое тока std
1
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
12.02.2013, 20:19 #10
генерируемые таким образом числа более псевдослучайны?
0
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 21:08 #11
Цитата Сообщение от booker Посмотреть сообщение
генерируемые таким образом числа более псевдослучайны?
они потокобезопасны...и в один момент времени дадут разные числа...)
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 21:46 #12
Цитата Сообщение от NeonLost Посмотреть сообщение
они потокобезопасны...и в один момент времени дадут разные числа...)
йеп, действительно
The function rand() is not reentrant or thread-safe, since it uses hidden state that is modified on each call. This might just be the seed value to be used by the next call, or it might be something more elaborate. In order to get reproducible behaviour in a threaded application, this state must be made explicit. The function rand_r() is supplied with a pointer to an unsigned int, to be used as state. This is a very small amount of state, so this function will be a weak pseudo-random generator. Try drand48_r(3) instead.
0
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 22:05 #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
йеп, действительно
если покажешь мне пример с моей функцией, где все потоки вернут одно число, то соглашусь...)
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 22:23 #14
Цитата Сообщение от NeonLost Посмотреть сообщение
если покажешь мне пример с моей функцией, где все потоки вернут одно число, то соглашусь...)
причем твоя фунция? я написал, что rand действительно не потоко-безопасный
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 22:23
Привет! Вот еще темы с ответами:

Задать рандомное число - C++
Собственно когда каждый раз жму ctrl-f5, то выводит одно и тоже числоа. Как сделать так, чтобы каждый раз было разные? #include...

Рандомное число в заданном интервале - C++
Число переменной sound должно быть рандомным, но в определенных границах (от 1 до 41). Возможно ли такое? Если да, то прошу помочь. :) ...

Рандомное число из *приставка*-секунд - C++
Почему нельзя считать рандомным, скажем, число мили/микро(/нано) секунд в текущем времени? Ведь даже убер-реактивные системы не могут...

Пользователь должен отгадать рандомное число - C++
Всем привет:-) Начал изучать c++ самостоятельно и часто посещал ваш форум как гость. Спустя некоторое время понял, что если...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.02.2013, 22:23
Ответ Создать тему
Опции темы

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