Aufgabe switch case



  • Schreiben Sie bitte ein Programm, welches bei einer Warenbestellung Mengenrabatte in der
    Rechnung berücksichtigt. Bei der Bestellung bis 9 Einzelteile wird kein Rabatt gegeben, bis zu
    50 Teile werden 5% Rabatt gewährt, bis 99 Stück 10%, über 99 Stück werden mit einem Rabatt
    von 15% verkauft. Das Einzelstück soll zu einem regulären Preis von € 100,-- angeboten
    werden. Benutzen Sie die switch-Verzweigung.

    Hat da jemand ne Idee wie ich die Aufageb Vernünftig lösen kann?
    case < x funktioniert ja leider nicht 😞



  • ist halt viel copy/paste, alle 100 fälle aufzuzählen. aber der lehrer will das so haben.
    vielleicht geht auch swicth(anzahl/10) miz 10 fällen.



  • volkard schrieb:

    ist halt viel copy/paste, alle 100 fälle aufzuzählen. aber der lehrer will das so haben.

    das denke ich nicht!
    Denke eher mein Lehrer wird mich standrechtlich erschießen wenn ich im 100*case reinhacke



  • dann soll er nicht explizit die switch-Verzweigung bestellen.

    oder wenn ihr in der schule die gcc nehmt, nimm die entsprechende gcc-erweiterung.
    http://www.linuxtopia.org/online_books/programming_tool_guides/linux_using_gnu_compiler_collection/case-ranges.html



  • 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);
    

Anmelden zum Antworten