MitS Napisano Październik 10, 2005 Zgłoszenie Share Napisano Październik 10, 2005 Witam! Robię mały programik w C++ obliczający ilość możliwych zestawów liczbowych w dużym lotku oraz ile trzeba wydać pieniędzy by mieć 100% pewność że się wygra w dużego lotka. Mój kompilator: gcc 4.0 System operacyjny: Linux Dystrybucja: Fedora Core 4 Jądro: 2.6.11 Język programowania: C++ I aby obliczyć zadanie to trzeba zrobić coś takiego: Dane: n = 49 k = 6 Poniżej jest formuła matematyczna w tex'ie napisana i można ja zobaczyć pod adresem: http://www.matematyka.pl/viewtopic.php?p=40011#40011 [tex] C\begin{array}{ccc}k\\n\end{array} = \frac{n!}{k! * (n-k)!}[/tex] [tex] C\begin{array}{ccc}6\\49\end{array} = \frac{49!}{6! * (49-6)!} = 13983816[/tex] PLN = 13983816 * 1,20 = 16780579.20 Wynik 13983816 to wynik możliwych zestawów losowań dużego lotka, a kwota jaką nalezy wydać by mieć 100% pewność trafienia w dużego lotka wynosi 16780579.20 PLN I teraz chcem napisać program obliczający to co podałem powyżej i napisałem już tak: #include <iostream> #include <math.h> #include <cstdlib> using namespace std; int factorial(int l) { int z; if (l < 0) return 0; if ((l == 0) || (l == 1)) return 1; z = factorial(l-1)*l; return z; } int main(int argc, char *argv[]) { int k; int n; double z; cout << "Podaj ilość liczb do wylosowania: "; cin >> k; cout << "Podaj ilość wszystkoch liczb, z których się losuje: "; cin >> n; cout << "Podaj kwote jednego zakładu: "; cin >> z; cout << endl; double C; double PLN; C = (factorial(n))/((factorial(k))*(factorial(n-k))); cout << C << endl; PLN = C * z; cout << PLN << endl; return 0; } Ale coś źle to oblicza Ktoś pomoże mi ten program sklecić w całosć ?? Pozdro Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
KozaK Napisano Październik 10, 2005 Zgłoszenie Share Napisano Październik 10, 2005 Witam. Dokonalem paru poprawek i u mnie wynik wychodzi dobry. Wyjasnienia sa w komentarzach. Oto kod: #include <iostream> #include <math.h> #include <cstdlib> #include <iomanip> // do obslugi manipulatora "setprecision(int)" using namespace std; double factorial(int l) // zamienilem zmienna na "double", bo przy "int", a nawet "long int" liczba wychodzila poza zakres. { double z; // j.w. if (l < 0) return 0; if ((l == 0) || (l == 1)) return 1; z = factorial(l-1)*l; return z; } int main(int argc, char *argv[]) { int k; int n; double z; cout << "Podaj ilość liczb do wylosowania: "; cin >> k; cout << "Podaj ilość wszystkoch liczb, z których się losuje: "; cin >> n; cout << "Podaj kwote jednego zakładu: "; cin >> z; cout << endl; double C; double PLN; C = (factorial(n))/((factorial(k))*(factorial(n-k))); cout << setprecision(15) << C << endl; // mapnipulator setprecision pozwala okreslic do ilu cyfr znaczacych wypisywac wynik PLN = C * z; cout << setprecision(15) << PLN << endl; return 0; } Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 11, 2005 Autor Zgłoszenie Share Napisano Październik 11, 2005 Dzięki KozaK .... znowu mi pomogłeś i znowu wszystko działa Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się