PDA

Visualizza la versione completa : [C] Incremento di una variabile


UltraBeginner
03-10-2006, 10:37
Ciao ragazzi, dopo aver fatto funzionare la funzione per attraversare il dannato labirinto, stavo smanettando un po su quest ultima e ho visto una cosa:

Con il codice seguente il programma non funziona:

void scopriuscita(char matrice[12][12], int x,int y)
{


stampa(matrice);

wait (0.1);
matrice[x][y]='x';
if(x==0)
{
system("pause");
return;
}
/* dx */
else
{
if(matrice[x][y+1]=='.')
{
y++;
scopriuscita(matrice,x,y);
}
// down
if(matrice[x+1][y]=='.')
{
x++;
scopriuscita(matrice,x,y);
}
// left
if(matrice[x][y-1]=='.')
{
y--;
scopriuscita(matrice,x,y);
}
// up

if(matrice[x-1][y]=='.')
{
x--;
scopriuscita(matrice,x,y);
}
matrice[x][y]='.';

}

}

mentre con questo codice funziona:
void scopriuscita(char matrice[12][12], int x,int y)
{


stampa(matrice);

wait (0.1);
matrice[x][y]='x';
if(x==0)
{
system("pause");
return;
}
/* dx */
else
{
if(matrice[x][y+1]=='.')
{
scopriuscita(matrice,x,y+1);
}
// down
if(matrice[x+1][y]=='.')
{
scopriuscita(matrice,x+1,y);
}
// left
if(matrice[x][y-1]=='.')
{
scopriuscita(matrice,x,y-1);
}
// up

if(matrice[x-1][y]=='.')
{

scopriuscita(matrice,x-1,y);
}
matrice[x][y]='.';

}

Ora mi chiedo: perche nel primo caso, quando faccio incrementare o decrementare le variabili prima di chiamare la funzione il programma non funziona mentre nel secondo caso quando incremento e decremento direttamente nella chiamata tutto funziona?

:master: :master: :master: :master: :master: :master:

andbin
03-10-2006, 12:07
Originariamente inviato da UltraBeginner
Ora mi chiedo: perche nel primo caso, quando faccio incrementare o decrementare le variabili prima di chiamare la funzione il programma non funziona mentre nel secondo caso quando incremento e decremento direttamente nella chiamata tutto funziona? Premetto che non so come deve comportarsi, in generale, il tuo software ma vedo che fai 4 test distinti per up/down/left/right. Per distinti intendo dire che sono (dovrebbero essere) indipendenti, cioŔ il verificarsi di una delle 4 situazioni non dovrebbe influenzare gli altri test.
Per˛ quando fai x++ o y++, ecc... tu in realtÓ influenzi gli altri test!!! PerchÚ hai cambiato il valore di x/y. Quando invece passi x+1, y-1, ecc... alla funzione, non alteri il valore x/y ma passi solo un nuovo valore modificato.

UltraBeginner
03-10-2006, 12:22
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa giusto!!!! Non avevo pensato a questa sottigliezza!!!!!!!!!!!!!!!!!!! :dh˛: :dh˛: :dh˛: :dh˛: :dh˛: :dh˛: :dh˛: :dh˛:

Cmq in generale il mio software (al 90% per ora) e di tipo "didattico", per la precisione sono esercizi del libro "Corso completo di programmazione" di Deitel&Deitel :) :)

Grazie ancora per la dritta!!!!!!!!!!!1

Saluti! :ciauz:

Loading