Programmierung

Pascal'sches Dreieck - Java


 
  1. Aufgabe

    Ausgabe der Kombinationen ohne Wiederholung [ K(Anzahl) aus n(Gesamt) oder n  über k).

    6 aus 49 =                                                (34Bit-Zahl !!!)
    (n) 49          49 * 48 * 47 * 46 * 45 * 44 = 10.068.347.520
    (-) über        ---------------------------------     ------------------- =13.983.816 Kombinationen
    (k) 6              1 *   2 *   3 *   4 *   5 *   6 =                    720

     Das obige Zwischenergebnis dieser relativ kleinen Aufgabe, kann bei einigen
     Programmiersprachen schon zum Überlauf führen.
     z.B. sprengt es schon den Datentyp des Longword (32-Bit) bei C++
     oder LongInt (32-Bit) bei Turbo Pascal.
     In Java kann die Zahl im Datentyp long 64 Bit groß sein (max. 9.223.372.036.854.775.807).
     Einfacher ist es über das Pascalsche Dreieck.

     n=0            1    
     n=1          1  1      
     n=2        1  2  1
     n=3      1  3  3  1
     n=4    1  4  6  4  1
     usw.
                ---------------
     k=      1  2  3  4  5
     usw

  2. Struktogramm

    Das Pascalsche Dreieck

  3. Quellcode

    import
    java.io.*
    /** Funktion: Pascalsches Dreieck
        Ausgabe der Kombinationen ohne Wiederholung (k aus n  oder  n über k).
        Applikation ohne Oberfläche, läuft in der Dos-Box: "java pascal"
        @author   DG1XPZ
        @version  JDK 131
    */

    class
    pascal {

      
    static long[ ][ ] pascalMatrix = null;    //2-Dimensionale Matrix deklarieren

       public static void main( String[ ] vArgs ) {
           pascal p = new pascal ( );         //Instanz von der Klasse "pascal" erzeugen
           System.out.println("Pascal'sches Dreieck.");  // Ausgabe auf Bildschirm
           System.out.println("Kombinationen ohne Wiederholung (k aus n).");  // Ausgabe auf Bildschirm
           System.out.println("Bitte Zahl 1. eingeben (von k aus n):");  // Ausgabe auf Bildschirm
           int k = p.eingabe( );                  //k-Wert von Tastatur holen
           System.out.println("Bitte Zahl 2. eingeben (von k aus n):");  // Ausgabe auf Bildschirm
           int n = p.eingabe( );                 //n-Wert von Tastatur holen
           System.out.println("Bei "+k+" aus "+n+" gibt es "+p.getPascal(k,n)+" Kombinationen");
        // System.out.println(p.get2DMatrix( )); //zeigen des Pascalschen Dreieck (wenn gewünscht)
       }

       /** Funktion: Eingabe (ganze Zahl) von Tastatur einlesen
            @exception IOException  Wenn keine Zahlen sondern Buchstaben o. Zeichen eingegeben wurden
            @return                             Die zurückgegebene Integerzahl
       */

       private int
    eingabe( ) {
           int m=0;
           BufferedReader eing=new BufferedReader (new InputStreamReader(System.in));
           // Eingabepuffer erzeugt, für Eingabe über Tastatur
           try {    //Fehlerbehandlung einleiten (try=versuche)
              String eingstr=eing.readLine( );                     // Lese String von Eingabepuffer (Tastatur)
              m=Integer.parseInt(eingstr);                           // Umwandeln String in Zahl
           } catch(java.io.IOException ioe) {                      // wenn Fehler dann Meldung erzeugen
              System.err.println("Fehler! Eingabe konnte nicht interpretiert werden!");
              // Ausgabe der Fehlermeldung wenn keine Zahlen eingegeben wurden
          
    }
           return m//Rückgabe der ganzen Zahl
       }//private int eingabe( )

      
    /** Funktion: Kombinationen ohne Wiederholung nach der Methode "Pascal'sches Dreieck" 
          @param k  Erster Wert von "k aus n" (Anzahl)
          @param n  Zweiter Wert von "k aus n" (Gesamtanzahl)
          @return     Rückgabe der möglichen Kombinationen ohne Wiederholung
     */

      public long getPascal( int k,int n ){
         long ret=0;
         pascalMatrix = new long[ n+1 ][ ];   //Anzahl der Zeilen
         for (int i=0; i<pascalMatrix.length;i++){
            pascalMatrix[ i ]=new long[pascalMatrix.length-i];   //Zeile i = i+1 Spalten
            pascalMatrix[ i ][ 0 ]=1;                                             // n-tes Feld der Spalte 0 mit 1en füllen
            pascalMatrix[ 0 ][ i ]=1;                                             // n-tes Feld der Zeile 0 mit 1en  füllen
         }
         for ( int j=0; j<(pascalMatrix.length-1); j++){
            for ( int i=0;i<(pascalMatrix[ j ].length-2);i++){
               pascalMatrix[ j+1 ][ i+1 ]=pascalMatrix[ j+1 ][ i ]+pascalMatrix[ j ][ i+1 ];
            }
         }
         ret=pascalMatrix[ n-k ][ k ];
         return(ret);  //Rückgabe der Kombinationen ohne Wiederholung
      } //public long getPascal(int k,int n)

      /** Funktion: Ausgabe einer 2D-Matrix
      @param array Die auszugebende 2D-Matrix
      @return           Rückgabe der gesamten 2D-Matrix als String
      */

      public String get2DMatrix( ){
         String s="";
         for (int row=0;row<pascalMatrix.length;row++){
            s=s+"n="+row+": ";
            for (int column=0;column<pascalMatrix[row].length;column++){
               s=s+pascalMatrix[row][column]+" ";
            }
            s=s+"\n";
         }
         return(s); //Rückgabe des zusammengesetzten Strings
      } //public String get2DMatrix( )

    } //class pascal


  4. Download pascal.java

  5. Download pascal.class

 

http://www.counter-service.de http://www.counter-service.de

Home
uebermich
Programmierung
Amateurfunk
Elektronik
Download
Links
E-Mail
Gästebuch/Meckerecke
Counter-DG1XPZ