hilfe!! java prog binomialkoeffizienten

    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      hab das gerade geschrieben.. liefert das richtige ergebnis bin 12 über...
      geht es höher kommt nur mist raus... erkennt vlt jemand nen fehler??


      import javax.swing.JOptionPane;
      class Bin {

      public static void main(String[] args) {

      int x, y, ys, xg, xm, ym, yf, xz, xj, xs, xe ;
      x = Integer.parseInt(JOptionPane.showInputDialog ("x = "));
      y = Integer.parseInt(JOptionPane.showInputDialog ("y = "));


      ys = 0;
      xg = 1;
      while (xg > 0)
      { ys = ys + x - y ;
      xg-- ; }

      xm = 1;
      while (x > 1)
      { xm = xm * x ;
      x-- ; }

      ym = 1;
      while (y > 1)
      { ym = ym * y ;
      y-- ; }

      yf = 1;
      while (ys > 1)
      { yf = yf * ys ;
      ys-- ; }

      xz = 1;
      xj = 1;
      while (xj > 0)
      { xz = xz * ym * yf ;
      xj-- ; }

      xe = 1;
      xs = 1;
      while (xs >0)
      { xe = xe * xm / xz ;
      xs-- ; }



      JOptionPane.showMessageDialog (null, "Der Binomialkoeffizient ist:" + xe,
      "Result", JOptionPane.PLAIN_MESSAGE);
      System.exit (0) ;

      }
      }
  • 14 Antworten
    • Mart1
      Mart1
      Bronze
      Dabei seit: 23.12.2006 Beiträge: 4.727
      die zahlen werden zu groß, verwende die Klasse java.math.BigInteger ;)
    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      Danke erstmal!!!!!!!... ist ansonsten alles richtig?
      und die klasse setze ich die anstelle von Bin oder wohin??
    • Mart1
      Mart1
      Bronze
      Dabei seit: 23.12.2006 Beiträge: 4.727
      import java.math.BigInteger;
      und statt den ganzen ints halt BigInteger instanzen erstellen und damit rechnen, siehe api doku von der klasse. Ob der Algorithmus tut seh ich jetzt ned, hab auch keine Zeit, aber wenn bis 12 über das richtige rauskommt nehme ich mal an, dass es tut...
    • kingpowl
      kingpowl
      Black
      Dabei seit: 15.10.2006 Beiträge: 2.395
      Bevor du dein Problem raffst würde ich einfach mal überdenken was du jemanden zumutest wenn du ihm so einen (tschuldigung) saucode vor die füße knallst.. ein wunder dass hier überhaupt leute normal antworten
    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      ok thx ich schau dann mal...
    • Ecsmo
      Ecsmo
      Bronze
      Dabei seit: 23.04.2007 Beiträge: 3.262
      Schonmal was von Konventionen gehört? Kommentare? Ach und is schon nice 700 Forenbeiträge zu haben aber immernoch Themen ins falsche Forum zu stellen
    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      danke für die kommentare... ist leider son saucode weils best vorgaben gibt dafür ( zb als variablen nur xIndex, yIndex zu nutzen, kein if else...)& weils eines meiner ersten programme ist... muss sich keiner anschaun der kein bock hat.. falls es jemand macht bin cih froh drum
    • BigBiber
      BigBiber
      Bronze
      Dabei seit: 17.09.2006 Beiträge: 3.279
      Ich habe den ersten Block mal für dich gemacht:

      code:
      import javax.swing.JOptionPane;
      import java.math.BigInteger;
      
      public class Bin {
      
      public static void main(String[] args) {
      
      BigInteger x, y, ys, xg, xm, ym, yf, xz, xj, xs, xe ;
      x = BigInteger.valueOf(Long.parseLong(JOptionPane.showInputDialog ("x = ")));
      y = BigInteger.valueOf(Long.parseLong(JOptionPane.showInputDialog ("y = ")));
      
      
      ys = BigInteger.valueOf(0);
      xg = BigInteger.valueOf(1);
      
      	while (xg.longValue() > 0){ 
      		ys = ys.add(x.subtract(y));
      		xg.subtract(BigInteger.valueOf(1)) ; 
      	}
      
      xm = BigInteger.valueOf(1);
      while (x.longValue() > 1)
      { xm = xm.multiply(x);
      x-- ; }
      
      ym = 1;
      while (y > 1)
      { ym = ym * y ;
      y-- ; }
      
      yf = 1;
      while (ys > 1)
      { yf = yf * ys ;
      ys-- ; }
      
      xz = 1;
      xj = 1;
      while (xj > 0)
      { xz = xz * ym * yf ;
      xj-- ; }
      
      xe = 1;
      xs = 1;
      while (xs >0)
      { xe = xe * xm / xz ;
      xs-- ; }
      
      
      
      JOptionPane.showMessageDialog (null, "Der Binomialkoeffizient ist:" + xe,
      "Result", JOptionPane.PLAIN_MESSAGE);
      System.exit (0) ;
      
      }
      }
      


      Der Rest ist analog ;)
    • csTFG
      csTFG
      Bronze
      Dabei seit: 29.03.2007 Beiträge: 6.456
      Alternativ reichen auch 4 Zeilen (bei grösseren Quotienten BigInteger benutzen):

      code:
      // m über n
      int i = 0, bino = 1;
      while(i < n) {
      	bino = (bino * (m - i)) / (i + 1);
      	i++;
      }
      
      oder
      
      int i, bino = 1;
      for(i = 0; i < n; i++)
      	bino = (bino * (m - i)) / (i + 1);
      
    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      danke!!!
    • BigBiber
      BigBiber
      Bronze
      Dabei seit: 17.09.2006 Beiträge: 3.279
      So siehsts am Besten aus und funktioniert auch

      code:
      import javax.swing.JOptionPane;
      import java.math.BigInteger;
      
      
      public class Binomial {
      
      	
      	public static BigInteger binomialkoe(BigInteger x, BigInteger y){
      		int i = 0;
      		BigInteger bino = BigInteger.ONE;
      		while(i < y.longValue()) {
      			bino = bino.multiply(x.subtract(BigInteger.valueOf(i))).divide(BigInteger.valueOf(i +1));
      			i++;
      		}
      		return bino;
      	}
      	
      	public static void main(String[] args){
      		
      		BigInteger x = new BigInteger(JOptionPane.showInputDialog ("x = "));
      		BigInteger y = new BigInteger(JOptionPane.showInputDialog ("y = "));
      
      		BigInteger ergebnis = binomialkoe(x,y);
      		
      		JOptionPane.showMessageDialog (null, "Der Binomialkoeffizient ist:" + ergebnis,
      				"Result", JOptionPane.PLAIN_MESSAGE);
      
      	}
      }
      


      Naja ich habe langeweile ;)
    • Ecsmo
      Ecsmo
      Bronze
      Dabei seit: 23.04.2007 Beiträge: 3.262
      Original von csTFG
      Alternativ reichen auch 4 Zeilen (bei grösseren Quotienten BigInteger benutzen):
      #2

      einfach mal bei wiki schauen, da ist erklärt was biniomalkoeff. bedeuten und wie sie definiert sind.. dann wirds der code lesbarer und kürzer

      du kannst die herleitung ja noch als kommentar einfügen, das reicht dann 100pro
    • Mart1
      Mart1
      Bronze
      Dabei seit: 23.12.2006 Beiträge: 4.727
      Biber wins obv...
    • lolyourmama
      lolyourmama
      Bronze
      Dabei seit: 11.07.2009 Beiträge: 4.421
      nerds ITT?

      worum gehts hier?