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
cltom

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

AW: Fortran Goto

  Alt 14. Okt 2011, 10: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 10:51 Uhr)
  Mit Zitat antworten Zitat
gammatester

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

AW: Fortran Goto

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

AW: Fortran Goto

  Alt 14. Okt 2011, 11: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
230 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fortran Goto

  Alt 14. Okt 2011, 11: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
230 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fortran Goto

  Alt 14. Okt 2011, 11: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
230 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fortran Goto

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

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

AW: Fortran Goto

  Alt 14. Okt 2011, 12:13
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
Ich denke schon. Willst Du den Fortrancode nach Pascal übersetzen? Goto ist ja nicht grundsätzlich böse. Aber auch so kannst Du das ganze im Prinzip in eine Schleife packen:
Delphi-Quellcode:
  j := k;
  while j>=1 do begin
    {berechne r}
    if r=0 then begin
      k := k-1;
      j := k;
      continue;
    end;
    j := j-1;
  end;

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

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

AW: Fortran Goto

  Alt 14. Okt 2011, 12:42
Ja, das ist ein relativ altes Fortran-Projekt, das ich portieren werde.

Ich würde gerne diese gotos vermeiden, vor allem weil ich sie (augenscheinlich) nicht verstehe bzw. Fehler damit befürchte.

Danke aber für Deinen Vorschlag, das wär natürlich deutlich kompakter. Hier bin ich aber noch am Abwägen, was besser ist: die Struktur des alten Programms weitgehend belassen, sodass der Vergleich beim Fehlersuchen leichter fällt. Oder möglichst alles modernisieren, damit es später bequemer wird.

Zur Zeit hätt ich das Ding gern nur mal funktionierend übersetzt, weite Teile sind auch gut gemacht, sodass man nicht alles neu erfinden müsste (mal abgesehen davon, dass nix objektorientiert ist und es mit den globalen Variablendeklarationen natürlich ein Jubiläum gibt).
  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 08:52 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