Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

Problem mit berechneten GOSUB-Sprungzielen

Schlagworte:
  • 2013

Hallo Jörg!

Beim unten angeführten Code wird immer nur das Label "100" angesprungen, obwohl t = (100, 200, 300, 400) ist.

Es sieht so aus, als ob die Sprungzielberechnung nur einmal durchgeführt wird, und dieses Ergebnis bis zum Ende des Skripts weiterverwendet wird, gibt es eine Möglichkeit diese Verhalten zu ändern?

Wäre Schade wenn nicht, denn berechnete Sprungziele gehören zu den wenigen guten Eigenschaften von BASIC .

Gruß,
Manfred

FOR i = 1 TO 4 
   t = i * 100
   GOSUB t
NEXT i 
END 

100: 
TEXT2 0 , 1 , "i=1" 
PRINT i
RETURN 

200: 
TEXT2 0 , 2 , "i=2" 
RETURN 

300: 
TEXT2 0 , 3 , "i=3" 
RETURN 

400: 
TEXT2 0 , 4 , "i=4" 
RETURN 

Also bei mir kommen alle Meldungen

Grüße, Axel

in 200: bis 400: müsste doch auch PRINT i enthalten sein?

Grüße

vielleicht PRINT i nach GOSUB t einsetzen ?
spart Quelltext

Hallo!

Das Problem ist, dass 4x PRINT ausgeführt wird, es sollte aber nur 1x bei GOSUB 100 ausgeführt werden, d.h. alle GOSUB Sprünge landen in der Subroutine "100", die Routinen "200", "300" und "400" werden leider nicht angesprungen.

Gruß
Manfred

Hallo!

Es geht nicht um diesen speziellen Code, es geht um das Verständis für den Programmablauf im Interpreter.

Gruß
Manfred

if t=100 then GOSUB t (?)

Jetzt habe ich die Frage verstanden:
es wird immer nur die Sprungmarke 100: angewählt.
Die Sprungziele müssen eindeutig sein, eine Änderung während
des Programmablaufes ist wahrscheinlich nicht möglich.

Grüße, Axel

Hallo,

berechnete Sprungziele sollten eigentlich funktionieren.
Das tun sie auch, ...ausserhalb von Schleifen!

Manfred hatte mit seiner Vermutung Recht:
Die Sprungzielberechnung wird nur einmal durchgeführt, und dieses Ergebnis bis zum Ende des Skripts weiterverwendet.
Dieses "Label-Caching" ist für feste Sprungziele Korrekt, und erhöht die Performance!
Bei berechneten Sprungzielen muß das Caching jedoch ausgeschaltet sein.
(s. calculated_targets.png)

In einer der nächsten Versionen werden die berechneten Sprungziele auch in Schleifen funktionieren!

MfG

J.Lehmann

Anhänge (1)

Typ: image/png
401-mal heruntergeladen
Größe: 71,32 KiB

Hallo!

Der farbige Programmcode sieht gut aus.

In der Dokumentation zu MESH_C fehlt der Parameter mask: MESH_C n, m, mask, ...

Gruß
Manfred