Wątek przeniesiony 2020-03-19 21:14 z Inne języki programowania przez somekind.

Coin toss - rzut monetą

0

Cześć, czy mógłbym prosić o wskazanie błędu w kodzie? Wszystko się kompiluje ale po wpisaniu jakiejkolwiek liczby w programie na wyjściu dostaję samą reszkę. Zależy mi na wskazaniu błędów, które robię a nie pokazaniu jak wygląda dobrze napisany program. Chciałbym dostać wędkę, a nie rybę :)

#include <iostream>
#include <cstdlib>
#include <ctime>

double coin(double prob) {
return (rand() % 100) < prob ? 1 : 0;
}
int main() {	
	double prob;
	std::cin >> prob;
	std::srand(std::time(nullptr));
	for (int counter = 0; counter < 10; ++counter) {
		std::cout << (coin(prob) ? "heads" : "tails") << " "; }
	std::cout << std::endl; }

Poleceniem jest napisanie funkcji, która będzie kompatybilna z programem o kodzie poniżej dlatego nie mogę zmienić części głównej i mogę korzystać tylko z załączonych bibliotek.

int main() {
std::srand(std::time(nullptr));
for (int counter = 0; counter < 10; ++counter) {
std::cout << (coin(0.2) ? "heads" : "tails") << " "; }
std::cout << std::endl; }
3

Dokumentacja: v1 = rand() % 100; // v1 in the range 0 to 99
Podajesz sobie prob = 0.2 czyli masz 1/100, że trafisz 0. Mi się udało za którymś razem.

1

wędka: rand() zwraca liczbę całkowitą pomiędzy 0 i RAND_MAX, ta druga najczęsciej bywa 32tys z hakiem
zasymuluj z ołówkiem kilka wyników i prześledź twoją funcję

2

Zainteresować Cię może współczesna metoda generowania liczb pseudolosowych: https://en.cppreference.com/w/cpp/numeric/random Do Twojego celu najlepiej się nada std::bernoulli_distribution

Trochę prze-inżynierowane, jak to w C++, ale pozwala uniknąć wielu pułapek (na przykład Twoje rozwiązanie nie daje jednorodnego rozkładu).

0

Bardzo dziękuję za pomoc. Oczywiście nie pomyślałem o tym, że funkcja rand podaje mi liczby całkowite a prawdopodobieństwo jest podawane w ułamku dziesiętnym.
Co się zaś tyczy "rozgęścienia" kodu to nie wiem o co chodzi - czy mógłbym prosić o wytłumaczenie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1