AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fortran Goto

Ein Thema von cltom · begonnen am 14. Okt 2011 · letzter Beitrag vom 14. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#1

Fortran Goto

  Alt 14. Okt 2011, 11:08
Hej,

habe folgendes Fortran Schnipsel:

Delphi-Quellcode:
   10 DO 50 J=K,1,-1
         IF (R .EQ. 0) THEN

*snip*

            GOTO 10
         ENDIF
   50 CONTINUE
Kann mir jemand sage, wozu das Goto10 da steht? Nach Endif komme ich doch sowieso zum continue, oder übersehe ich da was?


danke und gruß
onsight
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Fortran Goto

  Alt 14. Okt 2011, 11:25
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.
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fortran Goto

  Alt 14. Okt 2011, 11:40
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:
   10 DO 50 J=K,1,-1
         IF (A .EQ. 0) THEN
*snip*
            ENDIF
            K = K-1
            GOTO 10
         ENDIF
   50 CONTINUE
Die Schleife wird ohnehin mit k-1 fortgesetzt, daher ist doch das goto überflüssig, oder?


Eine zweite Frage noch dazu: in Fortran ist es offenbar erlaubt, eine Schleifenvariable zwei mal zu verwenden, also:

Delphi-Quellcode:
do 100 i=1,n
  do 200 i=a,b
Welchen Wert hat i nach der Schleife von a bis b? wieder den Wert, den es davor hatte?

danke!

Geändert von cltom (14. Okt 2011 um 11:51 Uhr)
  Mit Zitat antworten Zitat
BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Fortran Goto

  Alt 14. Okt 2011, 11:58
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

Geändert von BoolString (14. Okt 2011 um 12:39 Uhr)
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fortran Goto

  Alt 14. Okt 2011, 12:07
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!
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: Fortran Goto

  Alt 14. Okt 2011, 12:19
Edit: nein, eigentlich macht es keinen Sinn:

Delphi-Quellcode:
   10 DO 50 J=K,1,-1
         IF (A .EQ. 0) THEN
*snip*
            ENDIF
            K = K-1
            GOTO 10
         ENDIF
   50 CONTINUE
Die Schleife wird ohnehin mit k-1 fortgesetzt, daher ist doch das goto überflüssig, oder?
Nein. Vereinfachtes Beispiel: Wir starten mit K=8 und für J=4 ist (immer) A=0. Dann haben wir folgende J-Werte
Code:
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
Dann ist die 50-er Schleife abgearbeitet.
  Mit Zitat antworten Zitat
BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Fortran Goto

  Alt 14. Okt 2011, 12:38
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
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#8

AW: Fortran Goto

  Alt 14. Okt 2011, 12:43
Hmm, das macht Sinn. Vielen Dank!

Um das zu übersetzen ohne goto muss man da wohl eine neue Schleife drum herum packen, oder?
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fortran Goto

  Alt 14. Okt 2011, 12:47
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
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fortran Goto

  Alt 14. Okt 2011, 13:05
hätte es jetzt mal so versucht:
Delphi-Quellcode:
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;
da sollte doch das gleiche rauskommen, oder? danke

Geändert von cltom (14. Okt 2011 um 13:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:12 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