switch & Bedingungen ???



  • Ja - es geht - aber ich bekomms nicht hin, wenn ich nur einmal jeden string im quellcode schreiben darf (bzw falls man es noch mal auslagert nur einmal die jeweilige ausgabe-fkt aufruft)...

    und da ich das hässlich fand, hab ichs eben über die booleans gemacht...

    bb

    edit:
    also besser als so bekomm ichs nicht hin:

    #include <iostream>
    using namespace std;
    
    int main() 
    {
    	for(int i(0), e(11); i != e; ++i)
    	{
    		cout << i << ": " << endl;
    		switch(i)
    		{
    		case 0:
    		case 10:
    			cout << "\tdurch 10 teilbar" << endl;
    			cout << "\tdurch  5 teilbar" << endl;
    		case 2:
    		case 4:
    		case 6:
    		case 8:
    			cout << "\tdurch  2 teilbar" << endl;
    			break;
    		case 5:
    			cout << "\tdurch  5 teilbar" << endl;
    			break;
    		default:
    			cout << "\tnichts besonderes" << endl;
    		}
    	}
    
    //	system("PAUSE");
    }
    


  • for(int i=0;i<=10;++i)
    {
        switch(i)
        {
            case 0:
                cout<<"5-teilbar\n"<<"10-teilbar\n"<<"2-teilbar"<<endl;
                break;
            case 10:
                cout<<"5-teilbar\n"<<"10-teilbar\n"<<"2-teilbar"<<endl;
                break;
            case 5:
                cout<<"5-teilbar"<<endl;
                break;
            case 2:
            case 4:
            case 6:
            case 8:
                cout<<"2-teilbar"<<endl;
                break;
            default:
                cout<<"nichts besonderes"<<endl;
        };
    };
    

    Die Lösung passt ja genau wie unskilleds Lösung genau zum Aufgabentext.

    EDIT: Code Tags vergessen...


  • Administrator

    unskilled schrieb:

    ..., wenn ich nur einmal jeden string im quellcode schreiben darf ...

    So? Und wo steht diese Einschränkung? Es gibt nur zwei Einschränkung und die lauten:

    Beachten Sie, dass alle zutreffenden Bedingungen überprüft werden sollen,
    also ggf. mehrere Meldungen ausgegeben werden sollen. Verwenden Sie so
    wenig wie möglich Anweisungen und break-Befehle.

    Und dein zweiter Code hat wohl deutlich weniger Anweisungen als dein erster Code, nicht? 🙂
    Ich dachte sogar vorhin, dass es noch eine bessere Lösung gibt, aber bin mir jetzt nicht mehr ganz so sicher, bzw. zu faul, weil zu heiss, um das nachzuprüfen. 😉

    Grüssli



  • Also erstmal vielen Dank euch allen!

    Ich habe es jetzt so gelöst:

    #include <iostream>
    using namespace std;
    
    void main()
    {
    	for (int i = 0; i <= 10; i++)
    	{
    
    		switch(i)
    		{
    			case 0:
    				cout << i << " " << "10-teilbar " << endl
    					<< i << " " << "5-teilbar" << endl
    					<< i << " " << "2-teilbar" << endl;
    				break;
    			case 5:
    				cout << i << " " << "5-teilbar" << endl;
    				break;
    			case 10:
    				cout << i << " " << "10-teilbar" << endl
    					<< i << " " << "5-teilbar" << endl;
    			case 2:
    			case 4:
    			case 6:
    			case 8:
    				cout << i << " " << "2-teilbar" << endl;
    				break;
    			default:
    				cout << i << " " << "Nichts besonderes" << endl;
    		}
    	}
    }
    

    Besser bekomm ich es nicht hin...
    Zum Thema HA lösen 😃 ... Sind keine HA, ist alles freiwillig,
    aber es lies mir einfach keine Ruhe...

    Gruß

    Poque



  • Dravere schrieb:

    unskilled schrieb:

    ..., wenn ich nur einmal jeden string im quellcode schreiben darf ...

    So? Und wo steht diese Einschränkung?

    Sie steht nirgendwo - aber hässlich ist es noch immer ^^

    @Poque:
    Guck dir mal noch ma die anderen Lösungen an (z.bsp. meine) - und dann guck mal noch ma deine an - dann wirst du sehen, dass meine viel kürzer ist und genau so funktioniert... (weil ich das break nicht überall hingesetzt habe - weil es nicht sinnvoll ist, es überall hinzuschreiben ^^

    z.bsp. solltest du die 0 mal mit zu der 10 schreiben - dann sparst du schon wieder 3 zeilen ^^

    @Dravere: Falls du Lust und Zeit hast, dann versuch das mal - ich glaub eigtl nich, dasses was tolleres gibt ^^

    bb



  • @unskilled: OK, hast recht! Deins ist wohl echt die kürzeste Variante!
    🙂

    Danke



  • Dravere schrieb:

    Ich dachte sogar vorhin, dass es noch eine bessere Lösung gibt, aber bin mir jetzt nicht mehr ganz so sicher, bzw. zu faul, weil zu heiss, um das nachzuprüfen. 😉

    Nope du brauchst eine doppel behandlung. ziemlich daemliche aufgabe deswegen. denn damit sind alle loesungen haesslich und wir lernen daraus das code duplizierung nicht schlecht ist. 😕


  • Administrator

    Oki, doki, wie wäre es damit? 🙂

    switch(i)
    {
    case 0 :
    case 10 :
        std::cout << "10-teilbar" << '\n';
    case 5 :
        std::cout << "5-teilbar" << '\n';
        if(5 == i) break;
    case 2 :
    case 4 :
    case 6 :
    case 8 :
        std::cout << "2-teilbar" << '\n';
        break;
    default :
        std::cout << "nichts besonderes" << '\n';
    }
    

    Keine Codewiederholung, ziemlich kurz. Gut, die If-Anweisung ist nicht so schön, aber was besseres will mein immernoch kochendes Hirn nicht in den Sinn kommen 🤡

    Grüssli



  • naja - schöner, aber nicht schön 🤡

    bb



  • auch nicht schön, nur ein bißchen im sinne der aufgabe gefrickelt.

    die endziffer von i hoch 4 ist da recht lecker.

    switch(i*i*i*i%10)
    {
    case 0:
    	cout << "\tdurch 10 teilbar" << endl;
    	cout << "\tdurch 5 teilbar" << endl;
    	cout << "\tdurch 2 teilbar" << endl;
    	break;
    case 5:
    	cout << "\tdurch 5 teilbar" << endl;
    	break;
    case 6:
    	cout << "\tdurch 2 teilbar" << endl;
    	break;
    case 1:
    	cout<<"\tnichts besonderes"<<endl;
    	break;
    }
    

    und das führt zu

    switch(i*i*i*i%10)
    {
    case 1:
    	cout<<"\tnichts besonderes"<<endl;
    	break;
    case 0:
    	cout << "\tdurch 10 teilbar" << endl;
    	cout << "\tdurch 5 teilbar" << endl;
    default:
    	cout << "\tdurch  "<<2+3*(i%2)<<" teilbar" << endl;
    }
    


  • ich glaub dir einfach mal x)


Anmelden zum Antworten