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:

Zählerproblem?

 
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: 07.03.2013, 00:48    Titel: Zählerproblem? Antworten mit Zitat

Ich versuche eine IF-Abfrage zu realisieren die zwei Werte miteinander vergleicht und dann eine Aktion auslöst.

Der 1. Wert soll wie folgt zählen: +3 -2 +3 -1 +3 -2 +3 -1 +3 ...
der 2. Wert zählt nach dem gleichen Schema wie der 1. Wert.
Und ein 3. Wert der ebenfalls wie die ersten beiden Werte in der IF-Abfrage steht, zählt dabei immer 1 nach oben. Damit man weiß wie oft die Schleife durchlaufen ist!

Ich weiß im Moment noch nicht wie ich das am besten realisiere.

Habe schon an Mod bzw. einer For-Next Schleife gedacht. Falls das damit überhaupt geht. Stehe etwas auf dem Schlauch momentan.

Wuerfel ist ein vorher rein zufällig definierter Wert.
Wert 1 fängt bei irgendeiner Zahl an.
Wert 2 fängt ebenfalls bei irgendeiner Zahl an.

Code:
DO
IF Wuerfel > Wert1 AND Wuerfel < Wert2 THEN ' Aktion
???
LOOP



Gruß
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: 07.03.2013, 02:04    Titel: Antworten mit Zitat

Ich würde vermutlich etwas in der Art machen:
Code:
RANDOMIZE TIMER
DIM AS INTEGER wert1(0 to 3) = {3, -2, 3, -1}, wert2(0 to 3) = {3, -2, 3, -1}
DIM AS INTEGER zaehler1 = INT(RND*4), zaehler2 = INT(RND*4)

' Testlauf
FOR i AS INTEGER = 1 TO 20
  PRINT wert1(zaehler1), wert2(zaehler2)
  zaehler1 = (zaehler1 + 1) MOD 4
  zaehler2 = (zaehler2 + 1) MOD 4
NEXT
GETKEY

Zwei verschiedene Arrays sind natürlich überflüssig, wenn sie sowieso dieselben Werte besitzen. Mit IF-Abfragen könnte man auch ganz auf Arrays verzichten; so ist es aber flexibler für mögliche spätere Änderungen.
_________________
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
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 07.03.2013, 10:24    Titel: Antworten mit Zitat

Die IF-Abfrage muss schon sein. Es wird geprüft, ob ein Wert der selbe ist wie der andere und dann eine Aktion ausgelöst! Es gibt keine Printausgabe!

Die Abfrage kann man aber sicher irgendwie in deinem Beispiel einfügen nehme ich mal an.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 07.03.2013, 12:53    Titel: Antworten mit Zitat

siehe: http://forum.qbasic.at/viewtopic.php?p=101718#101718


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 10.03.2013, 09:31    Titel: Antworten mit Zitat

Code:
SCREENRES 640,320,32

RANDOMIZE TIMER
DIM AS INTEGER R1, R2, i, k, Rk
I = 51
k = 0
Rk = 0
R1 = 0
R2 = 3
 DO
   IF k = 1 OR k = 3 THEN R1 += 3: R2 += 3
   IF k = 2 THEN R1 -= 2: R2 -= 2
   IF k = 4 THEN R1 -= 1: R2 -= 1
   IF Rk > R1 AND Rk < R2 THEN BEEP
   LOCATE i + 1, 5: PRINT R1; " "; R2
   k += 1
   i += 1
   IF k > 4 THEN k = 1
   IF i > 72 THEN EXIT DO
   LOOP
 GETKEY
 END


Habe es selber lösen können! Der Quellcode macht genau das was ich will.
Vielleicht geht es noch besser, eleganter?

Auf jeden Fall klappt es!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 10.03.2013, 14:03    Titel: Antworten mit Zitat

lies dir den link durch, den ich dir gepostet habe. du hast nämlich noch immer einen fehler im sourcecode.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

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

TPM, wenn du das mit der Klammerung meinst, das passt schon - ein Vergleich bindet stärker als eine AND-Verknüpfung.
http://www.freebasic-portal.de/befehlsreferenz/ausdruecke-operatoren-384.html
_________________
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
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 10.03.2013, 15:27    Titel: Antworten mit Zitat

ok. nehm alles zurück. grinsen

bei mir grads diesbezüglich schon oft probs. kurios.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 10.03.2013, 16:54    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
lies dir den link durch, den ich dir gepostet habe. du hast nämlich noch immer einen fehler im sourcecode.

MfG
TPM

Wirklich???
Das Programm funktioniert aber, so wie ich es brauche!?
Sehe auf den ersten Blick keinen Fehler.

Ein Test sagt mir, dass die richtigen Zahlen ausgespuckt werden.

Gruß
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: 10.03.2013, 18:18    Titel: Antworten mit Zitat

Es geht (u. a.) um die Stelle
Code:
IF k = 1 OR k = 3 THEN R1 += 3: R2 += 3

Sicherer wäre es, zu klammern, damit die richtige Abarbeitungsreihenfolge auf jeden Fall gewährleistet ist:
Code:
IF (k = 1) OR (k = 3) THEN R1 += 3: R2 += 3

Allerdings binden die Vergleichsoperatoren =, < und > stärker als AND und OR, weshalb der Code durchaus korrekt arbeitet.

Übrigens ist mir erst durch deinen Code klar geworden, was du in deiner Fragestellung genau wolltest. War etwas unklar formuliert. happy
_________________
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
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 11.03.2013, 00:06    Titel: Antworten mit Zitat

Zitat:
Übrigens ist mir erst durch deinen Code klar geworden, was du in deiner Fragestellung genau wolltest. War etwas unklar formuliert. happy
Macht nichts. Wurde ja zum Schluss noch aufgeklärt.

Wieso sicherer? Kann es sein, dass bei anderen Computern es Probleme gibt? Funktionieren tut es ja korrekt. Bisher hatte ich bei so was noch nie Probleme.

Kleine Quizzfrage: Wem kommen die ausgegebenen Zahlen bekannt vor?
(Die Zahlen ergeben ein bestimmtes Muster, das jedem bekannt sein dürfte)

Gruß
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: 11.03.2013, 00:40    Titel: Antworten mit Zitat

[quote="ALWIM"]
Zitat:
Wieso sicherer? Kann es sein, dass bei anderen Computern es Probleme gibt?

Nein, höchstens in anderen Programmiersprachen, die das anders regeln (ist aber auch eher unwahrscheinlich). Unsicher wird es in dem Augenblick, in dem du glaubst, der Compiler würde es auf eine bestimmte Art und Weise interpretieren, er das aber anders macht. Solange du dir sicher bist, was du tust, ist alles in Ordnung.
_________________
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
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 04.04.2013, 16:14    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:

Habe es selber lösen können! Der Quellcode macht genau das was ich will.
Vielleicht geht es noch besser, eleganter?


Grundsätzlich würde ich dir Empfehlen Groß/- und Kleinschreibung zu nutzen, um gewisse Dinge besser zu unterscheiden. Außerdem solltest du gleich übersichtlich einrücken bzw. Blöcke bilden.

Ein Schema könnte so aussehen:
- Variablen komplett klein zu schreiben.
- Funktionen/Subs und Type's bzw. Klassennamen mit einem großen Anfangsbuchstaben und eventuell weiteren in der Mitte
- Keywords und Konstanten komplett groß


Code:
SCREENRES 640,320,32

RANDOMIZE TIMER
DIM AS INTEGER r1, r2, i, k, rk

k = 0
rk = 0
r1 = 0
r2 = 3

FOR i = 51 TO 72
   SELECT CASE k
    CASE 1,3
        r1 += 3: r2 += 3
    CASE 2
        r1 -= 1: r2 -= 1
    CASE 4
        IF rk > r1 AND rk < R2 THEN BEEP
    END SELECT   
   
    LOCATE i + 1, 5: PRINT r1; " "; r2
    k += 1
    IF k > 4 THEN k = 1   
NEXT   
GETKEY
END
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 11.04.2013, 13:44    Titel: Antworten mit Zitat

Variablennamen sollten nicht unbedingt nur aus ein oder zwei Buchstaben bestehen. Sowas findet eher Platz im IOCCC...
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 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