AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pascalsche Dreieck

Ein Thema von Mr. General · begonnen am 29. Okt 2008 · letzter Beitrag vom 3. Jul 2013
Antwort Antwort
ericsson333

Registriert seit: 1. Jul 2013
1 Beiträge
 
#1

AW: Pascalsche Dreieck

  Alt 1. Jul 2013, 19:21
Hallo zusammen,

bäuchte auch mal das Pascal'sche Dreieck mit Eingabe der Zeilenlänge in einem Edit-Feld. Ausgabe über
ButtonClick in einer Listbox. Könnte mit hierzu vielleicht einer behilflich sein.
Habe nächste Woche Klausur und keinen Plan wie ich das umsetzen soll. Ich weiß auch nicht wie ich
die Ausgabe über Memofeld umschreiben könnte.

Weiß hier jemand was??
VIelen dank vorab.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

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

AW: Pascalsche Dreieck

  Alt 1. Jul 2013, 19:34
Bist du dir sicher, dass die Ausgabe über eine TListBox erfolgen soll?

Vielleicht meinst du eine TListView? Wäre jedenfalls meiner Meinung nach deutlich sinnvoller
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Pascalsche Dreieck

  Alt 1. Jul 2013, 20:33
Also eine Listview?
Dann eine ListBox mit Courier-Zeichensatz und '*' und ' '.
Noch hübscher ist natürlich eine Paintbox.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

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

AW: Pascalsche Dreieck

  Alt 1. Jul 2013, 21:00
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

Geändert von MrMooed ( 2. Jul 2013 um 20:34 Uhr)
  Mit Zitat antworten Zitat
Nintendo

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

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 19:46
Hi,

habe einfach mal mit Copy und Paste den Code übernommen, aber Lazarus 0.9.29 stößt sich an der SetLength Anweisung.

Auf dem Lazarus 1.0.6 Rechner hab ich auch Delphi installiert. Deshalb möchte ich gerne wissen, warum FPC an dieser Stelle bockt?

Das nächste ist das Verständnis des Codes. Kann da mal bitte jemand Pseudocode posten? Ich habe das bisher so weit verstanden, das am Anfang das Minimalfeld und das Maximalfeld gleich 1 gesetzt werden Wenn nur ein Feld da, (oberste Ebene), dann wird nur dieses eine Feld gleich 1 gesetzt. in der nächsten Ebene wird zum auf das erste Feld folgenden Feld 1 addiert, wodurch sich der Wert 2 ergibt, aber danach hängt es bei mir. Die Logik sagt mir zwar, das diese Addition weiter fortgesetzt werden muss, aber ich kann das anhand des hier vorliegenden Quellcodes nicht nachvollziehen. Deshalb bitte ich um Pseudocode zur Klarstellung.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

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

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 20:06
Die Wiki sollte für Aufklärung sorgen:

http://de.wikipedia.org/wiki/Pascalsches_Dreieck

Edit. Achso, poste vllt. mal deinen Code von FPC. Dann kann man da vllt. auch helfen
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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 MrMooed
MrMooed

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

AW: Pascalsche Dreieck

  Alt 2. Jul 2013, 20:19
Hallo,

zunächst einmal möchten wir, dass unser Array wie ein Dreieck "geformt" ist - sprich, es gibt immer mehr Elemente, je höher die Ebene liegt. Dabei können wir gleich in das erste- bzw. letzte Element unsere '1' schreiben:
Delphi-Quellcode:
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;
Code:
Das pascalsche Dreieck ist eine Form der grafischen Darstellung der Binomialkoeffizienten, die auch eine einfache Berechnung dieser erlaubt. Sie sind im Dreieck derart angeordnet, dass jeder Eintrag die Summe der zwei darüberstehenden Einträge ist
Soll für uns heißen: durchlaufe alle leeren Felder und schreibe die Summe der beiden drüber liegenden Werte hinein:
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;
Anbei noch ein kleines Bildchen, allerdings sehe ich gerade, dass es Wikipedia deutlich besser visualisiert als ich es könnte
/Edit: Die Farben geben an, welche Werte zu welchen Ergebnissen führen. (Die beiden braunen ergeben z.B. die braune 2)
Angehängte Grafiken
Dateityp: png Unbenannt.png (15,8 KB, 11x aufgerufen)

Geändert von MrMooed ( 2. Jul 2013 um 20:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

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

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
 
#10

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
Antwort Antwort


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 03:50 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