Java und Binomialkoeffizient

fjordschritt

fjordschritt

Aktives Mitglied
Thread Starter
Dabei seit
21.05.2008
Beiträge
15.079
Reaktionspunkte
1.651
Guten Abend,

bin etwas verzweifelt. Komme nicht weiter bei der Programmierung von einem Programm. Es soll den Binomialkoeffizient berechnen. Habe auch schon etwas erstellt, jedoch ist das Programm fehlerhaft.

Hoffe, dass hier ein paar User unter uns sind, die so etwas können. Würde gern ein zwei Fragen loswerden zu meinem geschriebenem Programm.
 
Dann poste doch einfach mal deinen Source-Code.
 
bin etwas verzweifelt. Komme nicht weiter bei der Programmierung von einem Programm. Es soll den Binomialkoeffizient berechnen. Habe auch schon etwas erstellt, jedoch ist das Programm fehlerhaft.
Besteht nicht u.a. der Sinn der Übung darin, den Fehler selbst zu finden und daraus etwas zu lernen? Falls nicht, wäre es von Vorteil, wenn Du der versammelten Gemeinschaft Dein Werk im Quellcode mal präsentieren würdest. Hier ist zwar viel möglich, Hellsehen kann hier aber keiner... Und warum stellst Du die beiden Fragen nicht, wenn die dir doch schon so unter den Nägeln brennen?

Ich liebe solche Posts! "Ich habe ein Problem, nenne aber keine Details und ausserdem habe ich zwei Fragen. Die sage ich euch aber nicht". Herr, schmeiss Hirn vom Himmel :hamma:
 
Code:
import javax.swing.JOptionPane;
public class BinomialCoefficient {
public static int calculateBinomialCoefficient(int n, int k){

   public static void main(String args[])
   {
      int k = 0;/*Zahl k*/
      int n = 0;/*Zahl n über*/
      int i;/*Zähler*/
      int u;/*Hilfvariable*/
      int g;/**/
      int gfak=1;
      int NueberK=0;/*N ueber k*/
      int nfak=1;
      int kfak=1;
      JOptionPane.showInputDialog("Geben sie eine Zahl für n ein");
      do
      {
         JOptionPane.showInputDialog("Bitte geben sie eine Zahl für k ein die nicht größer als n ist");
         if(k>n)
         JOptionPane.showMessageDialog(null, "Fehler geben sie einen kleiner Werte als n ein");
      }   while(k>n);
      g=n-k;
      JOptionPane.showMessageDialog(null, "ihr g lautet:"+g);
      for(i=1;i<=g;i++)
      {
      	gfak=gfak*i;
      }	JOptionPane.showMessageDialog(null, "Ihr gfak lautet:"+gfak);
      for(i=1;i<=n;i++)
      {

      	nfak=nfak*i;
      }	JOptionPane.showMessageDialog(null, "nfak lautet:"+nfak);
      for(i=1;i<=k;i++)
      {
      	kfak=kfak*i;
      }	JOptionPane.showMessageDialog(null, "kfak=:"+kfak);
      NueberK=(nfak/(kfak*gfak));
      JOptionPane.showMessageDialog(null, "Ihr NueberK lautet:"+NueberK);
    }
}

Muss noch mal bei der Berechnung gucken, die stimmt noch nicht ganz.
Der einzige Fehler, der angezeigt wird ist: missing return statement. Sollte ich doch aber eigtl schon gesetzt haben.
 
deine main steht innerhalb deiner calculateBinomialCoefficient

ein return machste auch nicht... (taucht ja nirgends das schlüsselwort return auf)

edit: irgenwie fehlt auch noch die schließende klammer der calculateBinomialCoefficient methode :kopfkratz:

so ist es wenigstens ausführbar, allerdings habe ich die logik nicht überprüft:
Code:
import javax.swing.JOptionPane;
public class BinomialCoefficient {


    public static void main(String args[]){calculateBinomialCoefficient();}



   public static void calculateBinomialCoefficient(){
      int k = 0;/*Zahl k*/
      int n = 0;/*Zahl n über*/
      int i;/*Zähler*/
      int u;/*Hilfvariable*/
      int g;/**/
      int gfak=1;
      int NueberK=0;/*N ueber k*/
      int nfak=1;
      int kfak=1;
      JOptionPane.showInputDialog("Geben sie eine Zahl für n ein");
      do
      {
         JOptionPane.showInputDialog("Bitte geben sie eine Zahl für k ein die nicht größer als n ist");
         if(k>n)
         JOptionPane.showMessageDialog(null, "Fehler geben sie einen kleiner Werte als n ein");
      }   while(k>n);
      g=n-k;
      JOptionPane.showMessageDialog(null, "ihr g lautet:"+g);
      for(i=1;i<=g;i++)
      {
      	gfak=gfak*i;
      }	JOptionPane.showMessageDialog(null, "Ihr gfak lautet:"+gfak);
      for(i=1;i<=n;i++)
      {

      	nfak=nfak*i;
      }	JOptionPane.showMessageDialog(null, "nfak lautet:"+nfak);
      for(i=1;i<=k;i++)
      {
      	kfak=kfak*i;
      }	JOptionPane.showMessageDialog(null, "kfak=:"+kfak);
      NueberK=(nfak/(kfak*gfak));
      JOptionPane.showMessageDialog(null, "Ihr NueberK lautet:"+NueberK);
    }
 }
 
Zuletzt bearbeitet:
Ich hätte das berechnen den Binomialkoeffizienten in eine eigene Methode geworfen
Code:
public long binomialCoefficient(int n, int k) {
        long bin = 1;
        
        int m = n - k;
        if (k < m) {
            k = m;
        }
        
        for (int i = n, j = 1; i > k; i--, j++) {
            bin = bin * i / j;
        }
        
        return bin;
    }

Das ganze dann allerdings in eine Klasse getan. Bei uns an der Universität haben wir gleich immer alles Objekt-orientiert gesehen.
 
So, hab das mal etas umgeformt. Jetzt ist das Programm ausführbar. Leider muss ich noch mal bei der Berechnung etwas nachgucken. Die stimmt noch nicht ganz. Gebe zB 6 über 3 ein und eigtl müsste ja 20 rauskommen. Er gibt mir 1 aus. Sollte aber nicht mehr groß das Problem sein.

Was eben dabei schwierig war, das einzuhalten, dass n über k = (n-1 über k-1) + (n-1 über k)

Vielen Dank!
 
Zurück
Oben Unten