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:

Kleines Problem mit READ - DATA

 
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
Benny90



Anmeldungsdatum: 01.04.2008
Beiträge: 19

BeitragVerfasst am: 24.01.2013, 19:05    Titel: Kleines Problem mit READ - DATA Antworten mit Zitat

Hallo,

Ich möchte über den LPT-Port eine 7-Segmentanzeige ansteuern , ich habe dafür ein kleines Programm geschrieben mit dem man die Anzeige entweder von 0 bis 9 oder von 9 bis 0 zählen lassen kann.
Es ist aber noch nicht ganz fertig , nicht dass jemand denkt warum da bei den Locate Befehlen alles kreuz und quer auf dem Bildschirm verteilt ist.

Hier mal das Programm:


Code:
10 CLS
20 SCREEN 8
30 COLOR 14, 1
50 LOCATE 5, 35
60 PRINT "Z„hler"
70 LOCATE 6, 33
80 PRINT "* * * * *"
90 LOCATE 9, 19
100 PRINT "Soll der Z„hler vor oder zurck laufen ?"
110 LOCATE 11, 19
120 INPUT "Geben Sie eine 1 fr >auf< und eine 2 fr >ab< ein !", a
130 IF a = 0 THEN END
140 IF a = 1 THEN GOTO 170
150 IF a = 2 THEN GOTO 240
160 IF a > 2 THEN LOCATE 14, 19: COLOR 4: PRINT "Falsche Eingabe !": SLEEP 3: GOTO 10
' Aufw„rts z„hlen
170 READ c, b
180 IF c = -1 THEN RESTORE: END
190 OUT 888, b
200 LOCATE 17, 19
210 PRINT c
211 FOR t = 0 TO 125000: NEXT t
212 GOTO 170
220 DATA 0, 127, 1, 112, 2, 231, 3, 245, 4, 248, 5, 189, 6, 191, 7, 113, 8, 255, 9, 253, -1, -1
' Abw„rts z„hlen
240 READ d, e
250 IF d = -1 THEN RESTORE: END
260 OUT 888, e
270 LOCATE 17, 19
280 PRINT d
290 FOR t = 0 TO 125000: NEXT t
300 GOTO 240
310 DATA 9, 253, 8, 255, 7, 113, 6, 191, 5, 189, 4, 248, 3, 245, 2, 231, 1, 112, 0, 127, -1, -1


Ich bin leider kein besonders guter Programmierer und häng jetzt an einer vermutlich sehr einfachen Stelle fest.
Im Programm kann man ja sehen dass ich bei Eingabe einer 1 aufwärts und bei Eingabe einer 2 abwärts zählen will.

Das Problem ist jetzt , dass immer nur die obere DATA Zeile eingelesen wird.
Wie kann ich jetzt QBasic sagen dass bei einer 2 nur die untere DATA Zeile gelesen werden soll und die obere sozusagen übersprungen wird ?


mfg Benny90
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.01.2013, 19:14    Titel: Antworten mit Zitat

Du könntest unter Umständen mit Labels und RESTORE arbeiten. Damit springst du an die Stelle, ab der die nächste DATA-Eingabe verwendet werden soll.
_________________
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
Benny90



Anmeldungsdatum: 01.04.2008
Beiträge: 19

BeitragVerfasst am: 24.01.2013, 19:35    Titel: Antworten mit Zitat

Hmm ich hab jetzt einfach mal die Labels aus dem Beispiel genommen , funktioniert aber immer noch nicht.

Was mach ich falsch ?

Code:
10 CLS
20 SCREEN 8
30 COLOR 14, 1
50 LOCATE 5, 35
60 PRINT "Z„hler"
70 LOCATE 6, 33
80 PRINT "* * * * *"
90 LOCATE 9, 19
100 PRINT "Soll der Z„hler vor oder zurck laufen ?"
110 LOCATE 11, 19
120 INPUT "Geben Sie eine 1 fr >auf< und eine 2 fr >ab< ein !", a
130 IF a = 0 THEN END
140 IF a = 1 THEN GOTO 170
150 IF a = 2 THEN GOTO 240
160 IF a > 2 THEN LOCATE 14, 19: COLOR 4: PRINT "Falsche Eingabe !": SLEEP 3: GOTO 10
' Aufw„rts z„hlen
170 READ c, b
180 IF c = -1 THEN RESTORE bar: END
190 OUT 888, b
200 LOCATE 17, 19
210 PRINT c
211 FOR t = 0 TO 125000: NEXT t
212 GOTO 170
' Abw„rts z„hlen
240 READ d, e
250 IF d = -1 THEN RESTORE foo: END
260 OUT 888, e
270 LOCATE 17, 19
280 PRINT d
290 FOR t = 0 TO 125000: NEXT t
300 GOTO 240
301 bar:
310 DATA 9, 253, 8, 255, 7, 113, 6, 191, 5, 189, 4, 248, 3, 245, 2, 231, 1, 112, 0, 127, -1, -1
311 foo:
320 DATA 0, 127, 1, 112, 2, 231, 3, 245, 4, 248, 5, 189, 6, 191, 7, 113, 8, 255, 9, 253, -1, -1
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.01.2013, 20:39    Titel: Antworten mit Zitat

"RESTORE" ohne Label-Angabe setzt auf die erste DATA-Zeile. Abgesehen macht ein RESTORE vor dem END keinen Sinn - du kannst ja anschließend nichts mehr lesen, weil das Programm zuende ist.
Was Du brauchst ist "RESTORE foo" bzw. "RESTORE bar", um das Programm anzuweisen, dass er den ersten DATA-Eintrag nach "foo:" bzw. nach "bar:" verwenden soll. Du kannst natürlich auch die Zeilennummern als Label nehmen, wenn du die sowieso schon verwendest.
_________________
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
Benny90



Anmeldungsdatum: 01.04.2008
Beiträge: 19

BeitragVerfasst am: 24.01.2013, 21:26    Titel: Antworten mit Zitat

Hmm irgendwie funktioniert das nicht .Ich mach vermutlich immer noch was falsch oder hab da was falsch verstanden.
Ich hab jetzt schon alle möglichen Sachen ausprobiert aber der Zähler zählt immer nur von 9 bis 0 aber nicht anders rum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.01.2013, 21:58    Titel: Antworten mit Zitat

Code:
10 CLS
20 SCREEN 8
30 COLOR 14, 1
50 LOCATE 5, 35
60 PRINT "Z„hler"
70 LOCATE 6, 33
80 PRINT "* * * * *"
90 LOCATE 9, 19
100 PRINT "Soll der Z„hler vor oder zurck laufen ?"
110 LOCATE 11, 19
120 INPUT "Geben Sie eine 1 fr >auf< und eine 2 fr >ab< ein !", a
130 IF a = 0 THEN END
140 IF a = 1 THEN GOTO 170
150 IF a = 2 THEN GOTO 240
160 IF a > 2 THEN LOCATE 14, 19: COLOR 4: PRINT "Falsche Eingabe !": SLEEP 3: GOTO 10
' Aufw„rts z„hlen
170 RESTORE bar   ' waere nicht notwendig
175 READ c, b
180 IF c = -1 THEN END
190 OUT 888, b
200 LOCATE 17, 19
210 PRINT c
211 FOR t = 0 TO 125000: NEXT t
212 GOTO 175
' Abw„rts z„hlen
240 RESTORE foo
245 READ d, e
250 IF d = -1 THEN RESTORE foo: END
260 OUT 888, e
270 LOCATE 17, 19
280 PRINT d
290 FOR t = 0 TO 125000: NEXT t
300 GOTO 245
301 bar:
310 DATA 9, 253, 8, 255, 7, 113, 6, 191, 5, 189, 4, 248, 3, 245, 2, 231, 1, 112, 0, 127, -1, -1
311 foo:
320 DATA 0, 127, 1, 112, 2, 231, 3, 245, 4, 248, 5, 189, 6, 191, 7, 113, 8, 255, 9, 253, -1, -1


Mal ganz abgesehen davon, dass du hier ziemlich umständlich vorgehst und eine doppelte Speicherung nicht viel Sinn macht - hier soll aber mal nur der Umgang mit RESTORE demonstriert werden.
_________________
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
Benny90



Anmeldungsdatum: 01.04.2008
Beiträge: 19

BeitragVerfasst am: 24.01.2013, 22:16    Titel: Antworten mit Zitat

Hey super vielen Dank jetzt gehts einwandfrei

Und ja ich weiss dass ich sehr umständlich programmiere aber ich bin erst gerade dabei QBasic zu lernen happy

gruß Benny
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