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

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

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

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

10.02.2013, 12:40. Просмотров 930. Ответов 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.... почему ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2013, 12:40     Почему рандомное число всегда равно 22?
Посмотрите здесь:
Почему произведение всегда равно 0? C++
Элементарный математический код, но почему то всегда равно 0,0000 C++
C++ Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ
C++ Дано рандомное вещественное число P, найти число M после запятой
C++ Рандомное число
C++ Получить рандомное число от 1 до 10
C++ Задать рандомное число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
10.02.2013, 12:53     Почему рандомное число всегда равно 22? #2
Evgeni pengwin, вот как выводится у меня
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
-2287
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
-1450
stdout:
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************
31181
http://liveworkspace.org/code/1vFQ23$1
потрудитесь выложить весь код
Evgeni pengwin
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 20
10.02.2013, 13:13  [ТС]     Почему рандомное число всегда равно 22? #3
все проблема не актуальна (само собой как то решилось))
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2013, 13:16     Почему рандомное число всегда равно 22? #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
Миниатюры
Почему рандомное число всегда равно 22?  
paserge
-3 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 42
12.02.2013, 02:16     Почему рандомное число всегда равно 22? #5
Рандом это псевдослучайное число которое выбирается из длинного ряда постоянных чисел поэтому чтобы получить реально случайное число надо умножить его на что то типа даты.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 02:26     Почему рандомное число всегда равно 22? #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
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 08:09     Почему рандомное число всегда равно 22? #7
лучше использовать с++ рандом, и инициаллизировать его девайсид, а не временем, чем Сишный сранд...)
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
12.02.2013, 09:55     Почему рандомное число всегда равно 22? #8
лучше использовать с++ рандом, и инициаллизировать его девайсид, а не временем, чем Сишный сранд...)
Вот еще бы примерчик для наглядности, мы бы вам даже спасибо сказали)
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 18:42     Почему рандомное число всегда равно 22? #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
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
12.02.2013, 20:19     Почему рандомное число всегда равно 22? #10
генерируемые таким образом числа более псевдослучайны?
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 21:08     Почему рандомное число всегда равно 22? #11
Цитата Сообщение от booker Посмотреть сообщение
генерируемые таким образом числа более псевдослучайны?
они потокобезопасны...и в один момент времени дадут разные числа...)
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 21:46     Почему рандомное число всегда равно 22? #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.
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
12.02.2013, 22:05     Почему рандомное число всегда равно 22? #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
йеп, действительно
если покажешь мне пример с моей функцией, где все потоки вернут одно число, то соглашусь...)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 22:23     Почему рандомное число всегда равно 22?
Еще ссылки по теме:
Рандомное число из *приставка*-секунд C++
C++ Рандомное число в заданном интервале
Пользователь должен отгадать рандомное число C++
Почему всегда 1 ? C++
C++ Как задать рандомное число от 200 до 800?

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2013, 22:23     Почему рандомное число всегда равно 22? #14
Цитата Сообщение от NeonLost Посмотреть сообщение
если покажешь мне пример с моей функцией, где все потоки вернут одно число, то соглашусь...)
причем твоя фунция? я написал, что rand действительно не потоко-безопасный
Yandex
Объявления
12.02.2013, 22:23     Почему рандомное число всегда равно 22?
Ответ Создать тему
Опции темы

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