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

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

Войти
Регистрация
Восстановить пароль
 
 
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
#1

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

17.10.2013, 16:30. Просмотров 838. Ответов 15
Метки нет (Все метки)

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++?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 16:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Случайные числа (C++):

Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа - C++
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; // кол-во элементов массива ...

Случайные числа от -8 к 8 - C++
Как можно сделать рандомом числа от -8 к 8, нашел на форуме пример: int r=(rand() % 11) + 5;//от 0 до 10 и +5, то есть от 5 до 15 но...

Случайные числа - C++
Создать матрицу случайных чисел, если max элемент располагается левее минимального то тогда сложить элементы левой половинки матрицы.

Случайные числа - C++
Подскажите функцию(или класс а вней функцию) для генерирования случайных чисел аналог Random.Next() C#

Случайные числа - C++
Написать функцию, которая подсчитует сколько раз заданое число встречается в последовательности N случайных чисел.

Случайные числа - C++
Привет, мне надо наполнить массив случайными числами но толька чтоб они не повторялись, подскажыте как ето сделать.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.10.2013, 16:51 #2
Цитата Сообщение от Corax111 Посмотреть сообщение
И числа без всякой зависимости от чего-либо генерируются
Такое разве возможно?
0
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
17.10.2013, 17:08  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Такое разве возможно?
это я и хочу узнать, относительно PHP возможно) Я только что привел пример
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
17.10.2013, 17:14 #4
Цитата Сообщение от Corax111 Посмотреть сообщение
это я и хочу узнать, относительно PHP возможно) Я только что привел пример
А вы что думаете что оно в php иначе работает ?

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

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

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

Добавлено через 1 минуту
С++11 - стандарт языка С++
boost/random - библиотека, содержащая набор класов и функций для работы со СЧ. С++11 взял основные генераторы оттуда, ничего из других мест.
2
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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
0
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");
}
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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;
0
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}; //Как-то так? (Если возможно)
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
17.10.2013, 21:06 #15
Цитата Сообщение от Corax111 Посмотреть сообщение
А вот, еще один вопросик возник, а можно ли делать массив переменных, если да, то как?) Ну, что-то вроде
А что-то мешает взять и проверить?
Да, можно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 21:06
Привет! Вот еще темы с ответами:

случайные числа - C++
подскажите как сформировать двумерный массив случайных чисел в заданном диапозоне которые не повторяются

случайные числа - C++
rand() в VS имеет диапазон от 0 до 32768? даже изменение RAND_MAX ничего не повысит верхний уровень?

Случайные числа - C++
Доброго времени суток! Возможно ли сделать так, чтобы выпадали в случайном порядке числа 0, 2, 6, 8?

Случайные числа - C++
Всем привет! Мне нужно сгенерировать действительное случайное число в диапазоне от нуля до 1. Читал вот это:...


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

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

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