 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 28.11.2009, 19:13 Titel: Analoguhr - Fehler im Quellcode; Keine Zeiger? Grafikfehler? |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.11.2009, 20:17 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 29.11.2009, 00:56 Titel: |
|
|
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 |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 29.11.2009, 23:17 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 30.11.2009, 19:08 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2009, 19:19 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 30.11.2009, 19:43 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 30.11.2009, 20:59 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2009, 22:31 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.12.2009, 12:49 Titel: |
|
|
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 : |
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 05.12.2009, 17:17 Titel: |
|
|
[offtopic]Wie kann einem MOD nicht gefallen?? [/offtopic] |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 05.12.2009, 21:14 Titel: |
|
|
Ich habe nur in der Übersicht gelesen, dass du auf diesen Thread geantwortet hast, und sofort dasselbe gedacht.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 05.12.2009, 21:42 Titel: |
|
|
an sowas hab ich nicht gedacht ... _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|
|
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.
|
|