Oppure

Loading
02/04/08 23:19
dimxasinteger
Problemino:
ho un array, devo generare una funzione/routine che mi elimini il valore dato dall'utente attraverso inputbox.. ho provato in 2 modi e tutti e 2 mi danno il solito risultato: mi elimina 2 elementi e nella visualizzazione, mi lascia un elemento vuoto nel vettore..:
La mia idea era: se trovo un elemento uguale al num cercato dall'utente,lo svuoto con v(i)="" e poi ogni volta faccio il controllo che v(i) sia diverso dal vuoto e riassegno il valore con v(i)=v(i) non è una logica buona? a quanto pare sembra di no :d.. dunque, vi posto ora i miei 2 tentativi (di suicidio! :) ):
    For i = 1 To n
        If cancellami = v(i) Then
            v(i) = ""
            For j = 1 To n
                If v(i) <> "" Then
                    v(i) = v(i)
                    n = n - 1
                End If
            Next j
        End If
    Next i

e il secondo:
    For i = 1 To n
        If cancellami = v(i) Then
            v(i) = ""
            canx = canx + 1
        End If
        If v(i) <> "" Then
            v(i) = v(i)
        End If
    Next i
    n = n - canx

dove "canx" è il contatore degli eliminati, ricordandovi che ogni volta dopo l'eliminazione dell'elemento, faccio via routine e funzione l'ordinamento e la visualizzazione degli elementi in una listbox.. qualcuno ha un ideuzza per risolvere? grazie 1000! :k:
aaa
02/04/08 23:24
dimxasinteger
Il Risultato Della ListBox, Con il vettore V(1,2,3,4,5),eliminando 4 per esempio è:
-1
-2
-3
-
(questi sono gli elementi della listbox ovvero del vettore..)
mi elimina l'ultimo elemento e mi svuota il penultimo a quanto pare.. pure con il debug di f8 passo passo non ci ho capito niente.. Help 8-|
Ultima modifica effettuata da dimxasinteger 02/04/08 23:27
aaa
03/04/08 14:26
gantonio
Partiamo da un concetto

v(i) = v(i)

e' una istruzione assolutamente inutile.

Specifica meglio il problema ... intanto il vettore e' di tipo stringa o numerico?
E poi che vuol dire "eliminare" un elemento per te? Devi solamente azzerarlo/svuotarlo o eliminare il numero di elementi e scorrere tutto il contenuto successivo ?
aaa
03/04/08 22:01
dimxasinteger
we grazie!
mi ci sono 1po ingegnato e ho trovato la soluzione:
    For i = 1 To n
        If canc = i Then
            vet(i) = vet(n)
            If n <> 1 Then
                n = n - 1
                ReDim Preserve vet(1 To n)
                Else
                ciao = MsgBox("Il Minimo Di Elementi di Un Vettore E' 1!!", vbExclamation, "Errore Cancellazione")
            End If
        End If
    Next i


cmq intendevo appunto l'eliminazione di un elemento del vettore e quindi lo scorrimento degli elementi successivi con il "restringimento" del vettore stesso di tante posizioni quante sono le cancellazioni. grazie 1000 !:k:
aaa
04/04/08 10:12
P4p3r0g4
manca il redim finale allora.
aaa
04/04/08 10:23
dimxasinteger
si mancava solo quello alla fine, e la logica giusta era:
sostituisco l'ultimo elemento con l'eliminato e ridimensiono il vettore, ordinandolo all'uscita (in un altra routine), ho voluto postare il codice usato per aiutare in futuro chi lo cerca,visto che pure googleando 1 settimana, non ho trovato niente e mi ci so voluto ingegnare e sbatterci il capo :D ho fatto male? :k:
aaa