Che particolari mi sfuggono in questi programmi?

tenebrikko
Ho questi 2 frammmenti:
I = 0;
while (I < (N-1))
A = A[I+1]
I = I + 1

nella so che sposto indietro tutti gli elementi dell' array ma non capisco perchè l'ultimo elemento rimane invariato..secondo il mio ragionamento l'ultimo posto viene occupato e dal penultimo elemento e l'ultimo va perso; perchè mi sbaglio?
poi
void Q (int a, int b)
int x, y; {int tmp ;
x:=0; tmp=a;
y:=1; a=b;
Q(x, y); b=tmp;}

printf (“(%d,%d)\n”, x, y);

qui non riesco a capire perchè l'output è uguale all'input... a me viene il contrario!

grazie molte!

Risposte
Omega1
Ciao! Ho letto i tuoi quesiti, e posso risponderti:

1) Il ciclo è impostato per operere sugli elementi dell' array dal primo a penultimo; di conseguenza l' ultimo elemento rimane invariato.
Per ovviare, ad esempio, potresti salvare il primo elemento in una variabile, e successivamente al ciclo, inserirlo nell' ultima posizione.

2) Non ho capito bene quale sia lo scopo di q. Deve scambiare il contenuto tra due variabili?
Se si, allora devi passare gli argomenti per indirizzo, altrimenti le permutazioni rimarranno invariate.

tenebrikko
si è come fa funzione swamp.. xò perchè non cambia nulla? x quale motivo devo usare gli indirizzi?

Omega1
Se passi degli argomenti ad una funzione, il compilatore crea delle variabili locali. Queste ultime risultano indipendenti a quelle passate alla chiamata del sottoprogramma.
Se vuoi una modifica permanente, allora devi passare l' indirizzo di memoria delle variabili in questo modo:

 void q(int *a, int *b)  
{
    int temp=*a;
    *a=*b;
    *b=temp;
}


Alla chiamata:

...
   q(&x, &y);
...

tenebrikko
urca grazie! non mi ricordavo questo particolare.. buona giornata!

Bonham1
si è come fa funzione swamp


Solo per rigor di definizione, la funzione si chiama swap. :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.