Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rekurencja for loopa - dostęp do poszczególnych iteratorów

Ostatnio zmodyfikowano 2018-04-11 16:12
Autor Wiadomość
pajczur
Temat założony przez niniejszego użytkownika
Rekurencja for loopa - dostęp do poszczególnych iteratorów
» 2018-04-11 09:50:33
Witam,
chciałbym zrobić funkcję, która będzie zagnieżdżała for loopy wewnątrz for loopa i mieć jednocześnie dostęp do poszczególnych iteratorów.
Próbowałem zrobić coś takiego stosując rekurencję, ale mam wrażenie, że kolejne zagnieżdżone lupy nie aktualizują iteratorów, które się zmieniają w nadrzędnych loopach.
Próbowałem zrobić coś takiego, ale to nie działa tak jak bym sobie tego życzył:
C/C++
std::vector < int > it;
// Tutaj kod, który wypełni wektor "it" danymi

std::vector < int *> iter;
for( int i = 0; i < it.size(); i++ )
{
    iter.push_back( & it( i ) );
}

int sweek = 0;
int dup = 0;

// I tutaj wywoluje funkcje, ktora jest zdefiniowana nastepujaco:
void matrixRecursion()
{
    int start = sweek;
    int end = matrix[ sweek ];
   
    for( it( start ); it( start ) < end; it( start ) ++ )
    {
        if( sweek < it.size() - 1 )
        {
            sweek++;
            matrixRecursion();
        }
        else
        {
            for( int t = 0; t < it.size(); t++ )
            {
                dup += nIndex[ * iter[ t ] ];
            }
        }
    }
}
Co dokładnie chcę uzyskać? Zakładając, że
it.size()
 jest równe np. 3, chciałbym, aby moja funkcja wykonała taką instrukcję:
C/C++
for( int i = 0; i < matrix[ 0 ]; i++ )
{
    for( int j = 0; j < matrix[ 1 ]; j++ )
    {
        for( int k = 0; k < matrix[ 2 ]; k++ )
        {
            dup += nIndex[ i ] + nIndex[ j ] + nIndex[ k ];
        }
    }
}
P-170613
darko202
» 2018-04-11 12:46:38
1.
Problemem w tym kodzie jest to że używasz zmiennych globalnych
i używasz rekurencji.

modyfikując zmienną globalną w n-tym kroku zmieniasz ją jednocześnie w n-1 krokach poprzedniego wywołania tej funkcji.

napisz funkcję z parametrem
np.
C/C++
int silnia( int n )
{
    return n * silnia( n - 1 )
}



2.
zapoznaj się z techniką debugowania kodu
dzięki temu będziesz mógł śledzić wykonanie programu linia po linii i obserwować stan wszystkich zmiennych.
P-170616
pekfos
» 2018-04-11 16:12:24
kolejne zagnieżdżone lupy
Lupy? W sensie, szkła powiększające..? Albo pisz poprawnie po polsku, albo wybierz sobie inny język. Pisząc tekst z takimi bykami wyrażasz brak szacunku.
P-170619
« 1 »
  Strona 1 z 1