|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 21
|
[C++] Cancellazione elemento di un array
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
proponi una tua implementazione
__________________
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 21
|
Non ne ho idea.Daltronde se l'avessi avuta non avrei chiesto...
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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.
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 21
|
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... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Devi spostare tutti gli elementi successivi allo zero indietro di una posizione, non solo quello successivo.
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 21
|
Cionci mi sai dire l algoritmo??grazie
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Edit: non si fanno soluzioni per gli esercizi
__________________
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho già detto
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 21
|
Non è un esercizio caro,e solo una curiosita di un principiante,grazie lo stesso !
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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 ? |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
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
__________________
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo che rimane... Al massimo alla fine usi realloc
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Esatto.
Resta che gli array non sono la struttura migliore se serve cancellare/inserire/cambiare dimensione. Occorrerebbe usare le liste.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
... o i contenitori della STL, visto che si è fatto riferimento al C++.
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah, non avevo visto che era C++...
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2448
|
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... Ultima modifica di Charlie90 : 16-02-2008 alle 11:33. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:09.



















