import java.io.*; /** Funktion: Kombinationen ohne Wiederholung nach der Methode "Pascal'sches Dreieck"
(k aus n oder n über k)
Applikation ohne Oberfläche, läuft in der Dos-Box: "java pascal"
@author DG1XPZ @version JDK131 */ 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. von von \"k aus n\" eingeben:"); // Ausgabe auf Bildschirm int k = p.eingabe(); //k-Wert von Tastatur holen System.out.println("Bitte Zahl 2. von von \"k aus n\" eingeben:"); // 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 ohne Wiederholung.\n"); // 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 oder Zeichen eingegeben wurden @return Rückgabe der 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 Zahl 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: Ausgabe der 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 */ public long getPascal(int k,int n){ // 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 gross sein (max. 9.223.372.036.854.775.807). // Einfacher ist es über das Pascalsche Dreieck. // // n=0 1 1+1 // n=1 1 1 =2 // 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 long ret=0; pascalMatrix = new long[n+1][]; //Anzahl der Zeilen for (int i=0;i