Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 18.08.2008, 15:45 Titel: Sprungadresse in Variable |
|
|
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 |
|
 |
Manuel

Anmeldungsdatum: 23.10.2004 Beiträge: 1271 Wohnort: Bayern
|
Verfasst am: 18.08.2008, 15:55 Titel: Re: Sprungadresse in Variable |
|
|
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 .
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 18.08.2008, 16:53 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.08.2008, 20:55 Titel: |
|
|
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 19.08.2008, 00:36 Titel: |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.08.2008, 07:56 Titel: |
|
|
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 |
|
 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 19.08.2008, 13:40 Titel: |
|
|
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 |
|
 |
Manuel

Anmeldungsdatum: 23.10.2004 Beiträge: 1271 Wohnort: Bayern
|
Verfasst am: 19.08.2008, 14:25 Titel: |
|
|
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?
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.08.2008, 20:50 Titel: |
|
|
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 |
|
 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 20.08.2008, 14:34 Titel: F |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 20.08.2008, 15:19 Titel: |
|
|
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 |
|
 |
|