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:

Analoguhr - Fehler im Quellcode; Keine Zeiger? Grafikfehler?

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 28.11.2009, 19:13    Titel: Analoguhr - Fehler im Quellcode; Keine Zeiger? Grafikfehler? Antworten mit Zitat

Guten Abend.

Ich habe im Internet einen Quellcode gefunden der für Qbasic 4.5 geschrieben wurde. Diesen wollte ich in Freebasic zum laufen bringen.
Es soll auf dem Bildschirm eine Analoguhr angezeigt werden.
Vielleicht findet jemand den Fehler? Mit Qbasic klappt das original Programm einwandfrei.

Mit freundlichen Grüßen
ALWIM

Code:
 
Declare Sub Zahl
 
 Dim Shared As Integer hgcolor, zahlen, rahmen, x, y, a, d, b, cr, box, xz, yz
 Dim Shared as Integer dur, min, plus, kl
Dim Shared As Integer zeiger.sec, zeiger.min, zeiger.std
 
Dim Shared a$, aas$, bs$, cs$, ga$, gb$, gc$, c$, b$, l$

    Screen 12,,, &H01 Or &H04
 
  ' Maussymbol nicht anzeigen
  SETMOUSE ,,0
  SLEEP 50
  ' Mausposition merken
Cls

x = 320
y = 230

 PALETTE 3, 0: PALETTE 9, 57
hgcolor = 9: zahlen = 15: rahmen = 15

 CIRCLE (x, y), 210, 14: PAINT (x, y), 14
Circle (x, y), 200, hgcolor: PAINT (x, y), hgcolor

d = 4
 FOR a = 360 TO 0 STEP -6: a$ = STR$(a)
 PSET (x, y), 15
 l$ = "7": d = d + 1
 IF d = 5 THEN d = 0: l$ = "15"
 DRAW "ta" + a$ + "c" + STR$(hgcolor) + "u150 c" + STR$(rahmen) + "u" + l$
 Next

a$ = "12": xz = 305: yz = 30: Zahl
a$ = "6": xz = 315: yz = 402: Zahl
a$ = "9": xz = 130: yz = 217: Zahl
a$ = "3": xz = 495: yz = 217: Zahl
a$ = "1": xz = 405: yz = 57: Zahl
a$ = "11": xz = 222: yz = 55: Zahl
a$ = "10": xz = 148: yz = 123: Zahl
a$ = "2": xz = 471: yz = 123: Zahl
a$ = "4": xz = 471: yz = 310: Zahl
a$ = "8": xz = 155: yz = 310: Zahl
a$ = "5": xz = 407: yz = 376: Zahl
a$ = "7": xz = 222: yz = 376: Zahl

10 :
sec = VAL(RIGHT$(TIME$, 2))
a$ = STR$(360 - (sec * 6)):
min = VAL(MID$(TIME$, 4, 2))
b$ = STR$(360 - (min * 6)):
plus = 0
IF min > 12 THEN plus = 1
IF min > 24 THEN plus = 2
IF min > 36 THEN plus = 3
IF min > 48 THEN plus = 4

std = VAL(MID$(TIME$, 1, 2))
IF std = 1 OR std = 13 THEN std = 5 + plus: GOTO 20
IF std = 2 OR std = 14 THEN std = 10 + plus: GOTO 20
IF std = 3 OR std = 15 THEN std = 15 + plus: GOTO 20
IF std = 4 OR std = 16 THEN std = 20 + plus: GOTO 20
IF std = 5 OR std = 17 THEN std = 25 + plus: GOTO 20
IF std = 6 OR std = 18 THEN std = 30 + plus: GOTO 20
IF std = 7 OR std = 19 THEN std = 35 + plus: GOTO 20
IF std = 8 OR std = 20 THEN std = 40 + plus: GOTO 20
IF std = 9 OR std = 21 THEN std = 45 + plus: GOTO 20
IF std = 10 OR std = 22 THEN std = 50 + plus: GOTO 20
IF std = 11 OR std = 23 THEN std = 55 + plus: GOTO 20
IF std = 12 OR std = 0 OR std = 24 THEN std = 0 + plus: GOTO 20
20 :
c$ = STR$(360 - (std * 6)):
IF a$ = aas$ THEN 10 ELSE 12
12 :
 REM -----------------------------  Zeiger Löschen ---------------------
 
   PSET (x, y), hgcolor
   DRAW "ta" + aas$ + "r3 l6 u" + ga$ + "e3 f3 d" + ga$

 PSET (x, y), hgcolor
 DRAW "ta" + bs$ + "r5 l10 u" + gb$ + "e5 f5 d" + gb$
Draw "ta" + bs$ + "u" + gb$
 PSET (x, y), hgcolor
Draw "ta" + cs$ + "u" + gc$
 DRAW "ta" + cs$ + "r7 l14 u" + gc$ + "e7 f7 d" + gc$

aas$ = a$: bs$ = b$: cs$ = c$

REM -------------------------- Zeiger Malen ------------------------
 
   PSET (x, y), zeiger.sec
   Draw "ta" + a$ + "u" + ga$
   DRAW "ta" + a$ + "r3 l6 u" + ga$ + "e3 f3 d" + ga$

 
 PSET (x, y), zeiger.min
 Draw "ta" + b$ + "u" + gb$
 DRAW "ta" + b$ + "r5 l10 u" + gb$ + "e5 f5 d" + gb$

 PSET (x, y), zeiger.std
Draw "ta" + c$ + "u" + gc$
DRAW "ta" + c$ + "r7 l14 u" + gc$ + "e7 f7 d" + gc$

FOR kl = 1 TO 10: CIRCLE (x, y), kl, zeiger.min: NEXT:
dur = dur + 1:
GOTO 10
End

Sub Zahl
If box = 1 THEN zahlen = cr
COLOR 3: LOCATE 1, 1: PRINT a$
FOR a = 0 TO LEN(a$) * 8 - 1
FOR b = 0 TO 14
IF POINT(a, b) = 3 THEN PSET (xz + a * 2, yz + b * 2), zahlen
NEXT: NEXT:
IF box = 1 THEN LINE (xz - 4, yz - 4)-(xz + a * 2, yz + b * 2), zahlen, B: box = 0
End Sub

_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.11.2009, 20:17    Titel: Antworten mit Zitat

Gib's zu: Du hast noch nicht mal versucht, die Fehlermeldungen des Compilers zu verstehen. Mit einem #lang "deprecated" vornedran (oder einfach den parameter -lang deprecated an den compiler übergeben) lässt es sich anstandslos kompilieren.
Weißt du, was "Suffixes are only valid in -lang deprecated or fblite or qb" heißt?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 29.11.2009, 00:56    Titel: Antworten mit Zitat

Zitat:
Zitat von Jojo:
Gib's zu: Du hast noch nicht mal versucht, die Fehlermeldungen des Compilers zu verstehen. Mit einem #lang "deprecated" vornedran (oder einfach den parameter -lang deprecated an den compiler übergeben) lässt es sich anstandslos kompilieren.
Weißt du, was "Suffixes are only valid in -lang deprecated or fblite or qb" heißt?


Compilierung funktionierte bei mir ja. Aber es werden nur eben keine Zeiger angezeigt. Warum weiß ich nicht. Dachte ich hätte es oben erwähnt?

Edit: Im Titel habe ich mein Problem erwähnt.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 29.11.2009, 23:17    Titel: Antworten mit Zitat

Bei mir ist das auch so.

Die Zeiger scheinen die Zuckungen in der Mitte des Ziffernblattes zu sein, die mit der Zeit einen schwarzen Klops bilden.

Total schlecht geschriebenes Programm. Schreib dir doch selbst ein neues! Gute Übung!

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 30.11.2009, 19:08    Titel: Antworten mit Zitat

Zitat:
Zitat von croko97:
Bei mir ist das auch so.

Die Zeiger scheinen die Zuckungen in der Mitte des Ziffernblattes zu sein, die mit der Zeit einen schwarzen Klops bilden.
VG!
Croco


Zitat:
Total schlecht geschriebenes Programm. Schreib dir doch selbst ein neues! Gute Übung!

Ist eine Überlegung wert.
Aber mir geht es nicht um's selber schreiben sondern um den Fehler.
Den will ich beheben.
Was nützt mir das selber schreiben, wenn ich dann nachher den gleichen Fehler wie bei dem Programm oben drin habe und ohne Hilfe nicht beheben kann.
Noch dazu Programmiere ich in Freebasic so gut wie gar nicht. Benutze noch immer Qbasic 4.5

Zitat:
Total schlecht geschriebenes Programm.

So schlecht ist das Programm gar nicht. Das Programm ist normalerweise eines der besten was Analoguhren betrifft. Habe schon deutlich schlechtere gesehen. Mit Qbasic 4.5 funktioniert das Original ohne Probleme.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 30.11.2009, 19:19    Titel: Antworten mit Zitat

Naja, so Dinge wie
Code:
IF std = 1 OR std = 13 THEN std = 5 + Plus: GOTO 20
IF std = 2 OR std = 14 THEN std = 10 + Plus: GOTO 20
IF std = 3 OR std = 15 THEN std = 15 + Plus: GOTO 20
[...]

sind nun wirklich nicht gut durchdacht.
_________________
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 30.11.2009, 19:43    Titel: Antworten mit Zitat

ALWIM, Funktionalität hat nichts mit Programmierstil zu tun. Und ich würde trotzdem behaupten, bei dem Programm fehlt beides. Der Fehler liegt höchstwahrscheinlich in der DRAW-Funktion. Wenn du dich direkt an die DRAW-Befehle von FB hältst, kann da nix schief gehen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 30.11.2009, 20:59    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Naja, so Dinge wie
Code:
IF std = 1 OR std = 13 THEN std = 5 + Plus: GOTO 20
IF std = 2 OR std = 14 THEN std = 10 + Plus: GOTO 20
IF std = 3 OR std = 15 THEN std = 15 + Plus: GOTO 20
[...]

sind nun wirklich nicht gut durchdacht.

Ich habe das Programm ja nicht geschrieben. Wobei ich es warscheinlich nicht anders programmiert hätte.

Zitat:
Zitat von Jojo:
Der Fehler liegt höchstwahrscheinlich in der DRAW-Funktion

Gibt es Unterschiede beim Draw-Befehl von Qbasic zu Freebasic?
In Qbasic funktioniert das Originalprogramm. Vielleicht habe ich versehentlich was falsches mit weggelöscht?
Teilweise wird die Uhr bei mir sogar Weiß-Grün.
Egal. Kriege das schon noch hin.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 30.11.2009, 22:31    Titel: Antworten mit Zitat

Zitat:
Ich habe das Programm ja nicht geschrieben.

Weiß ich; ich bezog mich aber auf die Aussage "So schlecht ist das Programm gar nicht."
Die 12 Zeilen kann man problemlos in eine einzige zusammenfassen. Mich erinnert es ein wenig an ein Fakultät-Berechnungsprogramm, das ich vor einem halben Jahr gesehen habe:
Code:
DIM AS INTEGER eingabe, ausgabe
DIM AS INTEGER z1 = 1, z2 = 2, z3 = 3, z4 = 4, z5 = 5, z6 = 6, z7 = 7, z8 = 8, z9 = 9, z10 = 10, z11 = 11, z12 = 12
INPUT "Zahl von 1 bis 12 eingeben: ", eingabe
IF eingabe = 1 THEN ausgabe = z1
IF eingabe = 2 THEN ausgabe = z1 * z2
IF eingabe = 3 THEN ausgabe = z1 * z2 * z3
IF eingabe = 4 THEN ausgabe = z1 * z2 * z3 * z4

Ging so bis 12 weiter. Ist übrigens kein Fake.

Zu DRAW: Insgesamt ist es derselbe Befehlssatz, aber ein paar Probleme scheint es zu geben. Ich habe beim Transfer von QBASIC nach FreeBASIC ein paar Pixel anpassen müssen, damit es stimmte. Die DRAW-Befehle dieses Programms habe ich mir aber nicht näher angesehen
_________________
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
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 02.12.2009, 12:49    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Code:
IF std = 1 OR std = 13 THEN std = 5 + Plus: GOTO 20
IF std = 2 OR std = 14 THEN std = 10 + Plus: GOTO 20
IF std = 3 OR std = 15 THEN std = 15 + Plus: GOTO 20
[...]

Ich habe das Programm ja nicht geschrieben. Wobei ich es warscheinlich nicht anders programmiert hätte.
Ich hoffe doch?
Code:
std = ((std * 5) Mod 60) + Plus
ersetzt das ganze IF - Gedönse.
Wem MOD nicht gefällt:
Code:
std = (std * 5) + Plus
if  std > 60 then std = std - 60
if  std >= 60 then std = std - 60

Eine weiteres Glanzstück:
Code:
IF a$ = aas$ THEN 10 ELSE 12
12 :
lachen vor lachen auf dem Boden rollen
Ich würde es eher neu schreiben als versuchen es zu debugen!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 05.12.2009, 17:17    Titel: Antworten mit Zitat

[offtopic]Wie kann einem MOD nicht gefallen?? durchgeknallt [/offtopic]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 05.12.2009, 21:14    Titel: Antworten mit Zitat

Ich habe nur in der Übersicht gelesen, dass du auf diesen Thread geantwortet hast, und sofort dasselbe gedacht. grinsen
_________________
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
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 05.12.2009, 21:42    Titel: Antworten mit Zitat

Autsch!
an sowas hab ich nicht gedacht Gnade, Gnade! ...
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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