Problem bei if-Abfrage



  • std::all_of() in C++11



  • Mach (z.b. bei std::vector) einfach '=='..

    oder (@CStoll, die funktion die ich meinte): std::find_end()



  • Ja, ich hab das jetzt mit dem boolschen Ausdruck gemacht..
    Hab das evtl. arg kompliziert gemacht hab, aber es läuft, und genügt mir auch.
    Danke



  • Nein!
    Du darfst nie sagen: "Hurra es funktioniert, lass ich's mal so stehen wie es ist damit ich's nicht kaputt mache".
    Poste mal deinen Code, den kann man bestimmt verbessern.



  • Du hast doch hoffentlich nicht alle Elemente aufgelistet? Falls doch, viel Spass wenn sich n mal ändert. Im Bezug auf Lesbarkeit und Fehleranfälligkeit hast du damit auch verloren.

    Machs wie der kleine Troll. Statt !(x < y) kannst du auch x >= y schreiben.



  • Also gut, hier der code. (bisschen verkürzt was die variablen angeht)
    Ich meinte nur, dass es wohl eleganter gehen könnte, weil ich noch nicht so viel Erfahrung habe...

    bool vgl1 = true, vgl2 = true, vgl3 = true, vgl4 = true, vgl5 = true;
    	int res;
    
    // Wenn ein Element > Vergleichswert, dann "false"
    	for (i=0; i<n-1; i++){
    		if ( wert1[i]-wert0[i] > verglsll ){
    			vgl1 = false;
    		}
    	}
    	for (i=0; i<n-1; i++){
    		if ( wert2[i]-wert0[i] > verglsll ){
    			vgl2 = false;
    		}
    	}
    	for (i=0; i<n-1; i++){
    		if ( wert3[i]-wert0[i] > verglsll ){
    			vgl3 = false;
    		}
    	}
    	for (i=0; i<n-1; i++){
    		if ( wert4[i]-wert0[i] > verglsll ){
    			vgl4 = false;
    		}
    	}
    	for (i=0; i<n-1; i++){
    		if ( wert5[i]-wert0[i] > verglsll ){
    			vgl5 = false;
    		}
    	}
    
    	// Szenarien durchgehen
    	if ( vgl1 == true ){
    		for (i=0; i<n-1; i++){
    		res = 1;
    	}
    	if ( vgl1 == false && vgl2 == true ){
    		for (i=0; i<n-1; i++){
    		res = 2;
    	}
    	if ( vgl1 == false && vgl2 == false && vgl3 == true ){
    		for (i=0; i<n-1; i++){
    		res = 3;
    	}
    	if ( vgl1 == false && vgl2 == false && vgl3 == false && vgl4 == true ){
    		for (i=0; i<n-1; i++){
    		res = 4;
    	}
    	if ( vgl1 == false && vgl2 == false && vgl3 == false && vgl4 == false && vgl5 == true ){
    		for (i=0; i<n-1; i++){
    		res = 5;
    	}
    	if ( vgl1 == false && vgl2 == false && vgl3 == false && vgl4 == false && vgl5 == false ){
    		cout << "Abruch.....";
                    [...]
    	}
    


  • AUTSCH. Kann mir garnicht vorstellen wie das funktionieren soll. Aber gut...

    bool res(false);
    //oder
    int res(-1);
    
    for(int a=0; a != wert1.size(); ++a)
        if(wert1.at(a) - wert0.at(a) > verglsll)
            res=true;
            // oder
        {
            res=a;
            break;
        }
    
    if(res){
    //...
    }
    //oder
    if(res > -1){
    //...
    }
    

    So stellte ich mir das vor. Kannst ja dann was mit res anfangen ...
    Ich glaub ich hab den Zweck des Codes nicht richtig verstanden...

    P.S.: Statt

    irgwas == false
    

    kannst du auch einfach

    !irgwas
    

    und statt

    irgwas == true
    
    irgwas
    

    schreiben.



  • Ziemlich ineffizient. Was hast du an dem Beispiel des kleinen Trolls nicht verstanden. Fällt dir auf, dass du eine und die selbe Schleife mehrmals verwendest? Wenn du wirklich jeden dieser "wert"-Werte überprüfen willst, dann pack sie alle in einen Vektor und schieß durch eine einzige Schleife. Jetzt beim Schreiben habe ich festgestellt, dass du selbst nicht ganz verstehst, was du geschrieben hast oder zumindest was es macht. Was bezweckst du mit den for-Schleifen in der zweiten Hälfte? Da hast du außerdem geschweifte Klammern vergessen. Die ganze zweite Häfte hättest du dir sparen können, wenn du etwas vernünftiges aus der STL benutzen würdest (auch res-Werte könntest du geschickt speichern).



  • Im ersten Teil geh ich alle n's durch. Sobald eins aus der Reihe fällt, wird aus true false...
    Der zweite teil ist dazu da, dass ich Ergebnisse (zum Beispiel) der dritten Iteration benutze. Hier kann auch vorkommen das die 3. und 5. true ergeben, aber dann will ich die "jüngste" Iterationswerte...
    Steh etwas unter Zeitdruck und deswegen, werd ich das mal so stehen lassen und nicht noch weiter an besseren Lösungen doktorn, solang ich "eine" Lösung hab 🙂



  • Dennoch besten Dank für die Hilfe, auch wenn ich sie nicht richtig nutze, mich hats weitergebracht 😉



  • Eine Lösung die wie Brechreizcode aussieht. Nach deinem Motto wirst du nicht richtig etwas dazu lernen. Du sagst du stehst unter Zeitdruck, daher geh ich davon aus, dass es für die Schule ist. Aber wenn du dir lieber 5 Minuten sparen willst, den Code ab zu ändern, kannst du dir wohl eine 5 in deinem Fach entbeeren.


Anmelden zum Antworten