Hä? warum geht if nicht?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Medabots1992

Betreff: Hä? warum geht if nicht?

BeitragDi, Sep 06, 2005 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist was sehr komisches aufgetretten ?!?!
Dieser Code geht irgendwie nicht kann mir einer Helfe.
BlitzBasic: [AUSKLAPPEN]
If k(0) = 1 And k(3) = 1 And k(6) = 1 Or k(1) = 1 And k(4) = 1 And k(7) = 1 Or k(2) = 1 And k(5) = 1 And k(8) = 1 Or k(0) = 1 And k(1) = 1 And k(2) = 1 Or k(4) = 1 And k(5) = 1 And k(3) = 1 Or k(6) = 1 And k(7) = 1 And k(8) Or k(0) = 1 And k(4) = 1 And k(8) = 1 Or k(2) = 1 And k(4) = 1 And k(6) = 1 Then

Weil Wink es geht nicht os wie es soll Sad
Ich brauche hilfe warum das nicht geht.
ok es ist so:
BlitzBasic: [AUSKLAPPEN]

k(0) = 1
k(3) = 1
k(2) = 2
k(1) = 2
k(6) = 1
k(4) = 2
...


Ich brauch dringend hilfe warum das nicht funktioniert Sad
Weil ich denke ich hab alles richtig gemacht ist aber net funktionfähig.
 

Timo

BeitragDi, Sep 06, 2005 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW! was ist das denn für ne Abfrage??

Versuch sie doch etwas zu vereinfachen, dann geht der Fehler mit sicherheit auch von alleine Futsch Wink

Code: [AUSKLAPPEN]
abfrage = 0
If k(0) And k(3) And k(6) then Abfrage=1
if k(1) And k(4) And k(7) then Abfrage=1
if k(2) And k(5) And k(8) then Abfrage=1
if k(0) And k(1) And k(2) then Abfrage=1
if k(4) And k(5) And k(3) then Abfrage=1
if k(6) And k(7) And k(8) then Abfrage=1
if k(0) And k(4) And k(8) then Abfrage=1
if k(2) And k(4) And k(6) then Abfrage=1
;;;;;;; --->
if abfrage then
   ;...............
   ;... bla bla ...
   ;...............
endif


statt "if bla = 1" kannst du auch schreiben "if bla" weil in dem fall dann ja bla = 1 = true ist.

Ich denke mal, dein Fehler war, dass du das ungefähr so hattest:
Code: [AUSKLAPPEN]
if ... and ... and ... and ... or ... and ... and ... and ...

aber so meintest:
Code: [AUSKLAPPEN]
if ( ... and ... and ... and ... ) or ( ... and ... and ... and ...)

denn der Computer versteht die Zeile so:
Code: [AUSKLAPPEN]
if ... and ... and ... and ( ... or ... )  and ... and ... and ...
 

MegaTefyt

BeitragDi, Sep 06, 2005 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal davon abgesehen, dass so eine Abfrage nicht sonderlich... "glücklich" ist, kommt AND grundsätzlich vor OR (wie bei Punktrechnung vor Strichrechnung).

D2006

Administrator

BeitragDi, Sep 06, 2005 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche immer geschickt einzuklammern.

Statt:
BlitzBasic: [AUSKLAPPEN]
If var1= 12 And var2=5 Or var1=58 And var2=23 Then

Was wahrscheinlich nicht den gewünschten Effekt hat, musst du dir überlegen,was du willst.
In meinem Beispiel: Entweder ist var1 = 12 und Var2=5 ODER var1 ist 58 und var2 23. Das sähe dann nämlich so aus:

BlitzBasic: [AUSKLAPPEN]
If (var1=12 And var2=5) Or (var1=58 And var2=23) Then


MfG
D2006
 

Medabots1992

BeitragDi, Sep 06, 2005 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
achso das hab ich nicht gewusst.
Jetzt weis ich mehr Smile
Hab net gewusst das or "* or /" ist und and "+ or -" oder so. (Mathe)
So jetzt geht es
Very Happy
*freu*
Ja und wie mach ich es mit dem?
Das ist nur AND
If Not k(0) = 2 And k(1) = 2 And k(2) = 2 And k(3) = 2 And k(4) = 2 And k(5) = 2 And k(6) = 2 And k(7) = 2 And k(8) = 2 And k(0) = 1 And k(1) = 1 And k(2) = 1 And k(3) = 1 And k(4) = 1 And k(5) = 1 And k(6) = 1 And k(7) = 1 And k(8) = 1 And Abfrage = 1 And Abfrage = 2 Then

D2006

Administrator

BeitragDi, Sep 06, 2005 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll der scheiß?

Wie soll k(0) gleichzeitig 1 und 2 sein. Und wie Abfrage gleichzeitig 1 und 2. Und ...?

Ich komme mir bei deiner Denkleistung, die du hier an den Tag legst, sehr verarscht vor.

Erst denken, dann posten.

MfG
D2006
 

Medabots1992

BeitragDi, Sep 06, 2005 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ICh weis es wirklich nicht.
Weil davor ist ja ein Not also wenn???
Ok kann ja stimmen das ich da was flasch gemacht hab ooops....
 

Omenaton_2

BeitragDi, Sep 06, 2005 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, der original Code ist ein MONSTRUM !

AND und OR sollten nicht in einer Zeile gemischt werden. AND und OR schließen sich eigentlich gegenseitig aus.
Wenn so was gibt dann so:

If X = 1 And Y = 2 And Z = 3 Then
If Q = 1 or Q = 5 Then "Irgendwas"
Endif

Außerdem, wenn es um viele verschiedenen Werte des selben Variable geht, kann man oft auch mit < und > vereinfachen:
If X > 0 and X < 6 then
If X <> 4 then "irgendwas"
Endif
(Hier werden alle X Werte zwischen 1 und 5 genommen, außer 4.)

Aber, wenn man so Viele verschiedene Werte abgleichen will, dann sollte man das lieber ganz anders lösen.
Zum Beispiel eine Schleife und Read Data Kombination oder was Ähnliches, es gibt da Möglichkeiten.

For f = 1 to 6
Read Dat1
If k(Dat1) = 1 Then "Irgendwas"
Next

Data 0,3,6,1,4, "etc..."


Anmerkung: Du könntest das weiter kombinieren, in dem du den aus Data gelesenen Wert nicht immer nur mit 1 vergleichst, sondern auch den Vergleichweett aus einer Data ausliest.
 

Timo

BeitragDi, Sep 06, 2005 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
MegaTefyt hat Folgendes geschrieben:
Mal davon abgesehen, dass so eine Abfrage nicht sonderlich... "glücklich" ist, kommt AND grundsätzlich vor OR (wie bei Punktrechnung vor Strichrechnung).


ich dachte AND und OR sind gleichberechtigte Operationen, wie Plus und Minus
 

Medabots1992

BeitragMi, Sep 07, 2005 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
oh ich habs Very Happy
JA das ist ja so
BlitzBasic: [AUSKLAPPEN]

For zahl = 0 To 8
insgesamt = k(zahl) + insgesamt
Next
so sollte ich das machen :( und ich kam net drauf
 

MegaTefyt

BeitragMi, Sep 07, 2005 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
MegaTefyt hat Folgendes geschrieben:
Mal davon abgesehen, dass so eine Abfrage nicht sonderlich... "glücklich" ist, kommt AND grundsätzlich vor OR (wie bei Punktrechnung vor Strichrechnung).


ich dachte AND und OR sind gleichberechtigte Operationen, wie Plus und Minus


Hm, ist auch so, habe das gerade nachgeschlagen und in Blitz3D getestet. Aber korrekt ist es eigentlich nicht, da AND und OR usw. logische Operatoren sind und da kommt nunmal AND vor OR. Leider wird dies wohl nicht von allen Sprachen eingehalten. Bei SQL beispielsweise gelten diese Regeln...

Also nochmal in kurz: in Blitz3D haben AND und OR die gleiche Priorität.

Von Blitzbase.de:

Code: [AUSKLAPPEN]
()                  Einklammerung
INT, FLOAT, STR     Typumwandlung
~                   Bitw. Invertierung
^                   Potenzieren
*, /, MOD           Multiplikation, Division, Modulo
SHL, SHR, SAR       Bitverschiebung
+, -                Addition, Subtraktion
<, >, <=, >=, =, <> Vergleich
AND, OR, XOR        Und, Oder, XOder-Operatoren
NOT                 Nicht-Operator


(Priorität von oben nach unten fallend, auf gleicher Zeile = gleiche Priorität)

Wenn ich zum Beispiel C nehme, dann kommt AND vor XOR und XOR vor OR. Und NOT kommt direkt nach der Klammerung an zweiter Stelle, während NOT in Blitz3D an letzter Stelle kommt. O.o

Naja, man muss sich wohl von Sprache zu Sprache anpassen, wobei ich das echt ein als ein Unding empfinde, dass Prioritäten von logischen Operatoren überall anders gesetzt werden...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group