Skocz do zawartości

Program W C++ :(


MitS

Rekomendowane odpowiedzi

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 sad.gif

Ktoś pomoże mi ten program sklecić w całosć ??

 

Pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

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

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ę
×
×
  • Dodaj nową pozycję...