r = rand() - код
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int a , r;
r = rand();
for(a = 0;r<=20000;a++)
r = rand();
cout<<"R = " << r <<"A = " << a;
return 0;
}
Зачем мы пишем два раза r = rand(), нельзя просто написать r = rand() перед for или после for, разницы же нету? Если не написать r = rand() после for, то будет генерироваться случайное число, а если r = rand() не написать перед for, то программа вообще работать не будет. И почему генерируется одно и то же число? Можете дать пояснения всем функция и r = rand()
Ответы (2 шт):
Ну смотрите -
r = rand();
for(a = 0;r<=20000;a++)
Если не вызывать первый rand(), то в r будет мусор, который вы и сравниваете с 20000. Что неверно - вам нужно сравнивать не мусор, а случайное значение, правда?...
Если так больше нравится -= перепишите код как
int a , r;
for(a = 0; (r = rand()) <= 20000; a++);
cout << "R = " << r << " A = " << a << endl;
Это просто метод определения, каким по счету будет сгенерировано случайное число, превышающее 20000. Если использовать ваш код - я бы переписал его с правильными отступами, чтобы это стало понятнее:
r = rand();
for(a = 0; r <= 20000; a++) r = rand();
cout << "R = " << r << " A = " << a;
Одно и то же число - потому что генератор случайных чисел выдает при запуске одну и ту же последовательность, что полезно при отладке. Но вы можете избавиться от этого, дописав первой инструкцией после int main() {, например,
srand(time(0));
А вообще-то в С++ уже давно пора переходить на более современные средства из <random>, все ж таки уже 10 лет как стандарт С++11 принят...
Мне кажется вообще более логично было бы проинициализировать r нулём вместо rand() и в инициализаторе цикла:
int a, r;
for(a = 0, r = 0; r <= 20000; a++)
r = rand();
Принцип DRY придумали не просто так, он по многим причинам полезен, код без повторений вызывает гораздо меньше вопросов.
И в таком варианте переменная a содержит в итоге ровно число вызовов rand. Если нужно, чтобы там было строго число вызовов rand ДО того, как выпало число больше 20000, то можно потом вычесть 1 или инициализировать a в цикле -1, а не 0