Ansonsten habe ich mir ein altes Schulprojekt herausgekramt:
Stell dir das Dreieck einfach als 2D-Array vor.
Code:
Ebene: | Ergebnis:
0 | 1
1 | 1 1
2 | 1 2 1
3 | 1 3 3 1
4 | 1 4 6 4 1
Bei dem Dreieck wissen wir als einziges, dass außen
immer eine '1' steht. Außerdem sehen wir, dass jede Dimension (Ebene) einen Wert mehr hat, als die vorherige.
D.h. konkret, dass wir ein Array erschaffen müssen, dessen Dimensionen immer um eins incrementiert werden und "außen" den Wert '1' besitzen:
Delphi-Quellcode:
procedure PasDreieck(var Ebenen: Integer);
var
PasDreieck : Array of Array of Integer;
i, j : Integer;
begin
for i:=0 to Ebenen -1 do
begin
SetLength(PasDreieck[i], i+1); // Länge für jede Ebene um 1 erweitern
PasDreieck[i,Low(PasDreiech[i])] := 1; // Eins am Anfang
PasDreieck[i,high(PasDreieck[i])] := 1; // Eins am Ende
end;
end;
Wie man aus der Tabelle sehen kann, müssen
wir erst ab der 3. Ebene anfangen zu rechnen - davor kommen nur unsere Einsen vor
Delphi-Quellcode:
for i:=2 to Ebene -1 do
for j:=1 to High(PasDreieck[i]) -1 do
begin
PasDreieck[i,j] := PasDreieck[i-1,j-1] + PasDreieck[i-1, j];
end;
Und das Array kannst du nun in welcher Form auch immer du willst ausgeben.
Delphi-Quellcode:
for i:=Low(PasDreieck) to High(PasDreieck) do
for b:=Low(PasDreieck[i]) to High(PasDreieck[i]) do
StringGrid1.Cells[i,b] := IntToStr(PasDreieck[i,b]);
Wäre z.B. eine von vielen Möglichkeiten