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:

Timerfunktion

 
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
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 15.12.2009, 22:45    Titel: Timerfunktion Antworten mit Zitat

hab nen kleinen timer geschrieben und bräuchte eure hilfe. hab jetzt angefangen, den zauberwürfel 3x3x3 und 4x4x4 in zeit zu lösen. da ich mir kein teueres gerät dafür kaufen will, mach ichs einfach mit meinem pc. bin jetzt aber bissl verwirrt, weil der wert ".000067" laut kochbuch nicht korrekt ist, hab da bissl rumprobiert und der timer zählt jetzt ziemlich genau 1 sekunde je sekunde dazu.
was könnte ich noch verbessern?

Code:
y = 1

CLS
begin:
TIMER ON
t = TIMER
sec = 0
min = 0

LOCATE y, 1: PRINT "Zeit: 0 : 0"

DO
SELECT CASE INKEY$
  CASE CHR$(27)
    END
  CASE SPACE$(1)
    GOSUB prog
END SELECT
LOOP

prog:
DO
LOCATE y, 10: PRINT CINT(sec)
LOCATE y, 6: PRINT CINT(min)
sec = sec + .000067
IF sec > 59 THEN
   sec = 0
   min = min + 1
END IF
LOOP UNTIL INKEY$ = SPACE$(1)

DO
  LOCATE 1, 20: INPUT "Wollen Sie weitere Messungen vornehmen? [J / N]"; fr$
  IF fr$ = "j" OR fr$ = "J" THEN
    y = y + 1
    GOSUB begin
  END IF
  IF fr$ <> "" THEN END
LOOP
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 17.12.2009, 17:09    Titel: Antworten mit Zitat

den "prog:" - teil würde an deiner stelle so umwandeln, dass die zählung der zeit nicht abhängig von der prozessorleistung ist, sondern mit der im pc eingebauten uhr funtioniert.
dafür brauchst du den befehl TIMER
er gibt dir die anzahl der sekunden die seit mitternacht vergangen sind auf mehrere stellen nach dem komma an:
Eingabe:
t#=TIMER
PRINT t#
SLEEP
Ausgabe:
10765.59315447

deine sub würde dann so aussehen:

starttime#=TIMER 'aktuelle startzeit festhalten
DO
akttime#=TIMER 'aktuelle zeit festhalten
runtime#=starttime#-akttime# 'bereits verstrichene zeit = startzeit - aktuelle zeit
LOCATE y, 10:PRINT CINT(runtime#);" sec."
LOOP UNTIL INKEY$ 'bei beliebigem tastendruck schleife verlassen

(muss jetz weg, das umwandeln in minuten bleibt jetzt dir überlassen. aber ich schaue heute abend noch mal rein und hilf dir gegebenenfalls weiter grinsen )
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 17.12.2009, 20:24    Titel: Antworten mit Zitat

oh, mein fehler, wollte die timer funktion eigentlich einbauen und hab dann ohne die variable gearbeitet. lächeln

den befehl "cint" habe ich jetzt durch "fix" getauscht, da damit nicht gerundet, sondern nur die kommastelle weggeschnitten wird. wie ich die minuten ausrechne weiss ich auch, soweit bin ich noch gekommen.

jetzt habe ich aber trotzdem ein problem. wie bekomme ich bei 60 sekunden die sekunden aber wieder auf 0, da steh ich irgendwie auf n schlauch. das macht mich immer so aggressiv, wenn was nicht hinhaut.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 18.12.2009, 01:11    Titel: Antworten mit Zitat

Z. B. mit runtime# MOD 60
_________________
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
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 18.12.2009, 18:27    Titel: Antworten mit Zitat

ah danke, jetzt funzt das endlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 18.12.2009, 19:32    Titel: Antworten mit Zitat

jetzt wollte ich das programm kompilieren und die exe datei lässt sich nicht ausführen.

es wird der fehler "illegal function call in line no line number in module timer at adress 06b6:00b5" ausgespuckt.

hier der code:
Code:
CLS
y = 5
zaehler = 1
'---Zeichnen des Spielfeldes
LOCATE 2, 2: PRINT " ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
FOR j = 3 TO 39
LOCATE j, 2: PRINT "±³"
NEXT j
LOCATE 40, 2: PRINT "±ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
LOCATE 41, 2: PRINT "±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±"
FOR i = 3 TO 39
  LOCATE i, 79: PRINT "³"
NEXT i
LOCATE 3, 10: PRINT "S T A C K M A T   v1.1   (C) Copyright by Steff    Dezember 2009"
LOCATE 4, 3: PRINT "Ã"
LOCATE 4, 79: PRINT "Ž"
FOR k = 4 TO 78
  LOCATE 4, k: PRINT "Ä"
NEXT k
LOCATE 50, 2: PRINT "Zum Starten die Leertaste drcken!"





start:
LOCATE y, 5: PRINT zaehler
LOCATE y, 7: PRINT ".)"
LOCATE y, 10: PRINT "0  : 0"
DO: LOOP UNTIL INKEY$ = SPACE$(1)
starttime# = TIMER 'aktuelle startzeit festhalten
DO
akttime# = TIMER 'aktuelle zeit festhalten
runtime# = (starttime# - akttime#) 'bereits verstrichene zeit = startzeit - aktuelle zeit
LOCATE y, 14: PRINT FIX(runtime# MOD (60)) * -1
min# = FIX(runtime# / 60)
LOCATE y, 9: PRINT min# * -1
LOOP UNTIL INKEY$ = SPACE$(1)  'bei beli ebigem tastendruck schleife verlassen

LOCATE y, 24: INPUT "Wollen Sie erneut die Zeit messen? [J/N] ", in$
IF in$ = "j" OR in$ = "J" THEN
  y = y + 1
  zaehler = zaehler + 1
  GOSUB start
  ELSE
  IF in$ <> "" THEN END
END IF

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 18.12.2009, 21:05    Titel: Antworten mit Zitat

hat sich erledigt. das lag an dem rahmen, den ich außenrum gemacht habe. weiss nicht genau, wieviele zeichen ich da verwenden darf, jedenfalls konnte die exe datei den rahmen nicht komplett anzeigen und hat deshalb nen fehler ausgespuckt.
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