AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Prozedur in Schleife oder Schleife in Prozedur
Thema durchsuchen
Ansicht
Themen-Optionen

Prozedur in Schleife oder Schleife in Prozedur

Ein Thema von faux · begonnen am 15. Mär 2006 · letzter Beitrag vom 17. Mär 2006
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozedur in Schleife oder Schleife in Prozedur

  Alt 15. Mär 2006, 23:36
Hallo!
Ich bin gerade dabei, eine eigene Programmiersprache á la Brainfuck zu schreiben. So weit so gut. Es funktioniert eigentlich alles wie gewollt, nur hätte ich da eine Frage:
Wie ist das mit Schleifen? Ich habe jetzt die Klasse TParse beim Ausführen einer Schleife Rekursiv angelegt. Also so:
Delphi-Quellcode:
LoopParser := TParse.Create(MiniPoint);
for i := 1 to FLoops[FLastLoop-1].Loops do
  Output := Output + LoopParser.Parse(FLoops[FLastLoop-1].Commands);
LoopParser.Free;
Danke mal, dass es da beim lesen gleich jemanden vom Stuhl schmeißt..
"Man kann doch nicht eine Prozedur in einer Schleife Aufrufen..."
Macht das Performancemäßig gesehen einen Unterschied, ob die Prozedurch x mal aufgerufen wird, oder in der Prozedur eine Schleife läuft, die den ganzen Code x mal wiederholt?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
holgerson

Registriert seit: 16. Mär 2006
Ort: Wallenhorst
3 Beiträge
 
#2

Re: Prozedur in Schleife oder Schleife in Prozedur

  Alt 16. Mär 2006, 22:09
Hallo faux,

ich nehme an, Dein Quelltext entspricht einem Teil der Methode Parse der Klasse TParse.
Mir hat man zu rekursiven Funktionen folgendes gelernt.

1. rekursive Funktionen köennen viel Speicher verbrauchen
D. h. jede lokal deklarierte Variable, die auf dem Stack abgelegt ist, belegt bis zum Beenden der Funktion Platz im Speicher.
2. rekursive Funktionen sind kürzer und lesbarer als nichtrekursive Entsprechungen.
3. Man kann jede rekursive Funktion nichtrekursiv auflösen.

Fazit:

Wenn die Rekursionstiefe ausreichend klein ist, kann man mit rekursiven Funktionen arbeiten.

Weil ich "ausreichend" nicht definieren kann, vermeide ich Rekusionen grundsätzlich. Für Deinen Fall habe ich zu wenig Einblick in das Problem, um eine eindeutige Antwort zu geben.
Man darf nicht das, was uns unwahrscheinlich und unnatürlich erscheint, mit dem verwechseln, was absolut unmöglich ist.

Carl Friedrich Gauß
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Prozedur in Schleife oder Schleife in Prozedur

  Alt 16. Mär 2006, 22:46
Zitat von holgerson:
ich nehme an, Dein Quelltext entspricht einem Teil der Methode Parse der Klasse TParse.
Indirekt. Es gibt eine Prozedur Parse, welche die einzelnen Befehle an die Funktion ParseStep übergibt. Die Funktion ParseStep speichert alles, was zwischen einem begin und einem end steht in einen String und lässt diesen String wieder rekursiv Parsen (da er ra wieder aus mehreren Befehlen besteht mit Parse).

Danke für Antwort!

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Prozedur in Schleife oder Schleife in Prozedur

  Alt 17. Mär 2006, 00:42
Hey.

Also so weit ich weiß ist es nicht sehr sinnvoll eine Procedure in einer Schleife einzubauen, da der Aufruf einer Procedure länger dauert.

Hier die Quelle: URL - Tipp 2. Musst aber mal alle anderen Tipps anschauen. Ist recht interessant!

mfg shark
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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 16:04 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