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 zbior
calkowity, podzbior;
long long int kombinacje;
zbior
calkowity = 49; // Liczba wszystkich pileczek w lotto
podzbior = 6; // podzbior wylosowanych pileczek
kombinacje = silnia(zbior
calkowity)/silnia(podzbior)*silnia(zbior
calkowity−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:
zamiast:
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