Guten Abend
Ich habe ein Problem mit einer einfachen IF Abfrage:
Ich habe ein "Byte" an Zahlen, welche ich in 4 IF-Abfragen auswerten
möchte.
z.B. die Zahlen 1, 5, 9, 13, 17, .... usw..
Für einen Zahlenwert von 255 wären das in einer Viertelung mindestens 63
Werte.
Ich möchte jetzt aber nicht 63 IF-Abfragen machen, sondern die vier
Zahlenstränge in je einer Abfrage unterbringen.
Derzeit war DAS mein letzter Versuch:
Ich habe es mit Kommata versucht und diversen anderen
Trennmöglichkeiten.
Entweder sehe ich den "Wald" derzeit nicht mehr, oder ich habe ein
Syntax Problem....
Kann mir bitte einer helfen bei dem Problem?
Danke und Grüße
Select Case Rotary
Case 1 : Print "1"
Case 2 : Print "2"
Case 3 To 5 : Print "3-5"
Case Is >= 10 : Print ">= 10"
Case Else : Print "Not in Case statement"
End Select
Danke für diese schnellen Antworten!
Nach der Abfrage, also dem "Then" wird einfach ein Pin auf H gesetzt.
Ich lese mich jetzt mal in die Case bzw. Mod Befehl ein.
Vlt. fällt einem noch was anderes ein :)
Danke
Denis I. schrieb:> Vlt. fällt einem noch was anderes ein :)
Das war bereits der optimale Einfall, solange die Reihe einer Regel
gehorcht, hier durch 4 teilbar und Rest immer 1.
Wär's nicht so, so könnte man eine Reihe "Data"-Anweisungen nehmen und
per Schleife alles durchprobieren. Aber viel zuviel Aufwand, wenn's
durch Modulo zu lösen ist.
Versuche es mal mit Select-Käse, äh Case
Dim Eingabe As Byte
Input "Gib einen Wert ein! (0-255) " , Eingabe
Select Case Eingabe
Case 0 To 63 : Print "Liegt zwischen 0 und 63"
Case 64 To 127 : Print "Liegt zwischen 64 und 127"
Case 128 To 192 : Print "Liegt zwischen 128 und 192"
Case 193 To 255 : Print "Liegt zwischen 192 und 255"
Case Else : Print "Eingabe war Käse!"
End Select
Print "MfG Paul"
Edith sagt: So schnell kann ich nicht tippen...
Ich habe mich gerade auf Lookup() eingeschossen.
So wie es aussieht bekomme ich es aber nicht in eine "IF" Abfrage rein.
Mein Gedanke war:
gedankenspielan
Wenn "Rotary" einen Wert entspricht der in "Lookup(taba , A1l)" Tabelle
zu finden ist, dann schalte ggf. PIN XY auf H.
gedankenspielaus
Also ungefähr so:
1
IfRotary=Lookup(taba,A1l)Then
2
...
3
EndIf
4
5
A1l:
6
Data1,5,9,13,17,...
"Taba" habe ich als Byte bestimmt.
Ich habe insgesamt ja 4 DATA Tabellen, mit je unterschiedlichen Werten
der 255, welche in vier "IF" Abfragen ausgewertet werden sollen.
Die vorangeführte Tabelle und diese 3:
B1l:
Data 2 , 6 , 10 , 14 , 18 , ...
A2l:
Data 3 , 7 , 11 , 15 , 19 , ...
B2l:
Data 4 , 8 , 12 , 16 , 20 , ...
Wo ist mein Fehler?
Denis I. schrieb:> Ich habe mich gerade auf Lookup() eingeschossen.
Das erscheint mir unnötig umständlich.
Wenn ich es recht verstanden habe, möchtest Du folgendes erreichen:
- für die Werte 0, 4, 8, 12, 16 etc. bis 252
soll Funktion A aufgerufen werden
- für die Werte 1, 5, 9, 13, 17 etc. bis 253
soll Funktion B aufgerufen werden
- für die Werte 2, 6, 10, 14, 18 etc. bis 254
soll Funktion C aufgerufen werden
- für die Werte 3, 7, 11, 15, 19 etc. bis 255
soll Funktion D aufgerufen werden
Dann wird Dein Code mit MOD (Modulo) recht überschaubar:
@ Kurt:
Ja das kann sein, aber habe inzwischen eine kleine Ahnung was Mod macht.
Ich habe jetzt einen Dummy Code eingefügt mit den hier besprochenen
Parametern.
Nur mir wird gerade nicht klar wie der Code im richtigen Syntax zusammen
gebracht wird.
Ich sitze anscheinend schon zu lange heute vor dem PC...
*Was ich verstanden habe:*
"Modu" macht bei einem "4" Zahlenwerte von 0 bis 3 aus dem "Rotary".
Damit rufe ich dann meine Unterprogramme auf und springe danach wieder
zurück.
Die "Call Case" Funktion wird in der Hauptschleife ausgeführt.
Ähnlich wie Gosub XY?
Der Schlauch auf dem ich gerade stehe ist groß..... Mist
EDIT:
Der Code macht jetzt das was ich möchte bzw. nur jeden 4ten Wert macht
er das..., aber ich kann mir doch nicht Modu zusammen reimen.
Kann mir das bitte einer erklären?
Aus der Bascom hilfe werde ich nicht ganz schlau draus....