For-Schleife und if-then-else; Passt das zusammen?????????



  • Ist es in c++ nicht möglich in einer Fallunterscheidung eine for-Schleife unterzubringen???

    Ein Teil meines Codes:
    GLfloat glROT2(GLfloat t){
    GLfloat a;
    if((t>0.333) & (t<=0.666)){
    return 0;
    }
    else if((t<=0.333)||(t>=0.833 & t<1)){
    return 1;
    }

    else
    for(GLfloat i=0.15; i<1; i+=0.t)
    a=t+i;
    return a;

    Zwar gibt der Compiler keine Fehlermeldung aber ich kriege trotzdem nicht das richtige Ergebnis.
    Ich wollte eine Farbskala zeichnen lassen, die von t abhängt.
    Er zeichnet mir zwar eien Balken aber keinen fließenden Übergang, was die Else- Anweisung übernehmen soll.
    Ich übergebe dann den Wert von glROT2 an diese Funktion

    glLoadIdentity();
    GLfloat t;
    glTranslatef(0.0f,-3.0f,-8.0f);
    glBegin(GL_QUADS);
    GLfloat i;
    for(i=0; i<6;/*3.2;*/ i+=0.1f){
    t=glCalcColor(recValue, min, max);
    glColor3f(glROT2(t),1,0);
    glVertex2f(-1.0f,(i)); //unten links
    glVertex2f( 0.0f,(i)); //unten rechts
    glVertex2f( 0.0f,(i+0.1f)); //oben rechts
    glVertex2f(-1.0f,(i+0.1f)); //oben links
    recValue+=100;
    }
    glEnd();

    Danke



  • dudududududududududu schrieb:

    Zwar gibt der Compiler keine Fehlermeldung

    Das muss aber ein toller Compiler sein, der mit 0.t etwas anfangen kann. Welcher ist es denn?

    dudududududududududu schrieb:

    aber ich kriege trotzdem nicht das richtige Ergebnis.

    Ist dir klar, dass deine for-Schleife bis zum Ende durchläuft und dann den letzten ermittelten Wert zurückgibt? Alle Schleifendurchläufe bis auf den letzten sind also wirkungslos, weil du den Wert in a immer wieder überschreibst.



  • Na das mit dem 0.t war nur ein Kopierfehler.Da steht eigentlich 0.1.
    Das tut ja auch nicht zur Sache.

    Hast du denn nen Vorschlag wie ich das lösen kann, dass er mir den Wert nicht immer überschreibt.
    Hab noch keine großen Erfahrungen.Wäre für nen Tipp also mehr als dankbar.



  • dudududududududududu schrieb:

    GLfloat a;
    	if((t>0.333) & (t<=0.666)){
    		return 0;
    	}
    

    versuch's mal mit

    if((t>0.333) && (t<=0.666))
    

    Gruß
    Werner



  • GLfloat glROT2(GLfloat t){
    	GLfloat a;
    	if((t>0.333) & (t<=0.666)){
    		return 0; //hier gibt er 0 zurück
    	}
            else if((t<=0.333)||(t>=0.833 & t<1)){
    		return 1; //hier gibt er 1 zurück
    	}
    
            else
            for(GLfloat i=0.15; i<1; i+=0.1)
    	a=t+i;
    	return a; // hier gibt er immer t + 0.95 zurück
    

    Warum diese for-schleife? Sinn des Codes 😕



  • übrigens: weißt du was ein debugger ist?



  • Speckbörger schrieb:

    übrigens: weißt du was ein debugger ist?

    Und weißt du wie man Code so Formatiert das er auf den ersten Blick nicht lesbar ist (Einrückung des else-Zweiges...). 😉


Anmelden zum Antworten