|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2004
Messaggi: 88
|
[c++]spiegazione di funzione
ciao. ki mi spiega questa funzione elimina_dispari?
Codice:
void leggi_vetint(int V[], int & n) {
cout << "\n Procedura di inserimento del vettore";
cout << "\n Inserisci il riempimento: ";
cin >> n;
cout << "\n Inserisci il vettore. Solo numeri interi positivi: ";
for (int i=0; i<n; i++) {
cout << "\n Elemento di posizione " << i << ": ";
cin >> V[i];
}
cout << "\n Inserimento terminato.";
}
int elimina_dispari(int V[], int & n){
int el=0;
int cont=0;
for (int i=0; i<n; i++)
if (V[i]%2) {
for ( int j=i; j<n-1; j++ )
V[j] = V[j+1];
n--;
cont++;
i--;
}
return cont;
}
void stampa_vetint(const int V [], const int n){
if (n)
for (int i=0; i<n; i++) {
cout << "\n Elemento di posizione " << i << ": ";
cout << V[i];
}
else cout << "\n Il vettore e' vuoto!";
}
Codice:
do {
int vettore[DIM];
int n,ris;
leggi_vetint(vettore,n);
cout << "\n Eliminazione di tutti gli elementi dispari dal vettore.";
ris=elimina_dispari(vettore,n);
}
__________________
"Voi che li avete girati nei giradischi e gridati voi che li avete aspettati ascoltati bruciati e poi scordati..chi erano mai questi Beatles MA CHI ERANO MAI QUESTI BEATLES" |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: May 2005
Messaggi: 118
|
Questa funzione, come si può facilmente intuire dal nome, elimina tutti i numeri dispari dall'array passato ad essa.
I parametri passati sono il vettore V[] e la sua grandezza n (passata per indirizzo perchè il suo valore dovrà essere decrementato ogni volta che viene eliminato un elemento). Il primo for serve a scorrere tutto il vettore. Per ogni elemento viene controllato con un if se esso è dispari, cioè dividendolo per 2 si ottiene resto 1. Se è dispari il valore verrà cancellato mediante un for che sposta tutti gli elementi indietro di una posizione nell'array a partire da quello successivo a quello da cancellare (in questo modo l'elemento da cancellare viene sovrascritto e l'array rimane compatto). Infine viene decrementata la dimensione del vettore (n) e incrementato il contatore degli elementi cancellati. Il decremento della i invece fa in modo che, se è stato cancellato un elemento, venga controllato anche quello che ha preso il suo posto, che altrimenti verrebbe saltato. Infine la funzione restituisce il numero di elementi cancellati |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
La funzione elimina_dispari modifica l'array in modo che alla fine ci siano soltanto numeri interi pari all'interno dell'array. In pratica con il primo for verifica se ogni elemento V[i] è dispari (perché V[i]%2 dà 1 come risultato) e in quel caso "shifta" (sposta) tutti gli elementi successivi all'indietro in modo che l'array si "compatti". Alla fine rimangono solo gli elementi pari. Nota che anche il valore della variabile n (il numero degli elementi) viene scalato man mano (ed essendo n un reference, modifica la variabile passata dal chiamante). Nonostante la funzione elimina_dispari funzioni correttamente, è poco efficiente (deve scalare ogni volta tutti gli elementi successivi). Una funzione molto più pratica ed efficiente è questa: Codice:
void elimina_dispari (int *v, int &n)
{
int i, j=0;
for (i=0; i<n; i++)
if ((v[i] % 2) == 0) // v[i] e` pari?
v[j++] = v[i];
n = j;
}
Ciao.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 12-01-2006 alle 16:53. |
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Dec 2004
Messaggi: 88
|
Quote:
si lo so, ma è solo un lucido della professoressa...mica l'ho fatto io. Cmq grazie ad entrambi per la spiegazione. Forse tra 6 giorni, all'esame riuscirò a combinare qualcosa. GRAZIEEE!!
__________________
"Voi che li avete girati nei giradischi e gridati voi che li avete aspettati ascoltati bruciati e poi scordati..chi erano mai questi Beatles MA CHI ERANO MAI QUESTI BEATLES" |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:32.



















