Zähleroperator in der for Schleife



  • Hi C Freunde 😉

    ich bin ein C Anfänger, und verstehe nicht so ganz wie ich folgendes intepretieren soll :
    void Kcenter(double *x , int d , int Nx , int K , double *xc , int *indxc , int *indx , int *xboxsz , double *dist_C)
    {
    double *x_ind , *x_j;
    register double temp ;
    int i , j , ind = 1, nd , ibase;

    indxc++ = ind;
    x_j = x;
    x_ind = x + ind
    d;

    for (j = 0 ; j < Nx ; x_j += d , j++)
    {
    dist_C[j] = (j==ind) ? 0.0 : ddist(x_j , x_ind , d);
    indx[j] = 0;
    }

    for(i = 1 ; i < K ; i++)
    {
    ind = idmax(dist_C , Nx);
    indxc++ = ind;
    x_j = x;
    x_ind = x + ind
    d;

    for (j = 0 ; j < Nx ; x_j += d, j++)
    {
    temp = (j==ind) ? 0.0 : ddist(x_j , x_ind , d);
    if (temp < dist_C[j])
    {
    dist_C[j] = temp;
    indx[j] = i;
    }
    }
    }

    for (i = 0 ; i < K ; i++)
    {
    xboxsz[i] = 0;
    }
    for (i = 0; i < d*K; i++)
    {
    xc[i] = 0.0;
    }

    for (i = 0 , nd = 0 ; i < Nx ; i++ , nd += d)
    {
    ➡ xboxsz[indx[i]]++; hier genau !!!!

    steht es vlt für xboxsz[indx(i)]=xboxsz[indx(i)]+1??
    UND WAS GENAU IST xboxsz[indx(i)]=???

    ibase = indx[i]*d;
    for (j = 0 ; j < d; j++)
    {
    xc[j + ibase ] += x[j + nd];
    }
    }

    for (i = 0 , ibase = 0 ; i < K ; i++ , ibase += d)
    {
    temp = 1.0/xboxsz[i];
    for (j = 0; j < d; j++)
    {
    xc[j + ibase] *= temp;
    }
    }
    }
    VIELEN LIEBEN dANK FÜR DIE Hilfe



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mathgirl schrieb:

    Hi C Freunde 😉
    ich bin ein C Anfänger

    C++ Forumbot schrieb:

    aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    😃



  • int mhmain()
    {
    
    	return 0x0;
    }
    
    void Kcenter(double *x , int d , int Nx , int K , double *xc , int *indxc , int *indx , int *xboxsz , double *dist_C)
    {
    	double *x_ind , *x_j;
    	register double temp ;
    	int i , j , ind = 1, nd , ibase;
    
    	*indxc++ = ind;
    	x_j = x;
    	x_ind = x + ind*d;
    
    	for (j = 0 ; j < Nx ; x_j += d , j++)
    	{
    		dist_C[j] = (j==ind) ? 0.0 : ddist(x_j , x_ind , d);
    		indx[j] = 0;
    	}
    
    	for(i = 1 ; i < K ; i++)
    	{
    		ind = idmax(dist_C , Nx);
    		*indxc++ = ind;
    		x_j = x;
    		x_ind = x + ind*d;
    
    		for (j = 0 ; j < Nx ; x_j += d, j++)
    		{
    			temp = (j==ind) ? 0.0 : ddist(x_j , x_ind , d);
    			if (temp < dist_C[j])
    			{
    				dist_C[j] = temp;
    				indx[j] = i;
    			}
    		}
    	}
    
    	for (i = 0 ; i < K ; i++)
    	{
    		xboxsz[i] = 0;
    	}
    	for (i = 0; i < d*K; i++)
    	{
    		xc[i] = 0.0;
    	}
    
    	for (i = 0 , nd = 0 ; i < Nx ; i++ , nd += d)
    	{
    		xboxsz[indx[i]]++; // hier genau !!!!
    
    		// das indx[i] dürfte einen Integer ergeben, dieser wird wohl den Index
    		// deines xboxsz Arrays darstellen.
    		// d.h. es wird auf den Platz zugegriffen, dessen Index == index[i] ist
    		// das ++ bedeutet Inkremement, d.h. x++ wird zu x += 1 oder x = x + 1
    		// das gleiche gibt es auch für --
    
    		ibase = indx[i]*d;
    		for (j = 0 ; j < d; j++)
    		{
    			xc[j + ibase ] += x[j + nd];
    		}
    	}
    
    	for (i = 0 , ibase = 0 ; i < K ; i++ , ibase += d)
    	{
    		temp = 1.0/xboxsz[i];
    		for (j = 0; j < d; j++)
    		{
    			xc[j + ibase] *= temp;
    		}
    	}
    }
    


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi Leute,

    danke für die Hilfe, aber eins ist mir noch bissl unklar 😕
    sorry bin noch ein super Anfänger 😞

    for (i=0; i<K; i++)
    {
    xboxsz[i]=0; <== hier ist doch xboxsz eine Null Matrix(1,K-1) bzw. Vektor
    }
    ...
    for (i=0; nd=0; i<Nx; i++; nd+=d)
    xboxsz[indx[i]]++; <== das indx[i] die indx[i]-te Stelle von xboxsz angibt ist

    mir klar aber was bekomme ich da raus?? was ist zum bsp.
    wenn indx[2]=3; wie siehts dann aus
    bei xboxsz[indx[2]]++=?????? was kommt da raus ???
    ... vlt etwa xboxsz[indx[2]]=xboxsz[indx[2]]+1
    was ist dann hier xboxsz[indx[2]]=??? für ein wert??
    }



  • Formatier bitte deinen Code wenn du ihn hier reinstellst. Sonst lesen das nur die ganz arg netten durch 😉

    PS: Du kannst auch Beiträge editieren.



  • was ist dann hier xboxsz[indx[2]]=??? für ein wert??

    Eben eins mehr als vorher. Wenn xboxsz[indx[2]] vorher 0 gewesen sein sollte, dann ist der Wert jetzt 1.


Anmelden zum Antworten