![]() |
Pascalsche Dreieck
Also erstmal hallo!
Arbeitsauftrag ist folgender: Pascalsches Dreieck Eingabe in Edit: Anzahl der Zeilen, die berechnet werden sollen Ausgabe in einem Memo-Feld Ich weiß nicht wie ich da ran gehen soll... Ich hab schon viel gegoogelt aber nichts passendes gefunden. Wäre echt nett wenn ihr mir helfen könntet |
Re: Pascalsche Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
Hey, ich habe vor einger Zeit schon mal das Dreieck hier veröffentlicht, vllt kann es dir weiterhelfen,du kannst es ja weiterentwickeln, mit den Dingen die du benötigst!!
Hoof mal das kann dir weiter helfen :lol: |
Re: Pascalsche Dreieck
passt perfekt :) ich habs jetzt so wie ich es brauche.
funktioniert genau so wie es soll, jetzt muss ich es nurmehr verstehen, kommentieren und fertig. :mrgreen: |
AW: Pascalsche Dreieck
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. |
AW: Pascalsche Dreieck
Bist du dir sicher, dass die Ausgabe über eine TListBox erfolgen soll? :shock:
Vielleicht meinst du eine TListView? Wäre jedenfalls meiner Meinung nach deutlich sinnvoller |
AW: Pascalsche Dreieck
Also eine Listview?
Dann eine ListBox mit Courier-Zeichensatz und '*' und ' '. Noch hübscher ist natürlich eine Paintbox. |
AW: Pascalsche Dreieck
Ansonsten habe ich mir ein altes Schulprojekt herausgekramt:
Stell dir das Dreieck einfach als 2D-Array vor.
Code:
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.
Ebene: | Ergebnis:
0 | 1 1 | 1 1 2 | 1 2 1 3 | 1 3 3 1 4 | 1 4 6 4 1 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:
Wie man aus der Tabelle sehen kann, müssen wir erst ab der 3. Ebene anfangen zu rechnen - davor kommen nur unsere Einsen vor :wink:
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;
Delphi-Quellcode:
Und das Array kannst du nun in welcher Form auch immer du willst ausgeben.
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;
Delphi-Quellcode:
Wäre z.B. eine von vielen Möglichkeiten
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]); |
AW: Pascalsche Dreieck
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. |
AW: Pascalsche Dreieck
Die Wiki sollte für Aufklärung sorgen:
![]() Edit. Achso, poste vllt. mal deinen Code von FPC. Dann kann man da vllt. auch helfen ;) |
AW: Pascalsche Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Soll für uns heißen: durchlaufe alle leeren Felder und schreibe die Summe der beiden drüber liegenden Werte hinein:
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
Delphi-Quellcode:
Anbei noch ein kleines Bildchen, allerdings sehe ich gerade, dass es Wikipedia deutlich besser visualisiert als ich es könnte :lol:
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; /Edit: Die Farben geben an, welche Werte zu welchen Ergebnissen führen. (Die beiden braunen ergeben z.B. die braune 2) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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