AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Pascal'sche Dreieck wie würdet ihr da ran gehen?
Thema durchsuchen
Ansicht
Themen-Optionen

Pascal'sche Dreieck wie würdet ihr da ran gehen?

Ein Thema von Spiderpig_GER_15 · begonnen am 21. Jul 2008 · letzter Beitrag vom 22. Jul 2008
Antwort Antwort
Benutzerbild von Spiderpig_GER_15
Spiderpig_GER_15

Registriert seit: 17. Mär 2008
298 Beiträge
 
Delphi 7 Personal
 
#1

Pascal'sche Dreieck wie würdet ihr da ran gehen?

  Alt 21. Jul 2008, 21:27
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
---Zufall ist das Inkognito Gottes---
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Pascal'sche Dreieck wie würdet ihr da ran gehen?

  Alt 21. Jul 2008, 22:16
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 ). 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;
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 2. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Pascal'sche Dreieck wie würdet ihr da ran gehen?

  Alt 22. Jul 2008, 10:21
ich hab früher auch mal ein pascalsches dreieck geproggt vll ist das besser verständlich:

Delphi-Quellcode:
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;
Die Formel n_uber_k wurde uns vom Lehrer mitgeteilt, so berechnet man das Pascalsche Dreieck
  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 22:46 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