Aufgabe switch case



  • gcc ?



  • Janosch1991Omg schrieb:

    gcc ?

    gnu compiler collection, das ding, was bei linux und bsd mitgeliefert wird. nicht das von microsoft.



  • hm doof ne haben wir nich sonnst gibts keine möglichkeit?



  • Janosch1991Omg schrieb:

    hm doof ne haben wir nich sonnst gibts keine möglichkeit?

    Es gibt tausende von Möglichkeiten, aber alle wären so, daß Dein Lehrer das nicht mag. Die hier gefällt mir, aber dem Lehrer wohl nicht.

    switch(((n>9)+(n>50)+(n>99))*5){
       case 0: ...
       case 5: ...
       case 10: ...
       case 15: ...
    }
    


  • Es ist nicht möglich, Bereiche von Werten direkt als case -Marken zu verwenden, also etwa eine case -Marke für Werte von 10 bis 19 zu schreiben. Hierfür müssen alle Werte als case -Marke aufgezählt werden. Wenn das nicht erwünscht ist, bleibt noch die Möglichkeit, vorher den Bereich zu ermitteln, wie in dem folgenden Beispiel, in dem die Funktion "bereiche" für Zahlen von 10 bis 20, für Zahlen von 20 bis 29 und für die Zahlen 30 und 31 jeweils unterschiedliches Verhalten zeigt.

    bereiche.cpp

    #include <iostream> 
        #include <ostream>
    
        void bereiche( int const zahl ) 
        { switch( zahl < 20 ? 19 : zahl < 30 ? 20 : zahl ) 
          { case 19: std::cout << "Bereich bis 19"; break; 
            case 20: std::cout << "Bereich von 20 bis 29"; break; 
            case 30: std::cout << "Zahl 30"; break; 
            case 31: std::cout << "Zahl 31"; break; }}
    
        int main() 
        { for( int i = 10; i < 32; ++i ) 
          {  std::cout << i << ": "; bereiche( i ); std::cout << '\n'; }}
    

    std::cout

    10: Bereich bis 19
    11: Bereich bis 19
    12: Bereich bis 19
    13: Bereich bis 19
    14: Bereich bis 19
    15: Bereich bis 19
    16: Bereich bis 19
    17: Bereich bis 19
    18: Bereich bis 19
    19: Bereich bis 19
    20: Bereich von 20 bis 29
    21: Bereich von 20 bis 29
    22: Bereich von 20 bis 29
    23: Bereich von 20 bis 29
    24: Bereich von 20 bis 29
    25: Bereich von 20 bis 29
    26: Bereich von 20 bis 29
    27: Bereich von 20 bis 29
    28: Bereich von 20 bis 29
    29: Bereich von 20 bis 29
    30: Zahl 30
    31: Zahl 31



  • volkard schrieb:

    Es gibt tausende von Möglichkeiten, aber alle wären so, daß Dein Lehrer das nicht mag. Die hier gefällt mir, aber dem Lehrer wohl nicht.

    switch(((n>9)+(n>50)+(n>99))*5){
       case 0: ...
       case 5: ...
       case 10: ...
       case 15: ...
    }
    

    Sehr gut, den hatte ich auch im Sinn, nur war ich dann gerade zu faul.



  • Ist so doof wie "benutzen Sie zum Schwimmen Ihre Krücken"!

    Ich würde dann sowas machen (Pseudospreche):
    if stück > 9 Rabattstufe = 1
    else if stück > 50 Rabattstufe = 2

    und dann einen

    switch Rabattstufe
    case 1
    case 2

    usw, blah, blubb ...
    Schieß' Dir vorm Marathon ins Knie und guck mal, wie die anderen Läufer doof gucken. 😃



  • Ich würde dann sowas machen (Pseudospreche):
    if stück > 9 Rabattstufe = 1
    else if stück > 50 Rabattstufe = 2

    und dann einen

    switch Rabattstufe
    case 1
    case 2

    Damit wären wir fast bei den völlig absurden Strategien angelangt. Warum nicht so:

    switch (me) {
        default:
            machs_mit_if();
    }
    

    🙂



  • pointercrash() schrieb:

    Ich würde dann sowas machen (Pseudospreche):
    if stück > 9 Rabattstufe = 1
    else if stück > 50 Rabattstufe = 2

    nee, sprünge sind z.b. doof, wenn das zielsystem eine instruction pipeline hat. ausrechnen des switch-wertes ist meistens vorteilhafter.
    🙂



  • ;fricky schrieb:

    pointercrash() schrieb:

    Ich würde dann sowas machen (Pseudospreche):
    if stück > 9 Rabattstufe = 1
    else if stück > 50 Rabattstufe = 2

    nee, sprünge sind z.b. doof, wenn das zielsystem eine instruction pipeline hat. ausrechnen des switch-wertes ist meistens vorteilhafter.
    🙂

    Jau, bauen wir erst die Hardware und passen dann das Rabattsystem an.
    😃



  • Big Brother schrieb:

    Jau, bauen wir erst die Hardware und passen dann das Rabattsystem an.

    wie meinen?
    🙂



  • Direktes Ausrechnen des switch Wertes dürfte in der Praxis recht selten klappen. Da ist if soundoviel Stück then soundsoviel Rabatt schon eher an der Praxis dran. Oda watt.

    Gruß,
    B.B.



  • Big Brother schrieb:

    Direktes Ausrechnen des switch Wertes dürfte in der Praxis recht selten klappen.

    machmal klappt es. und wenn es klappt, ist es meistens schneller.
    🙂



  • ;fricky schrieb:

    machmal klappt es. und wenn es klappt, ist es meistens schneller.

    wollen wir (((n>9)+(n>50)+(n>99))*5) als if-orgie zählen oder als berechnung? falls nicht berechnung, würdest du eine berechnung vorschlagen?



  • volkard schrieb:

    wollen wir (((n>9)+(n>50)+(n>99))*5) als if-orgie zählen oder als berechnung? falls nicht berechnung, würdest du eine berechnung vorschlagen?

    (n>9)+(n>50)+(n>99) ist doch schon gut berechnet, nur dieses *5 würde ich weglassen.
    🙂



  • Wenn man schon *5 hat, braucht man doch kein switch mehr...

    int a = ((n>9)+(n>50)+(n>99))*5;
    printf("Sie bekommen einen Mengenrabatt von %d%%.", a);
    


  • #include <iostream>
    using namespace std;
    int main()
    
    {
    int anz; 	// Anzahl der Produkte
    int rabattstufe
    float preis1;
    float preis2;
    float preis3;
    float preis4;
    
    cout << "Geben Sie an wieviele Produkte Sie kaufen \n";
    cin >> anz;
    
    preis1 = anz * 100;
    preis2 = anz * 100 * 0.95;
    preis3 = anz * 100 * 0.9;
    preis4 = anz * 100 * 0.85;
    
    {
    if      (anz >= 0 and anz <= 9) rabattstufe = 1;
    else if (anz >= 10 and anz <= 50) rabattstufe = 2;
    else if (anz >= 51 and anz <= 99) rabattstufe = 3;
    else if (anz >=100 and anz <= 9999999999) rabattstufe = 4;
    
    switch (rabattstufe)
    {
        case 1 : cout << preis1 ; break;
        case 2 : cout << preis2 ; break;
        case 3 : cout << preis3 ; break;
        case 4 : cout << preis4 ; break;
    }
    }
    return 0;
    }
    

    Ich weiß es ist bisschen spät.. aber ich bin gerade auf dieses Forum gestoßen und bin totaler noob was programmieren betrifft. daher meine Frage falls dieses Forum noch aktiv ist.
    Kann man das so lösen oder ist dies nicht gewünscht?


  • Mod

    Hi, es spricht zwar allgemein nicht direkt etwas dagegen, Fragen zu alten Threads zu stellen, aber dein Beitrag hier ist schon etwas komisch:
    -Es ist eine Antwort zu einer uralten Frage, die schon längst beantwortet ist
    -An der Antwort sind mehrere Dinge falsch:
    --Es ist C++.
    --Es löst die Aufgabe nicht wirklich gut, sondern versucht bloß die Klausel "benutzen sie die switch-Anweisung" rein formell zu erfüllen. Genausogut hättest du auch alles in der if-Kaskade machen können (was eine vernünftige Lösung der Aufgabe, aber ohne switch, wäre) und am Ende ein leeres switch. Dann hättest du auch eine switch-Anweisung benutzt.
    --Geld und Fließkommazahlen geht gar nicht. Das macht man nicht als Lösungsvorschlag vor.


Anmelden zum Antworten