Program w C++

Awatar użytkownika
MitS
Użytkownik
Użytkownik
Posty: 150
Rejestracja: 30 mar 2005, o 06:59
Płeć: Mężczyzna
Lokalizacja: Olsztyn
Podziękował: 23 razy
Pomógł: 2 razy

Program w C++

Post autor: MitS »

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

\(\displaystyle{ C\begin{array}{ccc}k\\n\end{array} = \frac{n!}{k! * (n-k)!}}\)
\(\displaystyle{ C\begin{array}{ccc}6\\49\end{array} = \frac{49!}{6! * (49-6)!} = 13983816}\)
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:

Kod: Zaznacz cały

#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
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Program w C++

Post autor: Fibik »

Musisz to liczyć na rzeczywistych, a nie int.
double silnia(int n)
{
if( n <= 1 ) return 1;

double m = n;
while( --n != 1 ) m *= n;

return m;
}

można też zamiast double użyć 'long double'
Awatar użytkownika
MitS
Użytkownik
Użytkownik
Posty: 150
Rejestracja: 30 mar 2005, o 06:59
Płeć: Mężczyzna
Lokalizacja: Olsztyn
Podziękował: 23 razy
Pomógł: 2 razy

Program w C++

Post autor: MitS »

Ok rozwiązałem problem ...
Z tym double to też, ale głównie chodziło o mapnipulator setprecision który pozwala okreslic do ilu cyfr znaczacych wypisywac wynik.

No to już mam

Jak by ktoś kodu potrzebował to:

Kod: Zaznacz cały

#include <iostream>
#include <math.h>
#include <cstdlib>
#include <iomanip> // do obslugi manipulatora "setprecision(int)"

using namespace std;

double factorial(int l) 
{
double 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 << setprecision(15) << C << endl;            // mapnipulator setprecision pozwala okreslic do ilu cyfr znaczacych wypisywac wynik
PLN = C * z;
cout << setprecision(15) << PLN << endl;
return 0;
}
Pozdro
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1430
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

Program w C++

Post autor: Undre »

a można by to po prostu ograniczyć przy wypisywaniu korzystając z funkcji printf ?
arigo
Użytkownik
Użytkownik
Posty: 852
Rejestracja: 23 paź 2004, o 10:17
Płeć: Mężczyzna
Lokalizacja: Lublin
Pomógł: 28 razy

Program w C++

Post autor: arigo »

Undre pisze:a można by to po prostu ograniczyć przy wypisywaniu korzystając z funkcji printf ?
mozna, takie cos jest nawet duzo bardziej przenosne
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Program w C++

Post autor: Fibik »

Jeśli to cudo gdzieś przenosić, to tylko do kibla.
ODPOWIEDZ