Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Pascalsches Dreieck o0 (https://www.delphipraxis.net/175053-pascalsches-dreieck-o0.html)

AneLSD 27. Mai 2013 16:40

Pascalsches Dreieck o0
 
Hallo, könnt ihr mir helfen ein Pascalsches Dreieck zu schreiben? ;/

So weit bin ich bis jetzt gekommen aber mehr schaffe ich einfach nicht und eine Rekursive Lösung habe ich bis jetzt noch nicht gefunden ...

Code:
function pas(reihe,wert:byte):longint;
begin
  if (wert=0) or (wert=reihe)
      then pas:=1
      else pas:=pas(reihe-1,wert-1) + pas(reihe-1,wert)
end;

procedure TPascal.b_berechne_zeileClick(Sender: TObject);
var i: integer;
    exponent: byte;
    zeile: string;
begin
  zeile:='';
  exponent:=spe_exponent.value;
  for i:=0 to exponent do
  zeile:=zeile+inttostr(pas(exponent,i))+' ';
  e_ausgabe.Text:=zeile;
end;

procedure TPascal.b_endeClick(Sender: TObject);
begin
  close;
end;

procedure TPascal.b_koeffizientClick(Sender: TObject);
var exponent, koeffizient: integer;
begin
  exponent:=spe_exponent.Value;
  koeffizient:=spe_koeffizient.value;
  e_koeffizient.Text:=inttostr(pas(exponent,koeffizient-1))
end;
Soo, das Dreieck soll dann in einer Memo oder ähnlichem ausgegeben werden :)

Ich hoffe ihr könnt mir helfen :(

Mfg Arne

Der schöne Günther 27. Mai 2013 16:59

AW: Pascalsches Dreieck o0
 
Hallo - Du hast schon verstanden was 'rekursiv' ist, oder? Was du angibst ist rekursiv.

Meinst du zufällig eine 'iterative' Lösung?

AneLSD 27. Mai 2013 20:37

AW: Pascalsches Dreieck o0
 
Sorry Günther :) Aah :D

Also es ging mir eigentlich darum, wie ich das Ergebnis nun in einer Art Memo ausgeben kann, sodass es aussieht wie ein Pascalsches Dreieck - Das was ich bisher geschrieben hab zeigt leider imme rnur eine Zeile an :/

Der schöne Günther 27. Mai 2013 20:50

AW: Pascalsches Dreieck o0
 
Ich kann nur raten, wer oder was bsp.
Delphi-Quellcode:
e_koeffizient
oder
Delphi-Quellcode:
e_ausgabe
ist - Ein Edit-Feld, irgendetwas anderes?

Wie auch immer, schaue nochmal auf deine drei Zeilen
Delphi-Quellcode:
  for i:=0 to exponent do
   zeile:=zeile+inttostr(pas(exponent,i))+' ';
   e_ausgabe.Text:=zeile;
Wenn wir die "richtig" einrücken, sieht man es vielleicht etwas deutlicher:

Delphi-Quellcode:
for i:=0 to exponent do
   zeile:=zeile+inttostr(pas(exponent,i))+' ';

e_ausgabe.Text:=zeile;
Jetzt? Du schreibst 'exponent mal' in deine Variable
Delphi-Quellcode:
zeile
einen neuen Wert, erst danach stellst du in
Delphi-Quellcode:
e_ausgabe
dar, was am Schluss drinsteht.


Wenn du mehrere Zeilen in z.B. einer TMemo haben möchtest: Eine Zeile fügst du mit
Delphi-Quellcode:
meineMemo.Lines.Add('Dies ist eine Zeile');
hinzu.


Kommst du jetzt weiter?

AneLSD 27. Mai 2013 21:07

AW: Pascalsches Dreieck o0
 
Ich habe dir eine PM geschrieben :) Vielen Dank :)

Der schöne Günther 27. Mai 2013 21:22

AW: Pascalsches Dreieck o0
 
Wenn wir hier weitermachen:

Wir haben zwei Baustellen:
  1. Wir müssen der TMemo eine Zeile hinzufügen. Diese Zeile soll das sein, was wir vorher in das Edit-Feld geschrieben haben
  2. Wir wollen der Memo mehrere Zeilen hinzufügen

Zu 1)

Das
Delphi-Quellcode:
Add()
ist eine Prozedur die zum Zeilen-Objekt deiner Memo1-Objekt gehört. Das Zeilen-Objekt ("Lines") wiederum gehört zu deinem Memo1-Objekt. Du sagst also richtigerweise
Delphi-Quellcode:
Memo1.Lines.Add(...)
. Die Zuweisung dahinter brauchst du nicht, du sagst einfach nur "Ihr Zeilen, fügt das hier (der Parameter in den Klammern) hinzu!". In den Klammern gibt man (leider) nicht an, in welche Zeile man es packen will. Das Add() fügt immer eine neue Zeile ganz unten hinzu. Das muss uns erst einmal reichen.

Für die ...-Angabe brauchen wir jetzt allerdings eine Zeichenkette ("String"). Genau wie beim Edit-Feld auch schon: Dazu hast du ja die Variable
Delphi-Quellcode:
zeile
gemacht.


Alles klar soweit? Statt
Delphi-Quellcode:
e_ausgabe.Text:=zeile;
fügen wir jetzt ganz billig eine Zeile in die Memo hinzu:
Delphi-Quellcode:
Memo1.Lines.Add(zeile);
. Tolle Wurst.


Jetzt kommt noch Punkt 2, das ist eigentlich sogar einfacher. Die Frage vorher: Hast du verstanden, was eine for-Schleife so macht?

AneLSD 27. Mai 2013 21:31

AW: Pascalsches Dreieck o0
 
In meinem Fall erzeugt die for - to Schleife ja die Zahlen, die zwischen 0 und dem Exponent sind - Also wenn der Exponent 5 ist werden die Zahlen 1,2,3,4 und 5 erzeugt :)

Der schöne Günther 27. Mai 2013 21:46

AW: Pascalsches Dreieck o0
 
Wäre ich ein Lehrer, wäre ich über die Antwort wohl nicht ganz glücklich :wink:

Eine for-Schleife erzeugt nicht einfach Zahlen und geht dann nach Hause. Ich würde es so darstellen, dass man in einer for-Schleife einmal
  • eine Definition einer Zahlenreihe
  • und einen Block an Quellcode, indem jede(!) Zahl aus dieser Zahlenreihe zum Einsatz kommt
hat.

Deine Zahlenreihe geht von 0 bis einschließlich "exponent". Das hast du mit deinem
Delphi-Quellcode:
for i:=0 to exponent
abgedeckt.

Nur wo steckt der zweite Teil? Das ist das, was hinter deinem do kommt. Und zwar nicht alles was du heute noch schreibst, sondern nur die nächste Anweisung hinter dem do. Deshalb hatte ich das vorhin auch so eingerückt:

Delphi-Quellcode:
for i:=0 to exponent do
    zeile:=zeile+inttostr(pas(exponent,i))+' ';
 
e_ausgabe.Text:=zeile;
Die Zuweisung
Delphi-Quellcode:
zeile:=zeile+inttostr(pas(exponent,i))+' '
wird (exponent+1) mal ausgeführt. In jedem Aufruf ändert sich deine Variable i: Im ersten Aufruf ist sie 0, dann 1, ... und am Schluss ist sie gleich "exponent".

Jetzt wollen wir ja nicht nur in die Variable "zeile" das richtige reinschreiben, wir wollen auch jedes mal eine Zeile an die Memo anhängen - Wir müssen die For-Schleife nun irgendwie so hinbekommen, dass wir den Teil, der für jeden Eintrag unserer Zahlenreihe ausgeführt wird, auf unser
Delphi-Quellcode:
Memo1.Lines.Add(...)
ausweiten.

Das geschieht mit etwas, das du schonmal gesehen hast:
Delphi-Quellcode:
begin
und
Delphi-Quellcode:
end
. Wahrscheinlich werde ich später über den Haufen geknüppelt, aber drücken wir es vereinfacht einmal so aus: Alles was du zwischen ein
Delphi-Quellcode:
begin
und
Delphi-Quellcode:
end
packst, kommt Delphi wie eine einzelne Anweisung vor.


Baue dir einmal eine Prozedur (z.B. einem Button-Klick) eine for-Schleife die in etwa folgendermaßen aussieht:
Delphi-Quellcode:
for i:=0 to 10 do begin
   Memo1.Lines.Add('Mein Wert ist gerade '+IntToStr(i));
   Memo1.Lines.Add('Diese Zeile fühlt sich hier wohl');
end;
Memo1.Lines.Add('Diese Zeile kommt ganz zum Schluss... Und das nur ein mal.');
Kommst du damit weiter?

AneLSD 27. Mai 2013 21:59

AW: Pascalsches Dreieck o0
 
for i:=0 to 10 do begin // Warum denn 10? Es müsste doch Exponent sein oder?
Memo1.Lines.Add('Mein Wert ist gerade '+IntToStr(i)); // Der aktuelle Wert ? Der ist doch immer i + 1 also hier 1,2,3 - 11
Memo1.Lines.Add(' '); Die Zeile belibt dann ja leer
end;
Memo1.Lines.Add(' '); Die doch dann auch, aber dann passt das mit dem begin und end nicht...

:(

Der schöne Günther 27. Mai 2013 22:05

AW: Pascalsches Dreieck o0
 
Zitat:

Zitat von AneLSD (Beitrag 1216635)
Warum denn 10? Es müsste doch Exponent sein oder?

Es sollte nur ein Beispiel sein.

Dann: Ich hätte auch Smileys oder Gedichte in die Add()-Anweisungen schreiben können. Du kannst den Text natürlich auch gerne entfernen, dann hast du natürlich leere Zeilen. Wie man sieht, ist es wohl eine gute Sache, dass ich meine Brötchen nicht damit verdiene, Dinge zu erklären. Hast du es nicht einmal ausprobiert? Ich wollte mit diesem wundervollen Beispiel nur zeigen, wie eben das, was zwischen
Delphi-Quellcode:
begin
und
Delphi-Quellcode:
end
steht für jede Zahl in deiner Zahlenreihe wiederholt wird, die letzte Zeile allerdings nicht!

In deinem Memo-Feld würde somit nach dem Klick folgendes stehen:
Code:
Mein Wert ist gerade 1
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 2
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 3
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 4
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 5
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 6
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 7
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 8
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 9
Diese Zeile fühlt sich hier wohl
Mein Wert ist gerade 10
Diese Zeile fühlt sich hier wohl
Diese Zeile kommt ganz zum Schluss... Und das nur ein mal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Seite 1 von 2  1 2      

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