// Fakultät, Kombinationen und Variationen werden berechnet:

// Getestet mit D4 unter WinME

       
function fakultaet(n:shortint):extended;
var
x:integer;
begin
if
n >= 0 then begin
result:=1;
for x:=2 to n do
result:=result * x;
end else result:=0;
end;

function
kombinationen(n,k:shortint):extended;
begin
if
(n <= 0) or (k < 0) or (n < k)
then result:=0 else
result:=fakultaet(n) / (fakultaet(k) * fakultaet(n - k));
end;

function
variationen(n,k:shortint):extended;
begin
if
(n <= 0) or (k < 0) or (n < k)
then result:=0 else
result:=fakultaet(n) / fakultaet(n - k);
end;



// Beispiel für Fakultät:
// Angenommen, man hat die drei Buchstaben A, B und C. Wieviel unterschiedliche
// Strings kann man damit bilden, unter der Voraussetzung, dass immer alle drei
// Buchstaben und keine weiteren Zeichen verwendet werden?
//
(ABC, ACB, BAC, BCA, CAB, CBA)
// Der entsprechende Code wäre beispielsweise:

procedure TForm1.Button1Click(Sender: TObject);
var f:extended;
begin
f:=fakultaet(3);
// A B C = drei Buchstaben
if f > 0 then
label1.caption:=floattostr(f)
else
label1.caption:='Fakultät konnte nicht ermittelt werden';
end;
 


// Beispiel für Kombinationen:
// Typisch für diese Rechenart ist die Frage: Wieviel Möglichkeiten gibt es
// bei "6 aus 49"? Voraussetzung bei Kombinationen ist, dass Variationen einer
// Folge als die gleiche Bedingung angesehen werden. So ist es bei einem
// Lotto-Tip völlig gleich, ob ich in der Reihenfolge "
1 14 20 31 40 45" oder
// "
20 14 1 45 31 40" ankreuze.
// Der entsprechende Code wäre beispielsweise:

procedure TForm1.Button3Click(Sender: TObject);
var f:extended;
begin
f:=kombinationen(49,6);
if f > 0 then
label1.caption:=floattostr(f)
else
label1.caption:='Kombinationen konnten nicht ermittelt werden';
end;

 

// Beispiel für Variationen:
// Im Gegensatz zu Kombinationen ist bei Variationen die Reihenfolge der Glieder
// innerhalb eines Ausdrucks durchaus ein Kriterium. Angenommen ich habe die vier
// Buchstaben
A, B, C und D. Wieviel verschiedene Zweiergruppen kann ich davon
// bilden?
//
(AB, BA, AC, CA, AD, DA, BC, CB, BD, DB, CD, DC)
// Der entsprechende Code wäre beispielsweise:

procedure TForm1.Button2Click(Sender: TObject);
var f:extended;
begin
f:=variationen(4,2);
if f > 0 then
label1.caption:=floattostr(f)
else
label1.caption:='Variationen konnten nicht ermittelt werden';
end;



Zugriffe seit 6.9.2001 auf Delphi-Ecke