Seite 1 von 1

Turbo-Pascal Befehl zum zurückspringen im Prog?

BeitragVerfasst: Sa 18. Sep 2004, 23:43
von Daddy-Dennis
Gibts nen verd00mten befehl um , falls ne bedingung erfüllt ist, das prog zum programmanfang zurückkehren soll?

BeitragVerfasst: Sa 18. Sep 2004, 23:55
von blobbfish
Klar, da legst du ein Label an und springst via Goto-Anweisung dorthin. Ist aber recht unedel. Eine durchdachte Prozedur gibt da schon mehr her. Im Regelfall kombiniert man das mit einer Schleife oder macht es je nach Problem rekursiv

BeitragVerfasst: So 19. Sep 2004, 11:35
von Daddy-Dennis
aaaa...ha.

*nixpeil* :confused: :(


rekursivvv...muss ich nachschlagen....

und goto positioniert nur den cursor, und springt nicht im Programm selbst.

BeitragVerfasst: So 19. Sep 2004, 12:35
von blobbfish
Rekursiv wirst du in einem befehlsbuch nicht finden, da es eine Programmiertechnik ist, Man sollte sie mit bedacht benutzten, da sie dir sehr schnell den Speicher wegnimmt. Selbst ein Gigbyte RAM ist da sehr wenig ;)

Soweit mich mich erinnere hieß es GoTo, habe das allerdings nie benutzt, aus obigen Gründen. Guck in der Hilfe deiner entwicklungsumgebung mal unter "label" ansonsten, wozu brauchst du das? Ein mit Labels durchsetzter Text ist tödlich zu lesen/debuggen. geschicktes Schleifen- und Prozedurenspringen ist zum einen logischer und zum andren transparenter.

BeitragVerfasst: So 19. Sep 2004, 16:36
von Daddy-Dennis
in nem befehlsbuch wollt ich ja auch net guggn! so blöd bin ich auch nicht.

Nur ne kleine Erklärung nachschlagen.Mit Beispielen.

BeitragVerfasst: Sa 2. Okt 2004, 12:21
von nazgul
@fish: QuickSort ist ein rekursiver Algorithmus... und er läuft auch bei großen Datenmengen auf rechnern mit nur wenig ram... quicksort ist eg der Standart-LIBC sorter...

<funzt>
label foobar

foocode(foovar);

if foovar = 0 then begin
goto foobar
end
</funzt>

<elegant>
do
foocode(foovar)
while not foovar=0
</elegant>

BeitragVerfasst: Sa 2. Okt 2004, 12:29
von blobbfish
Was nichts daran ändert, dass die Datenmenge im Gegensatz zu einer iterativen Lösung deutlich größer ist. Wobei ich sagen muss, dass dein Beipsiel nicht wirklich rekursiv ist, denn label und goto haben mehr Ähnlichkeit mit Schleiifen als mit einem vollständigen Selbstaufruf.

BeitragVerfasst: Sa 2. Okt 2004, 16:21
von nazgul
<rekursiv>
procedure fooproc
begin

foocode(foovar);
if foovar = 0 then fooproc
end;
</rekursiv>

die sinnigkeit davon steht halt etwas zur frage.....
bei großen schleifen sollte das sich nicht allzuviel tun...

das müsste man mal Benchmarken.

BeitragVerfasst: Sa 2. Okt 2004, 16:38
von Daddy-Dennis
mAN KANNs auch übertreiben...

BeitragVerfasst: Mi 27. Okt 2004, 23:39
von nazgul
asm
jmp 0100h
end;

sollte es glaubich auch tun.... hab leider kein dos oder kompat um das zu testetn... viel mir nur grad so ein... ansonsten 0100h durch die anfangsaddresse des programms ersetzen...