![]() |
Fortran Goto
Hej,
habe folgendes Fortran Schnipsel:
Delphi-Quellcode:
Kann mir jemand sage, wozu das Goto10 da steht? Nach Endif komme ich doch sowieso zum continue, oder übersehe ich da was?
10 DO 50 J=K,1,-1
IF (R .EQ. 0) THEN *snip* GOTO 10 ENDIF 50 CONTINUE danke und gruß onsight |
AW: Fortran Goto
GOTO 10 startet die Schleife neu, CONTINUE würde sie ja nur fortsetzen.
Ob das sinnvoll ist oder ein Bug, kann man mit dem Gezeigten nicht beantworten. |
AW: Fortran Goto
ah, ok, das hast wohl recht. und ich fürchte, dass es auch Sinn macht, weil in dem ausgeschnippelten Teil die Variablen für die Schleife verändert werden (k wird verringert).
Edit: nein, eigentlich macht es keinen Sinn:
Delphi-Quellcode:
Die Schleife wird ohnehin mit k-1 fortgesetzt, daher ist doch das goto überflüssig, oder?
10 DO 50 J=K,1,-1
IF (A .EQ. 0) THEN *snip* ENDIF K = K-1 GOTO 10 ENDIF 50 CONTINUE Eine zweite Frage noch dazu: in Fortran ist es offenbar erlaubt, eine Schleifenvariable zwei mal zu verwenden, also:
Delphi-Quellcode:
Welchen Wert hat i nach der Schleife von a bis b? wieder den Wert, den es davor hatte?
do 100 i=1,n
do 200 i=a,b danke! |
AW: Fortran Goto
Eigentlich sollte so etwas nicht gehen/gemacht werden. Die Frage wäre ob evtl. noch etwas zwischen den beiden Do-Deklarationen steht.
So wären Konstrukte denkbar, mit denen man z.B. durch Verzeigung und dem 'Cycle' Argument die obere Schleife mehrfach durchlaufen läßt, bis eine Bedingung erreicht wird, und in der zweiten Schleife sichergestellt wird, daß hier nicht mehr drauf zurückgegriffen wird. Aber schön ist das nicht. Nur zum Interesse: Die Variablen liegen im Bereich 'a'..'n'. Entsprechend der alten Definition implizit eine Integer-Variable? Aus welchem Jahr/Compilergeneration kommt der Code? Jan |
AW: Fortran Goto
der Code ist alt, aus 1993, Fortran77
Sorry! Die Schleifenvariable ist nicht doppelt, das war mein Fehler. Die Wird nur zwei mal hintereinander genutzt ... das ist ein kreuz mit diesen Zeilennummern, wenn man da nicht aufpasst ... Die Frage mit dem Goto bleibt aber, danke! |
AW: Fortran Goto
Zitat:
Code:
Dann ist die 50-er Schleife abgearbeitet.
J=8,7,6,5,4 K=7
J=7,6,5,4 K=6 J=6,5,4 K=5 J=5,4 K=4 J=4 K=3 J=3,2,1 |
AW: Fortran Goto
Manchmal sieht man mehr, wenn man den Code vorliegen hat. Falls es dir möglich/erlaubt ist, kannst du ja vielleicht den Abschnitt mal zeigen...
Jan |
AW: Fortran Goto
Hmm, das macht Sinn. Vielen Dank!
Um das zu übersetzen ohne goto muss man da wohl eine neue Schleife drum herum packen, oder? |
AW: Fortran Goto
klar, hier mal der ganze teil, ist ja nicht so viel:
Code:
10 DO 50 J=K,1,-1
R = ZERO DO 20 I=1,K 20 IF (I .NE. J) R = R+ABS(MAT(J,I)) IF (R .EQ. ZERO) THEN SCAL(K) = J IF (J .NE. K) THEN DO 30 I=1,K 30 CALL SWAP(MAT(I,J),MAT(I,K)) DO 40 I=L,N 40 CALL SWAP(MAT(J,I),MAT(K,I)) ENDIF K = K-1 GOTO 10 ENDIF 50 CONTINUE |
AW: Fortran Goto
hätte es jetzt mal so versucht:
Delphi-Quellcode:
da sollte doch das gleiche rauskommen, oder? danke
while cont do
begin for j := k downto 1 do begin if r=0 then begin *snip* k:=k-1; cont := true; //kann man wohl auch weglassen end else cont := false; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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