AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pascalsche Dreieck

Ein Thema von Mr. General · begonnen am 29. Okt 2008 · letzter Beitrag vom 3. Jul 2013
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 20:28
Was ist denn mit so einem Konstrukt:
Delphi-Quellcode:
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;
Diese passend verknotet und das Dreieck berechnet sich von selbst
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#12

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 20:29
Deshalb möchte ich gerne wissen, warum FPC an dieser Stelle bockt?
Am Code von MrMooed ist etwas faul ... es sieht aus, als sollte ein Array von Arrays von Integern genutzt werden, es wird aber nur ein Arrays von Integern definiert.

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:
  • 1 (wenn sie die erste oder letzte in ihrer Zeile ist)
  • die Summe der "beiden darüber liegenden" Zahlen (sonst)

Das war es schon
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#13

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 20:34
Am Code von MrMooed ist etwas faul ... es sieht aus, als sollte ein Array von Arrays von Integern genutzt werden, es wird aber nur ein Arrays von Integern definiert.

natürlich habe zwar 2D-Array geschrieben, aber im Code falsch definiert..

PasDreieck : Array of Array of Integer; habe den Beitrag editiert
  Mit Zitat antworten Zitat
Nintendo

Registriert seit: 16. Feb 2009
82 Beiträge
 
#14

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 21:20
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:
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;
[Edit]:
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?

.

Geändert von Nintendo ( 2. Jul 2013 um 21:30 Uhr)
  Mit Zitat antworten Zitat
Nintendo

Registriert seit: 16. Feb 2009
82 Beiträge
 
#15

AW: Pascalsche Dreieck

  Alt 3. Jul 2013, 09:24
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;
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#16

AW: Pascalsche Dreieck

  Alt 3. Jul 2013, 09:38
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?
Nein, Du hast nichts übersehen. Mathematisch ist das alles korrekt, das i läuft halt durch die verschiedene Werte 1,2,... in Deiner Formel, wobei die Produkte im Zähler ((n*(n-1)*(n-2)*...*(n-k+1)) und im Nenner (1*2*...*k) von links nach rechts durchlaufen wird, also (((n div 1)*(n-1) div 2)* ...)

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.

Geändert von gammatester ( 3. Jul 2013 um 10:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#17

AW: Pascalsche Dreieck

  Alt 3. Jul 2013, 12:34
Was ist denn mit so einem Konstrukt:
Delphi-Quellcode:
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;
Diese passend verknotet und das Dreieck berechnet sich von selbst
Wie genau kann man das dann verwenden?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz