matematykaszkolna.pl
Obliczanie kombinacji lotto w języku C. Andrzej: Witam! Na podstawie wzoru przedstawionego na tej (https://matematykaszkolna.pl/strona/1015.html) stronie chciałem obliczyć możliwość wszystkich kombinacji w losowaniu lotto. Gdzie z 49 wszystkich kul zostaje wylosowanych 6. Niestety zamiast wyniku otrzymuję liczbę 0. Po wstawieniu mniejszych liczb w mój wzór w kodzie wyświetla mi się poprawny wynik. A więc problemem jest najpewniej zły typ zmiennej. Czy ktoś mógłby wskazać błąd i powiedzieć jak go naprawić? Oto i kod: #include <stdio.h> int silnia(int a); int main(void){ puts("Program obliczajacy prawdopodobienstwo wygrania w totolotka"); int zbiorcalkowity, podzbior; long long int kombinacje; zbiorcalkowity = 49; // Liczba wszystkich pileczek w lotto podzbior = 6; // podzbior wylosowanych pileczek kombinacje = silnia(zbiorcalkowity)/silnia(podzbior)*silnia(zbiorcalkowity−podzbior); printf("Istnieje %lld kombinacji standardowych wynikow lotto\n ", kombinacje); return 0; } int silnia(int a){ int wynik = 1; while(a > 1){ wynik *= a; a−−; } return wynik; }
7 sie 16:54
MQ: 1o wzór na kombinacje zły 2o Co oznacza: return 0; ?
7 sie 16:59
Andrzej: Co konkretnie złego jest w tym wzorze? "return 0" oznacza koniec głównej funkcji w języku C bez żadnych błędów.
7 sie 17:06
MQ: Konkretnie to, że ty liczysz:
49! 

*(49−6)!
6! 
zamiast:
49! 

6!*(49−6)! 
7 sie 17:14
wmboczek: nie używaj typu int do wyniku − silnia za szybko rośnie i masz przekroczenie zakresu
7 sie 18:38
PW: Człowiek liczy
 49•48•47•46•45•44 

 2•3•4•5•6 
bo szkoda mu czasu, ani mu nie jest potrzebna wiedza ile to jest 49! czy 43! Komputer musisz zaprogramować podobnie − „siłowe” liczenie silni kończy się „przepełnieniem”
7 sie 19:58