PDA

View Full Version : [C++] Cancellazione elemento di un array


Davcarnaby
15-02-2008, 16:01
Salve a tutti.
Qualcuno mi puo aiutare??
mi servirebbe un algoritmo(anche codice c++ se preferite) per eliminare un elemento di un array.
Grazie a tutti

marko.fatto
15-02-2008, 16:02
proponi una tua implementazione ;)

Davcarnaby
15-02-2008, 16:07
Non ne ho idea.Daltronde se l'avessi avuta non avrei chiesto...

cionci
15-02-2008, 16:22
Non è che ti sei spiegato molto bene. Solitamente per eliminare l'elemento i-esimo si sposta l'elemento i+1 al posto i, l'elemento i+2 all'elemento i+1 e così via fino alla fine.

Davcarnaby
15-02-2008, 16:24
for(int i=0;i<n;i++) {
if(a[i]==0)
a[i]=a[i+1];

}

ma cosi ad esempio un array
10203
diventa
12233
e non va...

cionci
15-02-2008, 16:31
Devi spostare tutti gli elementi successivi allo zero indietro di una posizione, non solo quello successivo.

Davcarnaby
15-02-2008, 16:31
Cionci mi sai dire l algoritmo??grazie

marko.fatto
15-02-2008, 16:33
Edit: non si fanno soluzioni per gli esercizi

cionci
15-02-2008, 16:33
Te l'ho già detto ;)

Davcarnaby
15-02-2008, 16:44
Non è un esercizio caro,e solo una curiosita di un principiante,grazie lo stesso !

cionci
15-02-2008, 16:49
In ogni caso data la semplicità dell'algoritmo è bene che ci arrivi da solo.
Se nel modo che hai fatto te sposti un solo elemento...come farai a spostarli tutti ?

marko.fatto
15-02-2008, 16:51
il problema sarebbe che comunque l'ultimo elemento rimane... cioè se ad esempio da 1,0,2,2,4,5 si vuole eliminare lo 0 ci si ritrova con 1,2,2,4,5,5 ma non dovrebbe essere così ma 1,2,2,4,5 :mbe: :stordita:

cionci
15-02-2008, 16:54
Certo che rimane... Al massimo alla fine usi realloc ;)

gugoXX
15-02-2008, 17:17
Esatto.
Resta che gli array non sono la struttura migliore se serve cancellare/inserire/cambiare dimensione.
Occorrerebbe usare le liste.

variabilepippo
15-02-2008, 17:22
... o i contenitori della STL, visto che si è fatto riferimento al C++. :)

cionci
15-02-2008, 17:25
Ah, non avevo visto che era C++...

Charlie90
16-02-2008, 11:25
Un metodo può anche essere quello che cancelli l'elemento che ti interessa dal vettore,poi tramite un contatore per esempio "tot",che tiene traccia del numero di elementi che hai inserito nel vettore(ovviamente devi decrementarlo in base a quanti elementi hai eliminato),sposti l'ultimo elemento presente nel vettore nella posizione di quello che hai eliminato,poi ovviamente riordini...

Esempio :

if (tot<=0)
cout<<"\n Non ci sono elementi!!!";

else
{

for (int i=0; i<tot; i++) //Visualizzo tutti gli elementi del vettore
cout<<i+1<<" ==> "<<elenco[i]<<endl;


do{
cout<<"\n Quale elemento vuoi eliminare?: " ;
cin>>posizione;
}while (posizione<=0 || posizione >tot);

cout<<"\n Sicuro? (s/n): ";
cin>>risp;

posizione--; //per dare la posizione effettiva nel vettore

if (risp=='S' || risp=='s' ) //se l'utente da il si per cancellare
{
for (i=0; i<tot; i++)
elenco[posizione+i]=elenco[posizione+i+1];
}

if (risp=='S' || risp=='s' )
{
cout<<"\n Elemento eliminato...";
tot--; //decremento variabile tot in modo da non fare uscire valori casuali
}

}//fine else se ci sn elementi nel vettore



Dico subito che l'ho fatto in due minuti quindi potrebbero esserci molti errori e poi sicuramente ci sono soluzioni molto più intelligenti rispetto a questa...:D