-
Frage zu case
Hallo,
ich suche nun schon eine Weile im Forum, bin aber leider nicht fündig geworden.
Ich möchte mit Case einen Zahlenbereich abfregen. Einzeln klappt es ja so:
Code:
while(1)
{
switch(Zaehler2)
{
case 100: LED1 = 10;
case 200: LED1 = 20;
}
nun möchte ich aber z.B. in der ersten Anweisung einen Bereich von 0..100 haben und in der Zweiten Anweisung 101..200.
Geht das auf diese Weise? ich habe nämlich nicht herausgefunden wie ich einen Bereich definieren kann.
Kann mir da jemand auf die Sprünge helfen?
Danke schon einmal
-
Hallo Henry,
das Testen, ob eine Variable in einen Bereich fällt, ist ein klassicher Fall für geschachtelte "if"-, nicht für "switch/case"-Anweisungen. Ich gehe mal davon aus, dass "Zaehler2" "unsigned" ist:
<pre>
uint8_t Zaehler2;
// bla bla bla
if (Zaehler2<=200) {
if (Zaehler2>100) { // 101 <= Zaehler2 <= 200
}
else { // 0 <= Zaehler2 <= 100
}
}
</pre>
MfG
Fred
-
Danke erst einmal für Deine Antwort.
Das Problem ist nur das es dann eine ganz schöne schachtelei werden wird, es werden ca. 20-30 Bereiche werden.
Da ich bis jetzt noch nicht durch die Erzeugung einer Zufallszahl durchgeblickt habe, muss ich mir nämlich irgendetwas basteln womit ich durcheinander wirkende folge zu erstellen.
Da kam mir case am übersichtlichsten vor.
-
Also das macht man wirklich besser mit if, aber wenn man es geschickt anstellt braucht nix geschachtelt zu werden...
Code:
int x;
if(x >= 100)
{
}
else if(x >= 90)
{
}
else if(x >= 80)
{
}
else if(x >= 70)
{
}
. . .
else
{
}
Der Compiler sollte das so umsetzen, daß nach der ersten zutreffenden Bedingung alle folgenden ignoriert werden. Das ist dann auch nicht unübersichtlicher als ein switch-Block.
-
Hallo Henry,
wenn es immer 100er (oder andere fixe) Stufen sind, die Du einordnen willst, kannst Du sicher auch mit einer geschickten Integer-Division (evtl. nach Runden und/oder Verschieben des Nullpunkts) die Bereiche finden und dann mit switch/case weiterverarbeiten!
Gruß
Fred
-
Leider soll die Stufung unterschiedlich sein, da ja eine gewisse Zufälligkeit vorgegaukelt werden sollen.
Bin nebenbei auch am weitersuchen, ob ich die Erzeugung von Zufallszahlen nicht doch irgendwie hin bekomme
-
Hi!
Wie wäre es wenn du mit if-Abfragen zuerst die Bereiche abstichst,
und dann dementsprechend eine Variable setzt?
Pseudocode:
if ((x>= bla1) && (x<= bla2)) var=1;
if (bedingung bereich 2) var=2;
usw...
Diese Variable benutzt du dann zur Case-Abfrage.
So hättest du einen Teil zum Bereichefestlegen,
und einen Teil um festzulegen was passieren soll.
Gruß
-
Das würde schon so ähnlich aus wie meine case Idee.
Das werde ich mal im Hinterkopf behalten, denn ich habe mittlerweile schon Fortschritte mit Zufallszahlen machen können.
Ich danke euch für eure Hilfe und Vorschläge.
-
Hallo Henry,
welche Probleme Du mit der Erzeugung von Zufallszahlen hast, ist mit nicht klar. In diesem Thread im Nachbarforum gibt es etwas C-Code dazu und auch eine Assembler-Routine, die ich mal geschrieben habe (leicht auf C änderbar; nur Ganzzahlen).
Gruß
Fred
-
Code:
int foo (int x)
{
int r;
switch (x)
{
default: r = 0; break;
case 100 ... 199: r = 1; break;
case 200 ... 299: r = 2; break;
}
return r;
}