21 Востаннє редагувалося Joker (07.08.2014 11:17:55)

Re: swap [Вирішено]; random

один із варіантів, вказати що x - дробове
але %, не працює з дробовими числами.

22

Re: swap [Вирішено]; random

Дарма. Сміливішим треба бути. Щоб з цілого отримати дробне, його треба (ЗНЕНАЦЬКА) поділити! От і все. На що саме? Залежить від того, що саме вам треба отримати. Ось вам дробні числа від 0.0 до 0.99 з кроком 0.01:

double x = ( rand() % 100 ) / 100.0;

Наступна загадка: чому саме 100.0, а не 100?

Подякували: Joker1

23

Re: swap [Вирішено]; random

тому що 100 автоматично перетвориться у тип int і тоді нічо не зміниться. А так ми вказали, що 100.0 доробове
Дякую!!!

24

Re: swap [Вирішено]; random

Абож ось так

double x = ( rand() % 100 ) / (double)100;

25

Re: swap [Вирішено]; random

Напишіть вираз для випадкового числа з проміжку (a,b) із кроком h (всі - double) і закриваємо тему :)

26

Re: swap [Вирішено]; random

a i b тоже double?!
це ускладнює задачу

27

Re: swap [Вирішено]; random

Жодним чином, формули практично ті самі.

28

Re: swap [Вирішено]; random

ну заки я визначився як зробити правильний крок. Оскільки 100.0 і 00.1 - трошка різні числа, а h - буде вводитися саме 00.1 таким чином.

p.s. числа 100.0 і 00.1 я взяв для прикладу, щоб показати що я зотів сказати

29 Востаннє редагувалося koala (08.08.2014 05:34:29)

Re: swap [Вирішено]; random

x = a + h * rand() % (  ( b - a ) / h );

30

Re: swap [Вирішено]; random

Заки зробив правильно коли a і b типу int

Прихований текст
#include <iostream>
#include <conio.h>
#include <time.h>
#include <random>
using namespace std;

int main()
{
    srand(time(NULL));

    int a, b;
        double h;
    double rez;

    cout << "\n" << "Enter a,b,h --> ";
    cin >> a >> b >> h;

    rez = (rand() % (b+1-a) + a) * h;

    cout << rez;
    _getch();
    return 0;
}

Маю відлучитися на 5 хвилин.

31

Re: swap [Вирішено]; random

Неправильно. Хай a = 100, b = 200, h = 0.1. Тоді
rand() % (b+1-a) ∈ [0; 101)
rand() % (b+1-a) + a ∈ [100; 201)
(rand() % (b+1-a) + a) * h ∈ [10; 20.1)

32 Востаннє редагувалося Joker (07.08.2014 12:54:27)

Re: swap [Вирішено]; random

Ух тоді я запутався. Потрібен час.

Ну ось такий вираз начебто працює для цілих чисел

rez = (rand() % (b+1-a) + a);

оооо. Я трошка в'їхав. Це можна розкласти ось так:

    rez = (rand() % (b+1-a) + a);
    rez *= h;

А тут 1 рядок видає норм ціле число від int a до int b;
а у наступному рядку, виникає певний колапс.
Для прикладу 1 рядок rez = 123; тоді 2 рядок = 123 * 0,1 = 12,3
І ось тут максимальним значенням вже може бути тільки 20.0

Ух тоді я запутався. Потрібен час.

33

Re: swap [Вирішено]; random

x = h * ( a + rand() * ( b - a ) / h );

Ну так h буде вводитися не 100,0 а 0,01 (для прикладу)
А тут тепер його ще тре перетворити з 0,01 до 100,0.

Я так зрозумів це правильна відповідь. Якось не побачив раніше коли писав повідомлення.
Але не все зрозуміло.

Чому ми ділимо на h? Є ще питання але спершу це.

34

Re: swap [Вирішено]; random

x = h * ( a + rand() * ( b - a ) / h );

Взагалі за допомогою яких чарів ви все це обрахували? Як ви це все зробили?

35

Re: swap [Вирішено]; random

Вибачте, вчора нашвидкоруч писав і таки помилився. Правильна формула вище записана.
А як отримана? Ну дуже просто: нам потрібні значення від a до b з кроком h: a, a + h, ..., a + i * h, ..., b
Останній коефіціент можна знайти з a + i * h = b => i = ( b - a ) / h. Отже, щоб отримати потрібну кількість випадкових чисел, треба зробити

rand() % ( ( b - a ) / h )

Щоб ці числа були з кроком h, треба зробити

h * rand() % ( ( b - a ) / h )

а щоб починалися з a

a + h * rand() % ( ( b - a ) / h )

Єдине питання - це дає змогу тримати числа в діапазоні від a (включно) до b (невключно), але то вже технічні дрібниці.

Подякували: Joker1

36

Re: swap [Вирішено]; random

koala, а ви взагалі людина, чи суперкомп'ютер з майбутнього?
На вигляд все не так і важко, але сам я б довго думав. (у мене тверде 10+ з математики).
дякую ще раз.

37

Re: swap [Вирішено]; random

Це просто лінійне перетворення. Після 1 семестру будете таке в голові робити, якщо лінійна алгебра буде :)
Особлива подяка Наталії Дмитрівні :)

38

Re: swap [Вирішено]; random

1 семестру

де у інституті? Мені ще 2  роки до ЗНО

39

Re: swap [Вирішено]; random

лінійне перетворення

Може ви порадите якусь статтю/відео/чи ще щось почитати (не по С++, а саме по цій темі)

Дякую, koala. Можливо я повторюся але you are in real cool !!!

40

Re: swap [Вирішено]; random

С++, як це давно було. Року 3 назад вивчала його. А зараз вже багато чого не пам'ятаю, на жаль, так як не використовую його