HILFE!!! Kategorisierungsproblem!



  • Hey C++ Community,

    ich hab ein kleines Problem mit der Kategorisierung bzw. mit der Abrufung der Kategorisierung in C++. Bevor ich lange versuch es in Worten zu beschreiben, hier mein Programm:

    if (GPS_Height[i]+3 < GPS_Height[i+1])
    		{
    			kat[i]=1;
    		}
    		else
    		{
    			if (GPS_Height[i]-3 > GPS_Height[i+1])
    			{
    				kat[i]=-1;
    			}
    
    			else
    			{
    				kat[i]=0;
    			}
    
    		}
    	}
    		for (int i=0; i<221; i++)
    	{
    
    		if (kat[i] = 0)
    		{
    			anzahl_n = anzahl_n + 1;
    		}
    		if (kat[i] = 1)
    		{
    			anzahl_p = anzahl_p + 1;
    		}
    		if (kat[i] = -1)
    		{
    			anzahl_m = anzahl_m + 1;
    		}
    		cout << "anzahl_n: " << anzahl_n << endl << "anzahl_p: " << anzahl_p << endl << "anzahl_m: " << anzahl_m << endl;
    	}
    

    Bei der Ausgabe wird mir für anzahl_n immer "0" ausgegeben, bei den anderen beiden, anzahl_m und anzahl_p zählt er synchron aufwärts, was er nicht soll.

    Weiß jemand wie ich die Bereiche/Kategorien zählen kann?

    Am Rande: Ich studier im ersten Semester Informatik... Also bitte nicht gleich auseinandernehmen 😉

    Hoffentlich kann mir jemand Helfen.

    Grüße

    m00gle



  • Bitte rücke nächstes Mal ein wenig sauberer ein.

    Du verwendest als Vergleichsoperator = , das mathematische Gleichheitszeichen entspricht in C++ aber == .



  • erstmal danke für die schnelle antwort und sorry fürs falsche Format.

    nach dem ich den vergleichsoperator geändert hab, gibt er mir für jeden anzahl_x wert "0" aus...

    wüsstest du was das sein kann?

    greetz



  • Zeig doch mal den ganzen Part, korrekt eingerückt. Da fehlt oben doch schon einmal mindestens eine Schleife. Desweiteren empfiehlt es sich auch mal sowas wie }else if(...){ zu verwenden.



  • Wahrscheinlich treffen die If-Bedingungen nicht ein und so werden die Variablen nicht erhöht. Ich kann aber nur raten, ohne mehr über den Code zu wissen. Das könntest du aber auch im Debugger oder mit std::cout -Statements herausfinden.

    Übrigens, um eine Variable zu inkrementieren gibt es den operator++ :

    int i = 0;
    ++i; // i ist 1, Ausdruck hat auch den Wert 1.
    i++; // i ist 2, Ausdruck hat aber noch den Wert 1 (Inkrementierung wird erst danach ausgewertet).
    


  • int _tmain(int argc, _TCHAR* argv[])
    {
    	double E1, N1,  E2, N2;
    	double a, b;
    	double dist;
    	int anzahl_n=0;
    	int anzahl_m=0;
    	int anzahl_p=0;
    
    	int kat[221];
    
    	for (int i=1; i<221; i++)
    	{
    	LL2UTM(GPS_Lat[i], GPS_Lon[i], E1, N1);
    	LL2UTM(GPS_Lat[i-1], GPS_Lon[i-1], E2, N2);
    	a = E1-E2;
    	b = N1-N2;
    	dist = sqrt(a*a+b*b);
    
    		if (GPS_Height[i]+3 < GPS_Height[i+1])
    		{
    			kat[i]==1;
    		}
    		else
    		{
    			if (GPS_Height[i]-3 > GPS_Height[i+1])
    			{
    				kat[i]==-1;
    			}
    
    			else
    			{
    				kat[i]==0;
    			}
    
    		}
    	}
    		for (int i=0; i<221; i++)
    	{
    
    		if (kat[i] == 0)
    		{
    			anzahl_n = anzahl_n + 1;
    		}
    		if (kat[i] = 1)
    		{
    			anzahl_p == anzahl_p + 1;
    		}
    		if (kat[i] == -1)
    		{
    			anzahl_m = anzahl_m + 1;
    		}
    		cout << "anzahl_n: " << anzahl_n << endl << "anzahl_p: " << anzahl_p << endl << "anzahl_m: " << anzahl_m << endl;
    	}
    
    	return 0;
    }
    

    ich wüsst nich was ich anders einrücken soll 😕

    grüße



  • m00gle schrieb:

    // In der nächsten Zeile sprengst du die Grenzen des Arrays dank i + 1
    		if (GPS_Height[i]+3 < GPS_Height[i+1])
    		{
    			kat[i]==1;
    		}
    		else
    		{
    // Hier ebenso
    			if (GPS_Height[i]-3 > GPS_Height[i+1])
    			{
    // Hier ist = der richtige Operator, nicht ==
    				kat[i]==-1;
    			}
    			
    			else
    			{
    // Hier ist = der richtige Operator, nicht ==
    				kat[i]==0;
    			}
    		
    		}
    	}
    		for (int i=0; i<221; i++)
    	{
    
    		if (kat[i] == 0)
    		{
    			anzahl_n = anzahl_n + 1;
    		}
    // Hier ist == der richtige Operator, nicht =
    		if (kat[i] = 1)
    		{
    // Hier ist = der richtige Operator, nicht ==
    			anzahl_p == anzahl_p + 1;
    		}
    		if (kat[i] == -1)
    		{
    			anzahl_m = anzahl_m + 1;
    		}
    		cout << "anzahl_n: " << anzahl_n << endl << "anzahl_p: " << anzahl_p << endl << "anzahl_m: " << anzahl_m << endl;
    	}
    
    	return 0;
    }
    

    ich wüsst nich was ich anders einrücken soll 😕

    grüße



  • m00gle schrieb:

    ich wüsst nich was ich anders einrücken soll 😕

    Normalerweise fügt man nach jeder öffnenden geschweiften Klammer eines Blocks eine Einrückung ein. Hast du z.B. innerhalb der ersten For-Schleife und im Schleifenkopf der zweiten For-Schleife missachtet.

    Was soll das?

    if (kat[i] = 1) 
            { 
                anzahl_p == anzahl_p + 1; 
            }
    

    Gibt es einen Grund, nicht das normale main() zu verwenden?

    Lies vielleicht nochmal meinen oberen Thread...



  • @nexus: das hatte ich falsch geändert, flüchtigkeitsfehler, sorry...

    jetzt funktioniert das programm einwandfrei....

    danke an alle...

    grüße

    m00gle


Anmelden zum Antworten