Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
1

Поменять генератор случайных чисел на rand()

20.02.2022, 13:33. Показов 1022. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
 
#include <random>
 
#include <cmath>
 
#include <string>
 
#include <ctime>
 
using namespace std;
 
void sort(float mas[],float t){
 
int n=0;
 
for(int j=0;j<(int)t;j++){
 
for(int i=0;i<((int)t)-1-n;i++){
 
 if(abs(mas[i])>abs(mas[i+1])){
 
  float temp = mas[i+1];
 
  mas[i+1] = mas[i];
 
  mas[i]=temp;
 
 }
 
 
 
}n++;}
 
}
 
void enter(std::string phrase[],float numberOfPhrase[]){
 
for(short i=0;i<4;i++){
 
cout<<phrase[i]<<std::endl;
 
cin>>numberOfPhrase[i];}
 
};
 
int main(){
 
int count = 0,max=0;
 
setlocale(0,"");
 
string phrases[4] = {"Введите количество элементов массива:",
 
                          "Введите минимальный предел:",
 
        "Введите максимальный предел:",
 
        "Введите число для сравнения с элементами массива:"};
 
float number_of_var[4];
 
double sum=0;
 
enter(phrases,number_of_var);
 
float* numbers = new float[static_cast<int>(number_of_var[0])];
 
std::mt19937 gen(time(0));
 
   std::uniform_real_distribution<> uid(number_of_var[1],number_of_var[2]);
 
for(int i=0;i<number_of_var[0];i++){
 
 numbers[i] = uid(gen);
cout<<"["<<i<<"] = "<<numbers[i]<<std::endl;
 
 if(numbers[i]<number_of_var[3]) count++;
 
 if(numbers[max] == numbers[i]) continue;
 
 else if(numbers[max]<numbers[i]) max=i;
 
}
 
for(int i = max+1;i<(int)number_of_var[0];i++){
 
 sum+=numbers[i];
 
}
 
std::cout<<"Чисел, меньших за "<<number_of_var[3]<<" - "<<count<<" чис-ел/-ло/-ла"<<std::endl;
 
std::cout<<"Максимальное число массива = "<<numbers[max]<<". Сумма чисел после него = "<<sum<<std::endl;
 
sort(numbers,number_of_var[0]);
 
std::cout<<"Отсортированный масив:"<<std::endl;
 
for(int i=0;i<(int)number_of_var[0];i++){
 
 std::cout<<"["<<i<<"] = "<<numbers[i]<<std::endl;
 
}
 
delete[]numbers;
 
return 0;
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2022, 13:33
Ответы с готовыми решениями:

Генератор случайных чисел (без rand)
Помогите пожалуйста , нужен Генератор случайных чисел без использования rand() на с++. Спасибо

Генератор случайных чисел rand() выдаёт одинаковые числа
Например, сделаем маленькую программу в которой будет переменная int chislo. Дальше будет так:...

Генерация случайных чисел (rand () % 6)
Приветствую всех. Изучаю &quot;С&quot; с нуля, дошел до генерации случайных чисел. С генерацией все ясно, не...

С помощью rand() сделать генератор дробных чисел
srand(time(NULL)); rand()%1000; этот генератор генерирует целые числа, как сделать что-бы он...

12
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 16:00  [ТС] 2
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
 
#include <random>
 
#include <cmath>
 
#include <string>
 
#include <ctime>
 
using namespace std;
 
void sort(float mas[],float t) {
 
int n=0;
 
for(int j=0;j<(int)t;j++) {
 
for(int i=0;i<((int)t)-1-n;i++) {
 
if(abs(mas[i])>abs(mas[i+1])) {
 
float temp = mas[i+1];
 
mas[i+1] = mas[i];
 
mas[i]=temp;
 
}
 
 
 
} n++; }
 
}
 
void enter(std::string phrase[],float numberOfPhrase[]) {
 
for(short i=0;i<4;i++) {
 
cout<<phrase[i]<<std::endl;
 
cin>>numberOfPhrase[i]; }
 
} ;
 
int main() {
 
int count = 0,max=0;
 
setlocale(0,"");
 
string phrases[4] = { "Введите количество элементов массива:",
 
"Введите минимальный предел:",
 
"Введите максимальный предел:",
 
"Введите число для сравнения с элементами массива:" } ;
 
float number_of_var[4];
 
double sum=0;
 
enter(phrases,number_of_var);
 
float* numbers = new float[static_cast<int>(number_of_var[0])];
 
std::mt19937 gen(time(0));
 
std::uniform_real_distribution<> uid(number_of_var[1],number_of_var[2]);
 
for(int i=0;i<number_of_var[0];i++) {
 
numbers[i] = uid(gen);
cout<<"["<<i<<"] = "<<numbers[i]<<std::endl;
 
if(numbers[i]<number_of_var[3]) count++;
 
if(numbers[max] == numbers[i]) continue;
 
else if(numbers[max]<numbers[i]) max=i;
 
}
 
for(int i = max+1;i<(int)number_of_var[0];i++) {
 
sum+=numbers[i];
 
}
 
std::cout<<"Чисел, меньших за "<<number_of_var[3]<<" - "<<count<<" чис-ел/-ло/-ла"<<std::endl;
 
std::cout<<"Максимальное число массива = "<<numbers[max]<<". Сумма чисел после него = "<<sum<<std::endl;
 
sort(numbers,number_of_var[0]);
 
std::cout<<"Отсортированный масив:"<<std::endl;
 
for(int i=0;i<(int)number_of_var[0];i++) {
 
std::cout<<"["<<i<<"] = "<<numbers[i]<<std::endl;
 
}
 
delete[]numbers;
 
return 0;
 
}
0
20 / 9 / 4
Регистрация: 22.01.2015
Сообщений: 186
20.02.2022, 16:15 3
В смысле, чтобы использовать генератор случайных чисел rand()?

В visual studio достаточно #include <iostream>. По крайней мере, у меня работет.
А вообще эта функция из библиотеки stdlib.h
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 16:27  [ТС] 4
sergeydeleu, просто в этом коде используется
C++
1
2
3
std::mt19937 gen(time(0));
 
std::uniform_real_distribution<> uid(number_of_var[1],number_of_var[2]);
а это для новых программ, а у меня старая devcpp и у преподователя
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.02.2022, 17:03 5
Цитата Сообщение от Msrsis Посмотреть сообщение
а у меня старая devcpp и у преподователя
у меня тоже старая devcpp но код компилируется. "Чудеса" - скажете?
Миниатюры
Поменять генератор случайных чисел на rand()  
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.02.2022, 17:45 6
вот такое попробуйте - код для генерации случайного float в заданном диапазоне
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
#include <cstdlib>
 
 
int main() 
{
    srand((unsigned)time(0));
    float const a = -1.022f, b = 3.15f;// нижний и верхний пределы
    float const dif = b - a;
    while (true)
    {
        std::cout << rand() * dif / RAND_MAX + a;
        std::cin.get();
    }
}
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 19:25  [ТС] 7
igorrr37, выходит такая ошибка
Миниатюры
Поменять генератор случайных чисел на rand()  
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 19:31  [ТС] 8
igorrr37, или что надо изменить в моём коде?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.02.2022, 20:12 9
у вас компилятор TDM GCC древний. Вот установите поновей
https://github.com/jmeubank/td... .3.0-2.exe
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 21:02  [ТС] 10
igorrr37, это отдельная программа?

Добавлено через 2 минуты
igorrr37, как ее установить?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.02.2022, 21:06 11
Цитата Сообщение от Msrsis Посмотреть сообщение
как ее установить?
https://www.youtube.com/watch?v=-vi0Okp0p6M
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 203
20.02.2022, 21:11  [ТС] 12
igorrr37, спасибо большое установил, а можете пожалуйста помочь как исправить в коде чтобы через обычный rand, а не через mt19937 gen(time(0)); ? Как именно исправить
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
20.02.2022, 21:29 13
Лучший ответ Сообщение было отмечено Msrsis как решение

Решение

Кликните здесь для просмотра всего текста
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <random>
#include <cmath>
#include <string>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
void sort(float mas[], float t) {
 
    int n = 0;
 
    for (int j = 0; j < (int)t; j++) {
 
        for (int i = 0; i < ((int)t) - 1 - n; i++) {
 
            if (abs(mas[i]) > abs(mas[i + 1])) {
 
                float temp = mas[i + 1];
 
                mas[i + 1] = mas[i];
 
                mas[i] = temp;
 
            }
 
        }n++;
    }
}
 
void enter(std::string phrase[], float numberOfPhrase[]) {
 
    for (short i = 0; i < 4; i++) {
 
        cout << phrase[i] << std::endl;
 
        cin >> numberOfPhrase[i];
    }
 
};
 
int main() {
 
    int count = 0, max = 0;
 
    setlocale(0, "");
 
    string phrases[4] = { "Введите количество элементов массива:",
 
                              "Введите минимальный предел:",
 
            "Введите максимальный предел:",
 
            "Введите число для сравнения с элементами массива:" };
 
    float number_of_var[4];
 
    double sum = 0;
 
    enter(phrases, number_of_var);
 
    float* numbers = new float[static_cast<int>(number_of_var[0])];
 
    srand((unsigned)time(0));
    float const a = number_of_var[1], b = number_of_var[2];// нижний и верхний пределы
    float const dif = b - a;
 
    for (int i = 0; i < number_of_var[0]; i++) {
 
        numbers[i] = rand() * dif / RAND_MAX + a;
        cout << "[" << i << "] = " << numbers[i] << std::endl;
 
        if (numbers[i] < number_of_var[3]) count++;
 
        if (numbers[max] == numbers[i]) continue;
 
        else if (numbers[max] < numbers[i]) max = i;
 
    }
 
    for (int i = max + 1; i < (int)number_of_var[0]; i++) {
 
        sum += numbers[i];
 
    }
 
    std::cout << "Чисел, меньших за " << number_of_var[3] << " - " << count << " чис-ел/-ло/-ла" << std::endl;
 
    std::cout << "Максимальное число массива = " << numbers[max] << ". Сумма чисел после него = " << sum << std::endl;
 
    sort(numbers, number_of_var[0]);
 
    std::cout << "Отсортированный масив:" << std::endl;
 
    for (int i = 0; i < (int)number_of_var[0]; i++) {
 
        std::cout << "[" << i << "] = " << numbers[i] << std::endl;
 
    }
 
    delete[]numbers;
 
    return 0;
 
}
1
20.02.2022, 21:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2022, 21:29
Помогаю со студенческими работами здесь

Rand(), генерирование случайных чисел в заданном интервале
дана функция int MyDblRand(double a,double b) надо написать так что когда будем вызывать функцию в...

Создать массив случайных чисел в с++, используя rand
как это сделать ? вот объявляем массив ,например: int mas ,как сделать так , чтоб он заполнялся...

Получить через генератор случайных чисел матрицу и поменять местами первый и последний элементы в ней
1. Получить через генератор случайных чисел матрицу и поменять местами первый и последний элементы...

Написать генератор псевдослучайных чисел, равномерно распределенных на интервале [ 0., 0.5] ( использовать rand())
Написать генератор псевдослучайных чисел, равномерно распределенных на интервале (...

Моделирование бросания игральной кости с помощью генератора случайных чисел rand()
Бросание игральной кости. Напишите программу, моделирующую бросание игральной кости с помощью...

Создать файл из 50 целых чисел, используя генератор случайных чисел
Создать файл из 50 целых чисел, используя генератор случайных чисел. Вывести эти числа на экран....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru