Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 07.03.2013, 00:48 Titel: Zählerproblem? |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 07.03.2013, 02:04 Titel: |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 07.03.2013, 10:24 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 10.03.2013, 09:31 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 10.03.2013, 14:03 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 10.03.2013, 15:27 Titel: |
|
|
ok. nehm alles zurück.
bei mir grads diesbezüglich schon oft probs. kurios.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 10.03.2013, 16:54 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 10.03.2013, 18:18 Titel: |
|
|
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.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 11.03.2013, 00:06 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 11.03.2013, 00:40 Titel: |
|
|
[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 |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 04.04.2013, 16:14 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.04.2013, 13:44 Titel: |
|
|
Variablennamen sollten nicht unbedingt nur aus ein oder zwei Buchstaben bestehen. Sowas findet eher Platz im IOCCC... |
|
Nach oben |
|
 |
|