Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Sprungadresse in Variable

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 18.08.2008, 15:45    Titel: Sprungadresse in Variable Antworten mit Zitat

Hallo QBasic Gemeinde!

Habe ein problem, wenn ich in gosub ... retrurn Routine springen will.
Ich will die Srungadresse varaibel halten und schreibe:

gosub variable$

Für jede mögliche Variable habe ich einen Block: variable$ ...return.

In die Variable gebe ich den Doppelpunkt mit ein.

Mein Problem: Der Compiler meckert: "Erwarte Marke oder Zeilennummer"

Was kann ich da tun? Ich will auf jeden Fall innerhalb des Programms variabel springen!


Danke fürs zuhören. Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Manuel



Anmeldungsdatum: 23.10.2004
Beiträge: 1271
Wohnort: Bayern

BeitragVerfasst am: 18.08.2008, 15:55    Titel: Re: Sprungadresse in Variable Antworten mit Zitat

Nils hat Folgendes geschrieben:
Ich will auf jeden Fall innerhalb des Programms variabel springen!
Unter Q(uick)Basic... Kurze Antwort: Geht nicht, Punkt.

Viele Programmiersprachen erlauben einem nichtmal mehr sowas wie GOTOs und GOSUBs (geschweige denn Zeilennummern), einfach, weil dadurch die Übersichtlichkeit den Bach runter geht. V.a. bei größeren Projekten hätte man keine Chance mehr, intensiv genutzte Sprünge (und damit den Code) zurückzuverfolgen, sowas lässt sich idR. viel lesbarer und eleganter lösen. Wildes, variables Rumgehopse im Code ist schlicht schlechter Programmierstil, den man sich gar nicht erst angewöhnen soll zwinkern .

Vielleicht kann dir ein anderes Forenmitglied einen Weg drumherum aufzeigen, wie du das Problem umschiffen kannst... Aber sowas wie "GOSUB vari%" ist definitiv nicht möglich, in keiner mir bekannten Programmiersprache...
_________________
DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 18.08.2008, 16:53    Titel: Antworten mit Zitat

Geht natürlich nicht, weil die Sprungmarke genau definiert sein muß bzw. Vari% einen Wert haben muß, wenn ein Sprung ausgeführt wird.

Erklär mal genau, was Du willst, bzw. schick einen Codeschnipsel.

Im Übrigen muß ich Manuel Recht geben: Springen mit Gosub oder Goto allein macht das Prog schon unübersichtlich, wenn Du dann noch variable Sprungmarken einsetzen willst- wie willst du dann einen Fehler finden?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.


Zuletzt bearbeitet von Elektronix am 18.08.2008, 22:43, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 18.08.2008, 20:55    Titel: Antworten mit Zitat

Unter QBASIC gibt es zumindest ON variable GOTO, aber
mögliche Vorgehensweisen wären z. B. SUBs mit Variablenübergabe oder SELECT CASE.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 19.08.2008, 00:36    Titel: Antworten mit Zitat

du kannst Zeiger auf Funktionen in Variabllen speichern und
diese dann ausführen.
Ansonten hilft wohl nur ein if-block,so in etwa
wenn variable =xy then goto...
MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 19.08.2008, 07:56    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
Erklär mal genau, was Du willst, bzw. schick einen Codeschnipsel.

Genau dasselbe auch von mir: Zwischenstand von Deinem (@Nils) Projekt am besten auf einen Webspace hochladen, damit wir es anschauen können.

Wie vielfach bei derartigen Problemen dürfte ein falscher Denkansatz die Ursache sein. Artikel von mir an dieser Stelle:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html

Übrigens ist auch gutes Software-Design etwas nicht ganz Triviales! Aber dafür sind wir "alten Hasen" auch ein Stück weit dafür da... ;-)
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 19.08.2008, 13:40    Titel: Antworten mit Zitat

Danke mal für die vielen Antworten!

Code-Schnipsel geht zZ leider nicht, binh auf öffentliche maschine angewiesen.

Mein Programm soll verzweige, Und zwar nur um ein Datu7m innerhalb einer gosub...return Routine zu holen und damit weiter zu rechnen. ZZ mach ich das manuell, nehme nur das rem aus derjenigen der 7 gosub...return Routinen, die angesprungen werden soll.
Ich gebe der Einfachheit eine Datenzeile an und dort eine variable$, die den Namen der Gosub-Routine incl. Doppelpunkt enthält.
Das scheint eben tatsächlich nicht zu gehen. Was mir allerdings nicht so einleuchtet. Aber das mag eine Eigenhgeit von QBasic sein. Wird ja nicht weiterentwickelt.

An den Weg mit sub dachte ich schon. Aber ich habe damit keine Erfahrung und die onlinehiolfe ist auch schwach.


Allso bin ich derzeit ratlos- Einer oder mehrere von Euch vielleic<ht nicht"?


Grüße Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Manuel



Anmeldungsdatum: 23.10.2004
Beiträge: 1271
Wohnort: Bayern

BeitragVerfasst am: 19.08.2008, 14:25    Titel: Antworten mit Zitat

Nils hat Folgendes geschrieben:
An den Weg mit sub dachte ich schon. Aber ich habe damit keine Erfahrung und die onlinehiolfe ist auch schwach.
Das ist ganz einfach zu erklären: Es handelt sich dabei um eine Art "Unterprogramm", die du jederzeit von deinem Quelltext aus aufrufen kannst, in dem du den Namen der Funktion hinschreibst. Wenn du eine neue SUB erstellst, unterteilt QBasic diese in eine Art neuem Fenster... Du wechselst in QB zwischen den SUBs und dem Hauptteil des Quelltextes, in dem du F2 drückst.

Ein ganz einfaches Beispiel einer SUB:
Code:
DECLARE SUB funktionsname()
    PRINT "Das wird in der SUB ausgeführt."
END SUB

PRINT "Das wird im Hauptteil ausgeführt."
funktionsname
PRINT "Das wieder im Hauptteil."
Ausgabe:
Zitat:
Das wird im Hauptteil ausgeführt.
Das wird in der SUB ausgeführt.
Das wieder im Hauptteil.
Wichtig ist zu wissen, dass eine SUB seine eigenen Variablen verwaltet. Es kann ohne spezielle Vorkehrungen weder auf die Variablen im Hauptteil des Quelltextes zugreifen. Außerdem werden (ebenfalls ohne Vorkehrungen) alle Variablen gelöscht, sobald die SUB verlassen wird (mit einer Ausnahme, aber dazu später mehr). Folgendes Beispiel soll dies erläutern:
Code:
DECLARE SUB meineFunktion()
    PRINT "In dieser SUB hat 'vari' den Wert ";
    PRINT vari%
    vari% = 10
    PRINT "Jetzt hat 'vari' den Wert ";
    PRINT vari%
END SUB

vari% = 1
PRINT "Beim Start hat 'vari' den Wert ";
PRINT vari%
meineFunktion
PRINT "Ausserhalb der SUB hat 'vari' wieder den Wert ";
PRINT vari%
Ausgabe:
Zitat:
Beim Start hat 'vari' den Wert 1
In dieser SUB hat 'vari' den Wert 0
Jetzt hat 'vari' den Wert 10
Ausserhalb der SUB hat 'vari' wieder den Wert 1
Jetzt kann es natürlich mal nötig sein, dass man eine Variable vom Hauptteil auch in der SUB verwenden möchte. Das ist auch die eine Ausnahme, die ich vorhin ansprach: Mit GLOBAL lassen sich Variablen quasi global deklarieren und dadurch auch von SUBs verwenden lassen. Ich zeige jetzt einfach mal dasselbe Beispiel nochmal, allerdings mit einem zusätzlichen GLOBAL-Befehl:
Code:
DECLARE SUB meineFunktion()
    PRINT "In dieser SUB hat 'vari' den Wert ";
    PRINT vari%
    vari% = 10
    PRINT "Jetzt hat 'vari' den Wert ";
    PRINT vari%
END SUB

GLOBAL vari%

vari% = 1
PRINT "Beim Start hat 'vari' den Wert ";
PRINT vari%
meineFunktion
PRINT "Ausserhalb der SUB hat 'vari' wieder den Wert ";
PRINT vari%
Ausgabe:
Zitat:
Beim Start hat 'vari' den Wert 1
In dieser SUB hat 'vari' den Wert 1
Jetzt hat 'vari' den Wert 10
Ausserhalb der SUB hat 'vari' wieder den Wert 10
Alles klar? zwinkern

Der wahre Vorteil von Unterprogrammen ist aber der, dass du Variablen übergeben kannst!

...

Bedauerlicherweise kann ich dazu jetzt nichtmehr weiterschreiben, weil ich schnell für längere Zeit weg muss. Vielleicht erklärts dir ein anderer noch, sorry^^.
_________________
DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 19.08.2008, 20:50    Titel: Antworten mit Zitat

Für SUB und FUNCTION:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

@Nils: Am besten einmal von A bis Z durchgehen!

Manuel hat Folgendes geschrieben:
Bedauerlicherweise kann ich dazu jetzt nichtmehr weiterschreiben, weil ich schnell für längere Zeit weg muss. Vielleicht erklärts dir ein anderer noch, sorry^^.

Schreibaufwand kannst Du Dir sparen - obiger Artikel behandelt praktisch sämtliche Aspekte von A bis Z. :-)
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 20.08.2008, 14:34    Titel: F Antworten mit Zitat

Hallo zusammen!


Danke mal für die Antworten. Ich probier mal aus, was und wie ich das einbauen kann, bei mir.

An MANUEL: Wenn ide Variablen im SUB-Teil nach Ausführung gelöscht werden, wie kann ich dann dann eine Datum aus dem SUB-Teil ins Hauotprogramm übernehmen und dort damit weiterarbeiten?

Grüße Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 20.08.2008, 15:19    Titel: Antworten mit Zitat

Statt SUB verwendest Du FUNCTION. Die FUNCTION kann einen Wert zurückgeben, den Du natürlich vorher definieren mußt. Nähres dazu in dreaels Link.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz