У меня проблемы с пониманием концепции rand () и srand () в c ++. Мне нужно создать программу, которая отображает два случайных числа, пользователь должен ввести ответ, затем сопоставить ответ с сообщением и сделать это 5 раз.
Мой вопрос: как мне его использовать, в инструкциях сказано, что я не могу использовать функцию time (), и это, похоже, есть в каждом онлайн-уроке о rand ().
это то, что я до сих пор.
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main()
{
int seed;
int response;
srand(1969);
seed=(rand()%10+1);
cout<<seed<<" * "<<seed<<" = ";
cin>>response;
cout<<response;
if(response==seed*seed)
cout<<"Correct!. you have correctly answered 1 out of 1."<<endl;
else
cout<<"Wrong!. You have correctly answered 0 out of 1."<<endl;
Это просто выводит что-то вроде 6 * 6 или 7 * 7, я думал, что переменная семени не обязательно будет другой, но не всегда одинаковой?
Вот как должен выглядеть вывод:
3 * 5 =
34
Wrongo. You have correctly answered 0 out of 1.
8 * 1 =
23
Wrongo. You have correctly answered 0 out of 2.
7 * 1 =
7
Correct! You have correctly answered 1 out of 3.
2 * 0 =
2
Wrongo. You have correctly answered 1 out of 4.
8 * 1 =
8
Correct! You have correctly answered 2 out of 5.
Final Results: You have correctly answered 2 out of 5 for a 40% average.
и это требования:
Ваша программа должна использовать rand () для генерации псевдослучайных чисел по мере необходимости. Вы можете использовать srand () для инициализации генератора случайных чисел, но, пожалуйста, не используйте никакой «автоматический» инициализатор (такой как функция time ()), так как они могут зависеть от платформы. Ваша программа не должна использовать петли.
То, как вы используете его сейчас, кажется, хорошо. Причина, по которой все учебники используют time()
потому что цифры будут отличаться каждый раз, когда вы бежать ваша программа Таким образом, если вы используете фиксированное число, то при каждом запуске вашей программы вывод (генерация номера) будет одинаковым. Тем не менее, в соответствии с вашими требованиями это не является проблемой (если вам нужно, чтобы генерация случайных чисел отличалась при каждом запуске вашей программы, укажите это в своем вопросе).
Тем не мение, rand()%10+1
это диапазон от 1 to 10
и не 0 to 10
Как ты хочешь.
ПОСЛЕ РЕДАКТИРОВАНИЯ
Чтобы получить желаемый результат, все, что вам нужно, это сделать два семени следующим образом:
seed1=(rand()%11);
seed2=(rand()%11);
cout<<seed1<<" * "<<seed2<<" = ";
Кроме того, вы можете попросить пользователя seed
а затем передать это srand
чтобы каждый пробег был более случайным.
О требованиях:
пожалуйста, не используйте «автоматический» инициализатор (например, time ()
функция), так как они могут зависеть от платформы
std::time
является стандартной функцией C ++ в <ctime>
заголовок. Я не понимаю, почему это важно, если результат зависит от платформы.
Ваша программа не должна использовать петли.
Это тоже очень странное требование. Циклы являются фундаментальными строительными блоками любой программы. Требования кажутся мне очень странными, я бы попросил вашего профессора или учителя дать разъяснения.
Кстати, так как это C ++, вы должны действительно стремиться использовать std::uniform_int_distribution
, например
#include <functional>
#include <random>
...
auto rand = std::bind(std::uniform_int_distribution<unsigned>(0, 10),
std::default_random_engine());
Теперь вы можете просто использовать rand()
генерировать число в желаемом интервале.
На окнах вы можете использовать GetTickCount () вместо этого, если время ().
Вы могли бы использовать rand_s который не должен быть посеян.
В системах * nix вы можете использовать / dev / random.
Ты используешь srand()
чтобы засечь случайную функцию. Это необходимо, иначе вы получите одинаковую последовательность номеров при каждом запуске и при каждом вызове rand()
Вы можете посеять ранд с тем, что пожелаете. Вы обнаружите, что большинство уроков используют текущее время в качестве начального числа, поскольку возвращаемое число обычно отличается при каждом запуске программы.
Если вы действительно не можете использовать time()
функциональность, я бы передавал семя в качестве аргумента командной строки.
int main(int argc, char* argv[])
{
srand(atoi(argv[1])); // Seed with command line argument.
}