Bitte um Hilfe - Binomial

deiwid

Grünschnabel
Berechnet werden soll: n! / k! (n-k)!

Ich bekomme bei meinem Programm keine Fehlermeldung. Das einzige was das Progeramm nicht will, ist die return Formel zu retournieren. "return 0" das macht er aber nicht return "n/(k*(n-k)) "

Als wenn ich 3 und 2 eingebe passiert einfach nichts...

Code:
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;

int Binomial(int n, int k) {
	
	if (n > k) {
		
		for (int i = n-1 ; i > 0; i=i-1) {
		n = n*i ; }

		for (int j = k-1 ; j > 0; j=j-1) {
		j = k*j ; }
	
	return n/(k*(n-k)) ;

	}

	else 
	return 0;


}


int main() {

int x, y ;
cout << "Geben sie n ueber k ein: " << endl ;
cin >> x ;
cin >> y ;

cout << "Ergebnis: " << Binomial(x, y) << endl ; 

}
 
Jetzt mal theoretische Frage.
C++:
n/(k*(n-k)) ;
willst du nicht im ersten n die Fakultät und im zweiten das normale n? und das selbe mit k?

Mach dir doch einfach eine Funktion:
C++:
namespace math
{
    inline const unsigned long factorial(const unsigned int n)
    { 
        unsigned long result(1UL);
        for (unsigned int i(n); i; --i) result *= n;
        return result;
    }

    inline const unsigned long binomial_coefficient(const unsigned int n, const unsigned int k)
    { return factorial(n) / (factorial(k) * factorial(n - k)); }
}; // math
...
C++:
std::cout << math::binomial_coefficient(3, 2) << std::endl;
;) so ist's doch nett :)

Bearbeitung
Sehe gerade, dass du noch ein Beispielprogramm drum herum hast.
C++:
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;
- <stdio.h> ist der C-Standard(std)-Header für Ein(i)- und Aus(o)gaben.
- <stdlib.h> ist der C-Standard(std)-Header für generelle Werkzeuge.
Sie wurden zwar beide in den C++-Standard übernommen (es handelt sich aber weiter um C-Funktionen! Probleme treten hier bei der Verwendung von Klassen usw. auf), doch liegen Sie nun im Namensraum std und sind in den Headern <cstdio> und <cstdlib>. Das "c" kennzeichnet halt, das sie aus dem C-Standard übernommen wurden.

Beide Header brauchst du aber in dem Beispiel überhaupt nicht!
Header: math.hpp
C++:
#if !defined MATH_HPP__INCLUDED
#define MATH_HPP__INCLUDED

#if (_MSC_VER >= 1300)
#pragma once
#endif // (_MSC_VER >= 1300)

namespace math
{
    inline const unsigned long factorial(const unsigned int);
    inline const unsigned long binomial_coefficient(const unsigned int, const unsigned int);
}; // math

#endif // MATH_HPP__INCLUDED

Source: math.cpp
C++:
#include "math.hpp"

namespace math
{
    const unsigned long factorial(const unsigned int n)
    { 
        unsigned long result(1UL);
        for (unsigned int i(n); i; --i) result *= n;
        return result;
    }

    const unsigned long binomial_coefficient(const unsigned int n, const unsigned int k)
    { return factorial(n) / (factorial(k) * factorial(n - k)); }
}; // math

So ... dieses Modul kannst du ja dann beliebig erweitern. Halt nen paar mathematische Funktionen implementieren. Aber so wäre es wenigstens ordentlich strukturiert.

C++:
#include <iostream>
#include "math.hpp"

int main()
{
    std::cout << "Binomial Coefficient Calculator V0.1 BETA\n"
              << "\nk: " << std::flush;
    unsigned int k(0);
    std::cin >> k;
    std::cout << "n: " << std::flush;
    unsigned int n(0);
    std::cin >> n;
    std::cout << "n!\n___________ = " << math::binomial_coefficient(n, k) << "\n k! * (n - k)!" << std::endl;
    
    std::cin.ignore();
}
;) Wäre doch so was feines :D
 
Zuletzt bearbeitet:
Zurück