login  Naam:   Wachtwoord: 
Registreer je!
 Forum

nCr in c++

Offline roofgah - 28/11/2006 10:59
Avatar van roofgahHTML interesse Hallo

Ik ben een programma aan het maken die kansen berekend. Nou heb ik daar de berekening van nCr voor nodig. Hoe doe je dat in c++?

Groeten Rutger

5 antwoorden

Gesponsorde links
Offline gothmog - 28/11/2006 20:45 (laatste wijziging 28/11/2006 20:50)
Avatar van gothmog Lid nCr:
Bovenste getal: n
Onderste getal: k

Dan bereken je de combinaties door:

n!/(n-k)!

Bijv: n=5, k=3
combinaties=5*4*3*2*1/((5-3)!)
combinaties=5*4*3*2*1/(2!)
combinaties=5*4*3*2*1/(2*1)

Edit: Sorry, dit is permutaties^^
Moment...

( n ) Boven
( k ) Onder

combinaties=n! / (k! * (n - k))
Let goed op de haakjes;)
Offline nemesiskoen - 28/11/2006 22:51
Avatar van nemesiskoen Gouden medaille

PHP expert
en in c++

  1. // standard crap
  2.  
  3. int fac(int getal) {
  4. for (int returnGetal = getal--; getal >= 1; return *= getal--);
  5. return returnGetal;
  6. }
  7.  
  8. void main(void) {
  9. int n = 5;
  10. int k = 3;
  11. cout << fac(n) / (fac(k) * (n-k));
  12. }


Dit heeft overigens niets met OOP te maken.
Offline roofgah - 29/11/2006 08:31 (laatste wijziging 29/11/2006 17:34)
Avatar van roofgah HTML interesse hallo

dit had ik ook al bedacht om die nCr om te zetten in een andere formule. Ik had mijn wiskunde boek nagekeken en daar stond die met faculteit in. Maar C++ deed niet 6! ofzo iets. Maar nu zie ik hoe je het doet. Bedankt allebei.  

[edit] Nou krijg ik als ik compile een hoop fouten. Ook als ik alleen dit doe:

  1. #include <iostream> //includeren van input en output
  2. #include <string> //includeren van de string
  3. using namespace std; //de namespace
  4.  
  5. int fac(int getal) {
  6. for (int returnGetal = getal--; getal >= 1; return *= getal--);
  7. return returnGetal;
  8. }
  9.  
  10. void main(void) {
  11. int n = 5;
  12. int k = 3;
  13. cout << fac(n) / (fac(k) * (n-k));
  14. }
  15.  
  16.  
  17.  
  18.  
  19. return 0; //de afsluit prodedure
  20.  
  21. }


de fout zit rond "for (int returnGetal......"

Wat is er fout?

[edit2]

  1. //faculteit
  2. double fac (double a)
  3. {
  4. if (a > 1)
  5. return (a * fac (a-1));
  6. else
  7. return (1);
  8. }
  9. //de faculteit beschreven


Dit is de faculteit die ik op internet gevonden heb. Het werkt goed maar ik snap niet wat er gebeurd. Zou iemand dat mij kunnen uitleggen? Zit deze functie in c++ of is deze functie nou juist in die paar regels gemaakt?

[/edit2]
Offline nemesiskoen - 29/11/2006 18:23
Avatar van nemesiskoen Gouden medaille

PHP expert
Dat heet recursie, de functie roept zichzelf heel de tijd opnieuw aan, totdat a gelijk is aan 1.
Dan krijg je dus:
fac(5) (5 * fac(4))
fac(4) => (4 * fac(3))
fac(3) => (3 * fac(2))
fac(2) => (2 * fac(1))
fac(1) => (1)
=>
5 * 4 * 3 * 2 * 1 => 5!
Offline roofgah - 30/11/2006 15:39
Avatar van roofgah HTML interesse ja oke:) ik snap het. Ik heb het programma af en het werkt. Je kan het zien bij de script ik heb hem zojuist gepost. Ik hoor het graag als er iets aan is wat niet goed is.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.192s