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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
#1

Random for double:( - C++

10.09.2013, 23:27. Просмотров 1944. Ответов 21
Метки нет (Все метки)

Задание: Создать функцию random(a, b), которая возвращает случайное вещественное число от вещественного числа a включительно до вещественного числа b не включительно.

И что такое static_cast<double>?

Похожие задания:
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
#include <iostream>
#include <cstdlib> // для использования генератора случайных чисел
#include <ctime>   // функции времени для инициализации генератора с. ч.
 
using namespace std;
 
int main() {
  srand(unsigned(time(0))); // инициализации генератора с. ч.
 
  // rand() генерирует псевдослучайное целое число от 0 до 
  // константы RAND_MAX, значение которой не меньше, чем 32767
 
  // Случайное целое от 0 до 99
  int n1 = rand() % 100;
  cout << n1 << endl;
 
  // Случайное целое от a=10 до b=99
  const int a = 10;
  const int b = 100;
  int n2 = rand() % (b - a) + a;
  cout << n2 << endl;
 
  // Случайное вещественное от 0 до 1
  double d = static_cast<double>(rand()) / RAND_MAX;
  cout << d << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 23:27     Random for double:(
Посмотрите здесь:

C++ invalid operands of types ‘double*’ and ‘double’ to binary ‘operator*’
Какая-нибудь реализация функции void Fun (double in, double *out) C++
C++ Объяснить, что это значит double *F; F=new double[n];
C++ Ошибка: невозможно преобразовать 'double' в 'double'
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
C++ std::copy из vector<double> в *double, непонятный warning
Домашнее задание ошибки double circle_area(double R) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,940
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 23:28     Random for double:( #2
Цитата Сообщение от DmitryM5 Посмотреть сообщение
И что такое static_cast<double>?
http://www.rsdn.ru/article/cpp/static_cast.xml
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
10.09.2013, 23:30  [ТС]     Random for double:( #3
Была такая идея,но ...
double random(double a,double b) {
return static_cast<double>((rand() % (b - a) + a))/RAND_MAX;
}
Миниатюры
Random for double:(  
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,940
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 23:34     Random for double:( #4
Применяете остаток от деления к вещественным числам
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
10.09.2013, 23:46  [ТС]     Random for double:( #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Применяете остаток от деления к вещественным числам
не понял(

Добавлено через 9 минут
Все время левую границу выдает
C++
1
2
3
double random(double a,double b) {
return static_cast<double>(rand()/RAND_MAX*(b-a)+a);
}
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 01:17     Random for double:( #6
Цитата Сообщение от DmitryM5 Посмотреть сообщение
не понял(

Добавлено через 9 минут
Все время левую границу выдает
double random(double a,double b) {
return static_cast<double>(rand()/RAND_MAX*(b-a)+a);
}
Кастить надо перед делением целого числа на целое.
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
11.09.2013, 08:58  [ТС]     Random for double:( #7
Цитата Сообщение от Nekto Посмотреть сообщение
Кастить надо перед делением целого числа на целое.
C++
1
2
3
double random(double a,double b) {
return (static_cast<double>(rand()/RAND_MAX))*(b-a)+a;
}
Тоже самое...
SatanaXIII
11.09.2013, 09:15
  #8
 Комментарий модератора 
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
11.09.2013, 09:19  [ТС]     Random for double:( #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
А как это делать?
SatanaXIII
Супер-модератор
Эксперт С++
5588 / 2622 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
11.09.2013, 09:35     Random for double:( #10
DmitryM5, выделяете ваш код и нажимаете на кнопку с соответствующим тегом на панели над окном ввода сообщения.
К примеру, для тега C++:
Random for double:(
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.09.2013, 10:02     Random for double:( #11
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
11.09.2013, 10:40  [ТС]     Random for double:( #12
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
Спасибо,поясни что такое fmod и куда пропал randmax?
И почему мой кол не работал,вроде правилен.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.09.2013, 10:45     Random for double:( #13
Операция % - это взятие остатка от деления для целых чисел. Для чисел с плавающей точкой для этого есть специальная функция fmod, которая принимает в качестве параметров делимое и делитель, и возвращает остаток от деления. Собственно а зачем здесь RAND_MAX?
Петррр
5939 / 3376 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
11.09.2013, 10:51     Random for double:( #14
Оно?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 12:27     Random for double:( #15
Цитата Сообщение от Toshkarik Посмотреть сообщение
Операция % - это взятие остатка от деления для целых чисел. Для чисел с плавающей точкой для этого есть специальная функция fmod, которая принимает в качестве параметров делимое и делитель, и возвращает остаток от деления. Собственно а зачем здесь RAND_MAX?
Если b-a имеет только целую часть, то по твоей формуле по идее окончательный ответ тоже будет иметь только целую часть+дробную от а.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// drand.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <cstdlib>
#include <cmath>
#include <iostream>
 
double DRand2 (double a, double b) {
  return a+static_cast<double>(std::rand())/RAND_MAX*(b-a);
  }
 
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  for (double a=0, b=1;a<20;++a,b+=2)
    std::cout<<a<<" "<<b<<" Rand: "<<DRand(a,b)<<" Rand2: "<<DRand2(a,b)<<std::endl;
    return 0;
}
Код
0 1 Rand: 0 Rand2: 0.00125126
1 3 Rand: 1 Rand2: 1.38661
2 5 Rand: 3 Rand2: 3.75503
3 7 Rand: 5 Rand2: 4.40117
4 9 Rand: 8 Rand2: 8.1142
5 11 Rand: 10 Rand2: 6.04465
6 13 Rand: 12 Rand2: 10.9735
7 15 Rand: 10 Rand2: 9.43196
8 17 Rand: 16 Rand2: 8.82263
9 19 Rand: 15 Rand2: 10.4731
10 21 Rand: 17 Rand2: 20.8738
11 23 Rand: 20 Rand2: 12.429
12 25 Rand: 18 Rand2: 12.1158
13 27 Rand: 25 Rand2: 20.4433
14 29 Rand: 19 Rand2: 23.0265
15 31 Rand: 29 Rand2: 17.6597
16 33 Rand: 28 Rand2: 23.6634
17 35 Rand: 21 Rand2: 18.0267
18 37 Rand: 21 Rand2: 32.8831
19 39 Rand: 33 Rand2: 29.3977
Press any key to continue . . .
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
11.09.2013, 17:32  [ТС]     Random for double:( #16
Цитата Сообщение от Nekto Посмотреть сообщение
Если b-a имеет только целую часть, то по твоей формуле по идее окончательный ответ тоже будет иметь только целую часть+дробную от а.
Не работает ни Toshkarik'a программа,не твоя Nekto...
Она выводит либо одно и то же число,либо с небольшим различием ,допустим 6.00125,6.00130 и так по несколько раз.....

Добавлено через 4 минуты
Цитата Сообщение от Nekto Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// drand.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <cstdlib>
#include <cmath>
#include <iostream>
 
double DRand2 (double a, double b) {
  return a+static_cast<double>(std::rand())/RAND_MAX*(b-a);
  }
 
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  for (double a=0, b=1;a<20;++a,b+=2)
    std::cout<<a<<" "<<b<<" Rand: "<<DRand(a,b)<<" Rand2: "<<DRand2(a,b)<<std::endl;
    return 0;
}
Что вообще вот это такое??
C++
1
2
3
4
// drand.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
11.09.2013, 17:36  [ТС]     Random for double:( #17
Так всегда выводит одно и тоже..
Миниатюры
Random for double:(  
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 23:51     Random for double:( #18
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Так всегда выводит одно и тоже..
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/cpp/numeric/random/srand
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
12.09.2013, 22:12  [ТС]     Random for double:( #19
Цитата Сообщение от Nekto Посмотреть сообщение
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/cpp/numeric/random/srand
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Миниатюры
Random for double:(   Random for double:(  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 23:38     Random for double:(
Еще ссылки по теме:

C++ Вывести long double число без перевода в double
Почему перестает работать программа при замене double на long double? C++
C++ Random и объекты класса (pseudo random)
C++ Error: invalid types 'double [10][10][double]' for array subscript
Исправить ошибки "cannot convert 'double (*)(double)' to 'double'" и "too many arguments to function" C++

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 23:38     Random for double:( #20
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Потому что псевдогенератор.
Yandex
Объявления
12.09.2013, 23:38     Random for double:(
Ответ Создать тему
Опции темы

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