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

rand() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
lavrik
10 / 10 / 1
Регистрация: 24.02.2011
Сообщений: 649
14.10.2012, 10:47     rand() #1
начал учить си++, наткнулся на такую штуку...
Накидал простую программку (консольную) и увидел что датчик случ. чисел выдает нифига не случайные числа!!!

C++ (Qt)
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
#include <iostream>   // Заголовок для подключения системы ввода/вывода
#include <cstdlib>
using namespace std;  // Использовать пространство имен std
 
void wait();
 
 
 
 
int main()
{
    int magik, my;
 
    magik = rand();
 
    cout << "Введи число \n";
    cin >> my;
    
    if (magik==my)
       {
       cout << "Угадал";
       }
       else
       {
       cout << "не угадал - ";
       if (my > magik)
          {
          cout << "Слишком много \n";
          }
          else
          {
          cout << "Слишком мало \n";
          }
       cout << "Рандомное число - " << magik;
       }
    
    return 0;
}

число my ВСЕГДА равняется 41. ПОЧЕМУ???? я что-то ни так делаю???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 10:47     rand()
Посмотрите здесь:

C++ rand()
rand C++
rand C++
C++ rand от 1 до 16
rand()%(-20)%(20); C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.10.2012, 10:52     rand() #2
Добавьте в начало main srand(time(0)); и подключите заголовок #include <ctime>
ExpressS
 Аватар для ExpressS
5 / 8 / 0
Регистрация: 30.07.2012
Сообщений: 235
14.10.2012, 10:54     rand() #3
Цитата Сообщение от lavrik Посмотреть сообщение
начал учить си++, наткнулся на такую штуку...
Накидал простую программку (консольную) и увидел что датчик случ. чисел выдает нифига не случайные числа!!!

C++ (Qt)
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
#include <iostream>   // Заголовок для подключения системы ввода/вывода
#include <cstdlib>
using namespace std;  // Использовать пространство имен std
 
void wait();
 
 
 
 
int main()
{
    int magik, my;
 
    magik = rand();
 
    cout << "Введи число \n";
    cin >> my;
    
    if (magik==my)
       {
       cout << "Угадал";
       }
       else
       {
       cout << "не угадал - ";
       if (my > magik)
          {
          cout << "Слишком много \n";
          }
          else
          {
          cout << "Слишком мало \n";
          }
       cout << "Рандомное число - " << magik;
       }
    
    return 0;
}

число my ВСЕГДА равняется 41. ПОЧЕМУ???? я что-то ни так делаю???
C++
1
2
3
4
int s;
srand(time(NULL));
for (int i=0;i<10; i++)
{s = rand() % 100 + 1;}
от 1 до 100
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
14.10.2012, 11:49     rand() #4
Цитата Сообщение от lavrik Посмотреть сообщение
число my ВСЕГДА равняется 41. ПОЧЕМУ????
Потому что rand() на самом деле выдает псевдослучайные числа. Внутри функции заложен определенный алгоритм, по которому эти числа берутся. Есть функция srand(), которая позволяет инициализировать начальное значение для генератора. В качестве аргумента в нее по традиции передается значение, возвращаемое функцией time(). Таким образом при каждом запуске программы это будет новое значение.
Yandex
Объявления
14.10.2012, 11:49     rand()
Ответ Создать тему
Опции темы

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