Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 26.03.2008, 13:04 Titel: GOTO <zahl%> |
|
|
Hallo!
Ich wollte...
...machen, aber das geht ja nicht.
Wie kann ich es dann machen? _________________ MfG
Seb |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 26.03.2008, 13:54 Titel: |
|
|
Danke, funktioniert jetzt! _________________ MfG
Seb |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 26.03.2008, 15:00 Titel: |
|
|
Nur nochmal der Vollständigkeit halber.
Es gibt den Befehl ON..GOTO, der sowas ähnliches wie ein goto zahl% bewirkt.
Aber ich rate auch davon ab. _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 27.03.2008, 10:14 Titel: |
|
|
Ich musste es doch noch anders machen, sonst funktioniert etwas anderes im Programm nicht.
Es kommen beim umwandeln in eine .EXE-Datei immer Fehler:
Einmal hier:
Code: | 2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT " Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Addition " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Subtraktion " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Multiplikation " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Division " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Statistik " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Benutzer wechseln " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Update " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Hilfe " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Einstellungen " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + " Beenden " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
IF AUSWAHL2% = 1 THEN
sc% = 0
go% = 3
GOTO 11
END IF
IF AUSWAHL2% = 2 THEN
sc% = 0
go% = 4
GOTO 11
END IF
IF AUSWAHL2% = 3 THEN
sc% = 0
go% = 5
GOTO 11
END IF
IF AUSWAHL2% = 4 THEN
sc% = 0
go% = 6
GOTO 11
END IF
IF AUSWAHL2% = 5 THEN
sc% = 0
go% = 7
GOTO 11
END IF
IF AUSWAHL2% = 6 THEN
sc% = 0
go% = 1
GOTO 11
END IF
IF AUSWAHL2% = 7 THEN
sc% = 0
go% = 8
GOTO 11
END IF
IF AUSWAHL2% = 8 THEN
sc% = 0
go% = 9
GOTO 11
END IF
IF AUSWAHL2% = 9 THEN
sc% = 0
go% = 10
GOTO 11
END IF
IF AUSWAHL2% = 10 THEN
sc% = 0
go% = 12
GOTO 11
END IF |
Und einmal hier:
Code: | 11 :
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
IF sc% <> 30 THEN
GOTO 11
ELSE
IF go% = 1 THEN
GOTO 1
END IF
IF go% = 3 THEN
GOTO 3
END IF
IF go% = 4 THEN
GOTO 4
END IF
IF go% = 5 THEN
GOTO 5
END IF
IF go% = 6 THEN
GOTO 6
END IF
IF go% = 7 THEN
GOTO 7
END IF
IF go% = 8 THEN
GOTO 8
END IF
IF go% = 9 THEN
GOTO 9
END IF
IF go% = 10 THEN
GOTO 10
END IF
IF go% = 12 THEN
GOTO 12
END IF
END IF |
Wie kann ich die Fehler beheben?
Die Fehlermeldung ist immer irgentetwas mit IF/GO%/END IF OHNE BLOG IF?!?!?! _________________ MfG
Seb |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 27.03.2008, 10:46 Titel: |
|
|
Kleiner Exkurs zu strukturierter Programmierung...
1. Denk Dir für die Sprunglabels sinnvolle Bezeichnungen aus. Mit "11:" kann keiner was anfangen, und wenn Du mal größeren Code hast, kommst Du selbst durcheinander.
2. Laß halt mal den Schwachsinn mit den Gotos. Im ersten Code-Tag hast Du 9 mal
stehen, und schreibst dann dann den Befehl an 11: ins Hauptprogramm. Hättest Du stattdessen eine Sub geschrieben, die Du statt "goto 11" aufrufst, wäre das viel sinnvoller.
3. Außerdem muß man das nicht in jedem if-Zweig aufrufen. Dort stehen nur die Anweisungen, die tatsächlich von der If-Bedingung abhängen. Danach kannst Du die Sub "goto 11" hinter das EndIf setzen und hast es dann nur einmal im Text. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 27.03.2008, 13:42 Titel: |
|
|
@Elektronix:
@1:
Ok, werde ich machen
@2/3:
So?:
Code: | 2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT " Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Addition " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Subtraktion " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Multiplikation " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Division " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Statistik " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Benutzer wechseln " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Update " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Hilfe " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Einstellungen " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + " Beenden " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
IF AUSWAHL2% = 1 THEN go% = 3
IF AUSWAHL2% = 2 THEN go% = 4
IF AUSWAHL2% = 3 THEN go% = 5
IF AUSWAHL2% = 4 THEN go% = 6
IF AUSWAHL2% = 5 THEN go% = 7
IF AUSWAHL2% = 6 THEN go% = 1
IF AUSWAHL2% = 7 THEN go% = 8
IF AUSWAHL2% = 8 THEN go% = 9
IF AUSWAHL2% = 9 THEN go% = 10
IF AUSWAHL2% = 10 THEN go% = 12
sc% = 0
GOTO 11 |
Code: | 11 :
PRINT
sc% = sc% + 1
startzeit! = TIMER
WHILE startzeit! + .1 > TIMER: WEND
IF sc% <> 30 THEN
GOTO 11
ELSE
IF go% = 1 THEN GOTO 1
IF go% = 3 THEN GOTO 3
IF go% = 4 THEN GOTO 4
IF go% = 5 THEN GOTO 5
IF go% = 6 THEN GOTO 6
IF go% = 7 THEN GOTO 7
IF go% = 8 THEN GOTO 8
IF go% = 9 THEN GOTO 9
IF go% = 10 THEN GOTO 10
IF go% = 12 THEN GOTO 12
END IF |
@dreael:
Werde es dann mal versuchen, wenn das mit dem GOTO geht  _________________ MfG
Seb |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 27.03.2008, 13:54 Titel: |
|
|
Hallo
Interessant wäre, was dort passiert, wo diese ganzen GOTOs hinspringen. Wenn dort immer ähnliche Aktionen ausgeführt werden, kann man da sicher einiges zusammenfassen und vereinfachen. Dann müsstest du erst gar nicht so oft verzweigen.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 27.03.2008, 14:05 Titel: |
|
|
Die GOTOs gehen dort hin:
1: Benutzerverwaltung
2: Hauptmenü
3: +
4: -
5: *
6: /
7: Statistik
8: Update(Einfach ne Datumüberprüfung)
9: Hilfe
10: Einstellungen
11: Das Hauptmenü soll sich nach oben schieben
12: Beenden
Ähnlich Aktionen wären +-* und /.
Ich werde dann mal versuchen, dass man die 4 zusammenfasst... _________________ MfG
Seb |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 27.03.2008, 14:07 Titel: |
|
|
Hier noch ein Verbesserungsvorschlag: Statt
Code: | IF AUSWAHL2% = 1 THEN go% = 3
IF AUSWAHL2% = 2 THEN go% = 4
IF AUSWAHL2% = 3 THEN go% = 5
IF AUSWAHL2% = 4 THEN go% = 6
IF AUSWAHL2% = 5 THEN go% = 7
|
schreibt man Code: |
If Auswahl% >=1 AND Auswahl% <=5 then
go% = Auswahl% +2
|
_________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 27.03.2008, 14:45 Titel: |
|
|
Es geht leider immer noch nicht.
Das Problem sind die GOTOs und die go%s...
Was kann man noch machen, dass es geht?
###Beitrag 100 _________________ MfG
Seb |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 27.03.2008, 15:07 Titel: |
|
|
"geht immer noch nicht" ist eine sehr schwammige Fehlerbeschreibung. WAS genau geht nicht?
Wie schon gesagt: Statt der vielen Gotos schreibt man Sub()s, die die Aufgaben übernehmen. Bei Deiner Anwendung wäre das sogar passender. Die Variablen können dabei ByRef übergeben werden, damit sie im Hauptprogramm entsprechend angepaßt bleiben. (Ah, Moment, ich glaube, das ist in QBasic sogar standard.) _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.03.2008, 15:34 Titel: |
|
|
Ja, ByRef is standard. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 28.03.2008, 17:30 Titel: |
|
|
Elektronix hat Folgendes geschrieben: | "geht immer noch nicht" ist eine sehr schwammige Fehlerbeschreibung. WAS genau geht nicht? |
Ich habe einmal einen Screenshot gemacht:
Ich versuchs später einmal mit SUBs...
€dit:
Ähhhh, mit den SUBs weiß ich nicht genau, wie ich das programmieren kann?!?!?! _________________ MfG
Seb |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 29.03.2008, 22:52 Titel: |
|
|
Code: | DECLARE SUB go(go%) |
Code: | 2 :
AUSWAHL2% = 1
DO
CLS
COLOR 15
PRINT
PRINT " Hallo " + Username$ + " !!!"
PRINT
COLOR 2
PRINT STRING$(32, 219)
IF AUSWAHL2% = 1 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Addition " + CHR$(219)
IF AUSWAHL2% = 2 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Subtraktion " + CHR$(219)
IF AUSWAHL2% = 3 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Multiplikation " + CHR$(219)
IF AUSWAHL2% = 4 THEN COLOR 15 ELSE COLOR 2
PRINT CHR$(219) + " Division " + CHR$(219)
COLOR 2
PRINT STRING$(32, 219)
PRINT
COLOR 4
PRINT STRING$(32, 219)
IF AUSWAHL2% = 5 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Statistik " + CHR$(219)
IF AUSWAHL2% = 6 THEN COLOR 15 ELSE COLOR 4
PRINT CHR$(219) + " Benutzer wechseln " + CHR$(219)
COLOR 4
PRINT STRING$(32, 219)
PRINT
COLOR 3
PRINT STRING$(32, 219)
IF AUSWAHL2% = 7 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Update " + CHR$(219)
IF AUSWAHL2% = 8 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Hilfe " + CHR$(219)
IF AUSWAHL2% = 9 THEN COLOR 15 ELSE COLOR 3
PRINT CHR$(219) + " Einstellungen " + CHR$(219)
COLOR 3
PRINT STRING$(32, 219)
PRINT
COLOR 8
PRINT STRING$(32, 219)
IF AUSWAHL2% = 10 THEN COLOR 15 ELSE COLOR 8
PRINT CHR$(219) + " Beenden " + CHR$(219)
COLOR 8
PRINT STRING$(32, 219)
SLEEP
taste$ = INKEY$
IF taste$ = CHR$(0) + "H" THEN AUSWAHL2% = AUSWAHL2% - 1
IF taste$ = CHR$(0) + "P" THEN AUSWAHL2% = AUSWAHL2% + 1
IF AUSWAHL2% < 1 THEN AUSWAHL2% = 1
IF AUSWAHL2% > 9 THEN AUSWAHL2% = 10
IF taste$ = CHR$(13) THEN EXIT DO
IF taste$ = CHR$(27) THEN END
LOOP
go |
Code: | SUB go
go% = AUSWAHL2% #####wie soll ich das dann hier machen???
sc% = 0
GOTO 11
END SUB |
So ungefähr? _________________ MfG
Seb |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.03.2008, 15:07 Titel: |
|
|
Mit GOTO aus einer SUB heraus zu springen kann u. U. fatal werden (und wird mit etwas Glück auch gar nicht funktionieren). Besser so:
Code: |
DECLARE SUB go(eingabe$)
DO
CLS
COLOR 15
PRINT
PRINT " Hallo " + Username$ + " !!!"
PRINT
'usw. - alles was zum angezeigten Menü dazugehört
taste$ = INPUT$(1)
IF taste$ = chr$(27) then exit do
go(taste$)
LOOP
END
SUB go(eingabe$)
IF eingabe$ = "1" THEN
' tue das, was beim Drücken der Taste "1" gemacht werden soll
ELSEIF eingabe$ = "2" THEN
' tue das, was beim Drücken der Taste "2" gemacht werden soll
' usw. usf.
END IF
END SUB
|
Noch wesentlich besser ist folgendes:
Code: |
DECLARE SUB go1
DECLARE SUB go2
DO
CLS
COLOR 15
PRINT
PRINT " Hallo " + Username$ + " !!!"
PRINT
'usw. - alles was zum angezeigten Menü dazugehört
taste$ = INPUT$(1)
IF taste$ = "1" THEN
go1
ELSEIF taste$ = "2" THEN
go2
' usw. usf.
END IF
LOOP UNTIL taste$ = CHR$(27)
END
SUB go1
' tue das, was beim Drücken der Taste "1" gemacht werden soll
END SUB
SUB go2
' tue das, was beim Drücken der Taste "2" gemacht werden soll
END SUB
|
(natürlich nimmst du statt go1 und go2 lieber sprechende Namen)
Beide Varianten benötigen überhaupt kein GOTO mehr.
Noch besser wäre statt des IF ... ELSEIF ... END IF vermutlich ein SELECT CASE _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 30.03.2008, 19:23 Titel: Programmgerüst zusammengestellt |
|
|
Inzwischen ist das Menübeispiel fertig:
http://beilagen.dreael.ch/QB/MENUE.BAS
@Seb: Probiere es ruhig einmal von A bis Z aus. Selbstverständlich kannst Du es als Grundgerüst für Deine Anwendung einsetzen.
Ansonsten Bemerkungen dazu:
Kern ist eine SUB-Routine names Menue(), welcher man als Parameter den Titel wie "Hauptauswahl", die einzelnen Menüpunkte, Balkenposition (ist eine In+Out-Variable, d.h. gibt zu Beginn die Vorgabe-Balkenposition an und retourniert am Schluss die effektiv gewählte Position) und Balkenwert bei <Esc> übergibt. Bei den einzelnen Menüpunkten habe ich lieber auf einen String zurückgegriffen, welchem man sämtliche auswählbaren Punkte mit "|" separiert übergibt. Ferner kann ein hervorgehobener Buchstabe optional mit "_" definiert werden.
Der Hauptprogrammteil soll gleichzeitig zeigen, dass es vollkommen ohne GOTO geht - ist wieder einmal ein typischer Fall für SELECT CASE.
Als zweite Benutzeroberflächen-SUB kommt noch Nachricht() zum Einsatz, um ganz einfache MsgBox()-en wie in Windows darstellen zu können (Text + Hintergrundfarbe - letzteres dem vbInformation, vbCritical usw. d.h. Typ, ob Information oder Warnung entsprechend).
Die Dummy()-SUB ist, wie der Name sagt, nur ein reiner Platzhalter, d.h. überall dort könntest Du Deine geplanten Übungsroutinen hineinprogrammieren. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 31.03.2008, 16:52 Titel: |
|
|
Vielen Dank!!!
Wollte gerade mein ganzes Programm mit SUBs schreiben, aber wieder eine Meldung:
 _________________ MfG
Seb |
|
Nach oben |
|
 |
|