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.
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 {
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( )