Coin toss - rzut monetą

Coin toss - rzut monetą

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

Bartosz Gruszkowski
Bartosz Gruszkowski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 3 lata
  • Postów:24
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ę :)

Kopiuj
#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.

Kopiuj
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; }
AK
a) dlaczego typ funkcji coin jest double? to nie ma sensu b) rozgęść ten kod
szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:dzień
  • Lokalizacja:Kraków
  • Postów:1694
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.

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
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ę


Bo C to najlepszy język, każdy uczeń ci to powie
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 22 godziny
  • Postów:1607
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).

Bartosz Gruszkowski
Bartosz Gruszkowski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 3 lata
  • Postów:24
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?

AK
b) więcej linii, nie musisz tak oszczędzać. Klamra zamykająca pod otwierającą itd..., popatrz jak typowo wyglądają źródła
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:dzień
  • Lokalizacja:Szczecin
1

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.