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