Che particolari mi sfuggono in questi programmi?
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!
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
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.
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.
si è come fa funzione swamp.. xò perchè non cambia nulla? x quale motivo devo usare gli indirizzi?
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:
Alla chiamata:
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); ...
urca grazie! non mi ricordavo questo particolare.. buona giornata!
si è come fa funzione swamp
Solo per rigor di definizione, la funzione si chiama swap.
