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

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

Войти
Регистрация
Восстановить пароль
 
Aqua77
25 / 25 / 16
Регистрация: 13.07.2015
Сообщений: 431
#1

Функция возвращающая случайное число - C++

14.10.2015, 11:58. Просмотров 274. Ответов 9
Метки нет (Все метки)

Нужна функция Возвращающая случайное число из диапазона который я задам например от 13 до 25. Ещё важно чтобы число не повторялось дважды.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2015, 11:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция возвращающая случайное число (C++):

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел - C++
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...

Функция, анализирующая строку и возвращающая число - C++
Как не читала и не пробовала эту прогу реализовать никак не получается... Написать функцию, которая анализирует заданную строку и...

Функция возвращающая число с обратным порядком цифр - C++
Нужно написать функцию, которая воспринимает целое значение и возвращает число с обратным порядком цифр. Моя программа почему-то выводит...

Функция, возвращающая число, полученное из целого числа - C++
Выдали задание, но я не могу разобратся в логической цепочки . Не могу понять как написать ее правильно.Кто может напишите=)) ...

Функция, возвращающая указатель - C++
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е. функцию, которая принимает аргумент типа...

Функция, возвращающая массив - C++
Задача: В двумерном целочисленом массиве заданного размера найти номера строк, элементы которых образуют убявающую последовательность. ...

9
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 110
14.10.2015, 12:07 #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <ctime>
int rand_with_range(int a,int b)
{
    int rand_num=0;
    srand((unsigned) time(NULL));
    do
    {
        rand_num=rand()%b+1;
    } while (rand_num<a);
    return rand_num;
}
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,867
Завершенные тесты: 1
14.10.2015, 12:12 #3
ASKMAN, нельзя
Цитата Сообщение от ASKMAN Посмотреть сообщение
srand((unsigned) time(NULL));
вставлять в функцию. В течение секунды этот вызов будет одинаково инициализировать датчик случайных чисел.
Соответственно последовательные вызовы Вашей функции будут давать одинаковую последовательность чисел.
И не стоит в цикле отбрасывать числа меньшее a. Вы так еще больше нарушаете равномерность распределения.
C++
1
rand_num=rand()%(b-a+1)+a;
0
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 110
14.10.2015, 12:17 #4
zss, я только что тоже про это подумал. Нужно
C++
1
srand((unsigned) time(NULL));
вынести в main.
0
Байт
Эксперт C
16567 / 10837 / 1650
Регистрация: 24.12.2010
Сообщений: 20,946
14.10.2015, 12:20 #5
ASKMAN,
Цитата Сообщение от Aqua77 Посмотреть сообщение
важно чтобы число не повторялось дважды.
Но даже без этого ваш код достаточно плох.
Тогда уж
C++
1
rand_num = a + rand()%(b-a);
А по теме:
Генерация массива целых случайных чисел, которые не повторяются
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,867
Завершенные тесты: 1
14.10.2015, 12:32 #6
Байт, так получится диапазон [a,b) а не [a,b]
Поэтому rand()%(b-a+1)
1
Barrent
244 / 120 / 41
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
14.10.2015, 12:35 #7
На плюсах проще сделать средствами stl
C++
1
2
3
4
5
6
7
8
9
10
11
int random(int min, int max) {
    static vector<int> numbers;
    if (numbers.size() == 0) {                  
        for (int i = min; i <= max; i++)
            numbers.push_back(i);
        random_shuffle(numbers.begin(), numbers.end()); //перемешивает элементы массива случайным образом
    }
    int number = numbers[numbers.size() - 1];
    numbers.pop_back();
    return number;
}
0
Байт
Эксперт C
16567 / 10837 / 1650
Регистрация: 24.12.2010
Сообщений: 20,946
14.10.2015, 14:50 #8
Цитата Сообщение от Barrent Посмотреть сообщение
На плюсах проще сделать средствами stl
Это называется не сделать, а использовать средства. Сделано-то уже все за вас.
Мне кажется, что смысл подобных упражнений именно в том, чтобы сделать это самому минимальными средствами. Только так можно понять, что это такое.
Хотя польза от изучения и применения того, что сделано до вас, безусловно, тоже есть.
0
Barrent
244 / 120 / 41
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
14.10.2015, 15:10 #9
Цитата Сообщение от Байт Посмотреть сообщение
Это называется не сделать, а использовать средства. Сделано-то уже все за вас.
Отличный велик, зачем новый покупать-то?
Так и до ассемблера можно скатиться.

Добавлено через 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
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <random>
 
using namespace std;
void Mix(vector<int>& numbers);
int random(int min, int max);
 
int main()
{
    for (int i = 0; i <= 10; i++) {
        cout << random(0, 10) << endl;
    }
 
    system("pause");
    return 0;
}
 
void Mix(vector<int>& numbers) {
    int steps = numbers.size() * numbers.size();
    int index1, index2;
    //настройка генератора
    random_device rd;
    mt19937 mersenne(rd());
    uniform_int_distribution<int> random_element(0, numbers.size() - 1);
    //перемешиваем 
    for (int i = 0; i < steps; i++) {
        index1 = random_element(mersenne);
        index2 = random_element(mersenne);
        swap(numbers[index1], numbers[index2]);
    }
}
 
int random(int min, int max) {
    static vector<int> numbers;
    if (numbers.size() == 0) {
        for (int i = min; i <= max; i++)
            numbers.push_back(i);
        Mix(numbers);
    }
    int number = numbers[numbers.size() - 1];
    numbers.pop_back();
    return number;
}
0
Байт
Эксперт C
16567 / 10837 / 1650
Регистрация: 24.12.2010
Сообщений: 20,946
14.10.2015, 15:14 #10
Цитата Сообщение от Barrent Посмотреть сообщение
Отличный велик,
Возразить нечего. Но иногда велик покупают не только для того, чтобы из пункта А доехать в пункт Б, но чтобы и ножки размять. Для здоровья типа. А тут - на кнопочку нажал - и тама. Так икроножные мышцы могут атрофироваться.
Плюс вопрос цены. Не в смысле твердой валюты, а в смысле затраченного времени на освоение всех этих замечательных возможностей. И мотивации. Сделав несколько кругов на своем стареньком велике, уже легче понять, зачем эти замечательные возможности STL нужны.
0
14.10.2015, 15:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2015, 15:14
Привет! Вот еще темы с ответами:

Функция, возвращающая указатель - C++
Здравствуйте. Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив,...

Функция, возвращающая vector - C++
Решил реализовать шарповскую String.Split(). Она должна возвращать vector&lt;string&gt;, следовательно либо для него надо выделять место в...

Функция, возвращающая массив - C++
Возможно ли что функция возвращает массив. Если да то было бы хорошо листинг программы где выполняется такая реализация Спасибо!

Функция, возвращающая массив - C++
Нужно вернуть из функции массив. int F(int a,int* b) { for(int i=0;i&lt;a;i++) *b++; for(int i=0;i&lt;3;i++) printf(&quot;%d\n&quot;, b); ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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