- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Frage zu case

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317

    Frage zu case

    Anzeige

    Praxistest und DIY Projekte
    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
    mfG Henry

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    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
    Only entropy comes easy. - Anton Checkhov

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317
    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.
    mfG Henry

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    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.
    So viele Treppen und so wenig Zeit!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    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
    Only entropy comes easy. - Anton Checkhov

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317
    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
    mfG Henry

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Nürnberg
    Alter
    40
    Beiträge
    51
    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ß

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317
    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.
    mfG Henry

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    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
    Only entropy comes easy. - Anton Checkhov

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    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;
    }
    Disclaimer: none. Sue me.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad