C/C++
Как объявить рандомное положительно и рандомное отрицательно значение переменным float double?
Понятно, что через rand(), но как именно будет выглядть код?
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
class Random {
public:
Random() {
random_device device;
random_generator_.seed(device());
random_generator_64_.seed(device());
}
int next(int first, int last) {
uniform_int_distribution<int> range(first, last);
return range(random_generator_);
}
float next(float first, float last) {
uniform_real_distribution<float> range(first, last);
return range(random_generator_);
}
double next(double first, double last) {
uniform_real_distribution<double> range(first, last);
return range(random_generator_64_);
}
private:
mt19937 random_generator_;
mt19937_64 random_generator_64_;
};
int main() {
const auto pi = 3.141592653589793;
const auto e = 2.718281828459045;
Random rand;
auto a = rand.next(1, 1000);
auto b = rand.next(-e, e);
auto c = rand.next(-pi, pi);
cout << "int: " << a << '\n'
<< "float: " << b << '\n'
<< "double: " << fixed << setprecision(15) << c << '\n';
system("pause > nul");
}
#include <random>
#include <iomanip>
using namespace std;
class Random {
public:
Random() {
random_device device;
random_generator_.seed(device());
random_generator_64_.seed(device());
}
int next(int first, int last) {
uniform_int_distribution<int> range(first, last);
return range(random_generator_);
}
float next(float first, float last) {
uniform_real_distribution<float> range(first, last);
return range(random_generator_);
}
double next(double first, double last) {
uniform_real_distribution<double> range(first, last);
return range(random_generator_64_);
}
private:
mt19937 random_generator_;
mt19937_64 random_generator_64_;
};
int main() {
const auto pi = 3.141592653589793;
const auto e = 2.718281828459045;
Random rand;
auto a = rand.next(1, 1000);
auto b = rand.next(-e, e);
auto c = rand.next(-pi, pi);
cout << "int: " << a << '\n'
<< "float: " << b << '\n'
<< "double: " << fixed << setprecision(15) << c << '\n';
system("pause > nul");
}
Объявляется переменная. А присваивается ей целое рандомное значение через rand()%n+1 и -(rand()%n+1)
Для Вашего задания, видимо, float или double можно присвоить вещественное значение, деля принесенное rand на, например, 100.
P.S. Как заметил user49913, в C++ cуществуют и много лучшие генераторы псевдослучайных и даже истинно случайных чисел, чем древний rand, и тем более генераторы сразу вещественных чисел, и их использование предпочтительно. Но на уровне начинающего сойдет и rand :)
Для Вашего задания, видимо, float или double можно присвоить вещественное значение, деля принесенное rand на, например, 100.
P.S. Как заметил user49913, в C++ cуществуют и много лучшие генераторы псевдослучайных и даже истинно случайных чисел, чем древний rand, и тем более генераторы сразу вещественных чисел, и их использование предпочтительно. Но на уровне начинающего сойдет и rand :)
просто умножь случайный результат на вещественную переменную:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
printf("\n %.3f",rand()*(-1.1));//случ. отриц. знач.
printf("\n %.3f",rand()*1.2);//случ. положит знач.
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
printf("\n %.3f",rand()*(-1.1));//случ. отриц. знач.
printf("\n %.3f",rand()*1.2);//случ. положит знач.
return 0;
}
> Понятно, что через rand()
Нет, не понятно.
За rand в C++ давно пора бить по рукам. Существует <random>, существует uniform_real_distribution. Используйте их.
Нет, не понятно.
За rand в C++ давно пора бить по рукам. Существует <random>, существует uniform_real_distribution. Используйте их.
Arystanbek Taskynbaev
А за такой совет нужно не просто подзатыльник давать, а бить с ноги сразу
Arystanbek Taskynbaev
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));//задаём случайный генератор чисел
printf("\n %d",rand()*(-1));//случайное отрицательное значение
printf("\n %d",rand());//случайное положительное значение
printf("\n %d",rand()%1000);/*случайное полрдительное значение в диапозоне между 0 и 999 */
return 0;
}
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));//задаём случайный генератор чисел
printf("\n %d",rand()*(-1));//случайное отрицательное значение
printf("\n %d",rand());//случайное положительное значение
printf("\n %d",rand()%1000);/*случайное полрдительное значение в диапозоне между 0 и 999 */
return 0;
}
Похожие вопросы
- Поясните за float, double, long double.
- Записать значения чисел фиббоначи в переменные и вернутт одновременно три значения переменных.
- Для заданных с клавиатуры значений переменных x и n вычислить
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Чему равно значение переменной, если ей присвоено значение, возвращенное функцией, которая ничего не возвращает? (+)
- Задача на С Объявить массив данных типа double размером 3 на 3.
- В программе определена переменная double (*a)[20];
- Если в редакторе имя переменной это строковое значение то после компиляции при поиске переменная есть как адресс?
- В чем отличие int, double, float, char
- При совершении арифметических операций с переданными в рекурсивную функцию переменными, переменные меняются(Си)
#include "iostream"
#include "ctime"
#include "cstdlib"
using namespace std;
int main(){
float s, RM=RAND_MAX; srand(time(NULL));
s=rand()/RM; cout<< s<< endl;}