![]() |
Pascal'sche Dreieck wie würdet ihr da ran gehen?
Hi,
Ich will ein Paskal'sche Dreieck berechen, an sich ja eigentlich recht einfach, die ersten beiden Zahlen addiert ergibt die untere und so weiter. In welcher form würdet ihr das Anzeigen? in einem Memo etc? Und mit welchen Variablen wäre das am geschicktesten zu lösen? MfG Spiderpig |
Re: Pascal'sche Dreieck wie würdet ihr da ran gehen?
Ich hab sowas mal gemacht. Hab einfach pro Zeile ein Array of integer genommen. Die Positionen der Zahlen obendrüber und untendrunter waren recht einfach auszurechnen (bei sowas hilft immer ein Blatt Papier).
Ich hab grad mal mein [!Test]-verzeichnis durchforstet und das Projekt tatsächlich gefunden (scheint ja besser sortiert zu sein als ich dachte :mrgreen:). Dass ich den Code geschrieben habe ist schon etwas her, weshalb es sein kann, dass ich es heute eleganter lösen könnte/würde, aber funktionieren tut es jedenfalls (bis darauf dass die oberste 1 nicht gezeichnet wird).
Delphi-Quellcode:
type tintegerarray = array of integer; var numbers: tintegerarray; const breite = 24; procedure TForm1.Button1Click(Sender: TObject); var level,i,tmpx,tmpx2: integer; lastnumbers: tintegerarray; function getv1(pos: integer): integer; begin if pos-1 < 0 then begin result := 1; exit; end; result := lastnumbers[pos-1]; end; function getv2(pos: integer): integer; begin if pos > high(lastnumbers) then begin result := 1; exit; end; result := lastnumbers[pos]; end; begin for level := 0 to 5 do begin lastnumbers := numbers; setlength(numbers,level+1); for i := 0 to level do begin numbers[i] := getv1(i)+getv2(i); end; tmpx := clientwidth div 2-((level+1) div 2)*breite; if odd(level+1) then //ungerade tmpx := tmpx-breite div 2; // 1 nr 1 tmpx2 := tmpx-1*breite; tmpx2 := tmpx2-canvas.TextWidth('1') div 2; canvas.TextOut(tmpx2,10+level*breite,'1'); // 1 nr 2 tmpx2 := tmpx+(level+1)*breite; tmpx2 := tmpx2-canvas.TextWidth('1') div 2; canvas.TextOut(tmpx2,10+level*breite,'1'); for i := 0 to level do begin tmpx2 := tmpx+i*breite; tmpx2 := tmpx2-canvas.TextWidth(inttostr(numbers[i]))*3 div 4; canvas.TextOut(tmpx2,10+level*breite,inttostr(numbers[i])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin setlength(numbers,1); numbers[0] := 1; end; |
Re: Pascal'sche Dreieck wie würdet ihr da ran gehen?
ich hab früher auch mal ein pascalsches dreieck geproggt vll ist das besser verständlich:
Delphi-Quellcode:
Die Formel n_uber_k wurde uns vom Lehrer mitgeteilt, so berechnet man das Pascalsche Dreieck
function fakult(x:real):real;
var i:integer; begin i:=1; result:=1; for i:=1 to round(x) do result:=result*i; end; function n_uber_k(n,k:real):real; begin if n = 0 then result:= 1 else result:=fakult(n)/(fakult(k)*fakult(n-k)); end; procedure TForm1.Button1Click(Sender: TObject); var n,k,x,y:integer; begin y:=10; // x,y sind nur die koordinaten für das textout n:=0; k:=0; repeat k:=0; x:=(form1.Width div 2)-(n*25); // dreieck simulieren, wert > 25 = breiteres dreieck ... repeat form1.canvas.TextOut(x,y,floattostr(n_uber_k(n,k))); x:=x+50; // 50 = abstand zwischen den "spalten" k:=k+1; until k=n+1; y:=y+35; // 35 = abstand zwischen den zeilen n:=n+1; until n = 26; // 26 = endwert end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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