![]() |
AW: Pascalsche Dreieck
Was ist denn mit so einem Konstrukt:
Delphi-Quellcode:
Diese passend verknotet und das Dreieck berechnet sich von selbst ;)
TPDNode = class
private FLeft, FRight : TPDNode; function GetValue : Integer; public property Left : TPDNode read FLeft write FLeft; property Right : TPDNode read FRight write FRight; property Value : Integer read GetValue; end; function TPDNode.GetValue : Integer; begin Result := 0; if Assigned( Left ) then Result := Result + Left.Value; if Assigned( Right ) then Result := Result + Right.Value; if Result = 0 then Result := 1; end; |
AW: Pascalsche Dreieck
Zitat:
Sieh erst einmal zu, dass du die Rechenvorschrift "verstehst". Dann können wir uns immer noch über Code unterhalten. Und die Vorschrift ist einfach .. eine Zahl im pascalschen Dreieck ist:
Das war es schon :mrgreen: |
AW: Pascalsche Dreieck
Zitat:
natürlich :oops: habe zwar 2D-Array geschrieben, aber im Code falsch definiert..
Delphi-Quellcode:
habe den Beitrag editiert
PasDreieck : Array of Array of Integer;
|
AW: Pascalsche Dreieck
Hey, danke lbccaleb. Werde mir den Wikipedia Artikel erst mal vornehmen. Obwohl danach immer noch kein Code, bzw. nur der hier gepostete da ist, den ich ja verstehen will.
Ich kann gerne meinen Code hier posten, der mit FPC nicht läuft. Es ist der von MrMooed, von hier kopiert. Habe den in eine Unit gepackt. Hier ist sie:
Delphi-Quellcode:
[Edit]:
unit UTriangle;
{$mode objfpc}{$H+} interface uses Classes, SysUtils; procedure PasDreieckHasPlanes(var Ebenen: Integer); procedure BildeDreieck; procedure AusgabeInTabelle; implementation var Ebene: Integer; PasDreieck: array of Integer; procedure PasDreieckHasPlanes(var Ebenen: Integer); var PasDreieck : Array of Integer; i, j : Integer; begin Ebene := Ebenen; for i:=0 to Ebenen -1 do begin SetLength(PasDreieck[i], i+1); // Länge für jede Ebene um 1 erweitern //An dieser Stelle in Lazarus Type mismatch //liegt das an der falschen Array Definition (nur eindimensional dimensioniert?) PasDreieck[i,Low(PasDreiech[i])] := 1; // Eins am Anfang //hier Illegal Qualifier ( Folgefehler ? ) PasDreieck[i,high(PasDreieck[i])] := 1; // Eins am Ende end; end; procedure BildeDreieck; var i,j: Integer; begin 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; end; procedure AusgabeInTabelle(tabelle: TStringGrid); var i,b: Integer; begin if Assigned(tabelle) then for i:=Low(PasDreieck) to High(PasDreieck) do for b:=Low(PasDreieck[i]) to High(PasDreieck[i]) do tabelle.Cells[i,b] := IntToStr(PasDreieck[i,b]); end; procedure AusgabeInMemo(memo: TMemo); var i,b: Integer; Plane: String; begin if Assigned(Memo) then for i:=Low(PasDreieck) to High(PasDreieck) do for b:=Low(PasDreieck[i]) to High(PasDreieck[i]) do begin Plane := IntToStr(PasDreieck[i]) + ' '; memo.Lines.Add(Plane); end; end; end. //Im Formular: procedure TForm1.btnApplyClick(Sender: TObject); begin FPlanes := IntToStr(Edit1.Text); //Anzahl Ebenen PasDreieckHasPlanes(FPlanes); BildeDreieck; //Hier käme dann die Ausgabe des Pascalschen Dreiecks end; Nach Anderung der Deklaration in Array of Array of Integer wird SetLenth so akzeptiert, aber der Error: Illegal qualifier bleibt bestehen. Hab mir auch die .zip Datei von @lbccaleb runter geladen. Diesen Code werde ich in den nächsten Tagen studieren und dazu auch den Wikipediartikel studieren. Wenn dann noch Fragen übrig sind, melde ich mich eh wieder. Aber es bleibt das seltsame Verhalten von Lazarus bei der Übersetzung des Codes von MrMooed. Was kapiert FPC da nicht? . |
AW: Pascalsche Dreieck
Hallo,
habe mir die Wikipedia angeschaut und zusätzlich eine mathematische Formelsammlung. So habe ich rausgefunden, daß (n über k) = (n*(n-1)*(n-2)*(n-k+1)/k! ist. im Quelltext unten (aus dreieck_770.zip <Unit1.pas>) ist i aber nicht als i fakultät ersichtlich. Warum funktioniert die Rechnung dennoch. Was habe ich da übersehen?
Delphi-Quellcode:
function nuebk(n,k: integer): integer;
var i: integer; begin result := 1; for i := 1 to k do result := (n-i+1)*result div i; //ist i hier nicht einfach i statt i!??? end; |
AW: Pascalsche Dreieck
Zitat:
Das eigentlich Interessante ist etwas ganz anderes: Du mußt zeigen, daß Integer-Divisionen hier korrekt sind, d.h. Du mußt Dir klarmachen, daß alle Divisionen mit div ohne Rest aufgehen. |
AW: Pascalsche Dreieck
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz