Cancellazione elementi Array in C

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
franzolo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 365
Iscrizione: martedì 20 febbraio 2007, 14:34
Località: Domani a casa tua

Cancellazione elementi Array in C

Messaggio da franzolo »

Salve ragazzi, devo svolgere un esercizio in C.
Senza starvi a dire che devo fare, vorrei sapere come si possono cancellare gli elementi di un vettore in C.
L' esercizio lo devo svolgere conoscendo solo funzioni e vettori...quindi niente puntatori, ricorsione etc....
Come posso fare?
Vi ringrazio in anticipo!
So svolgere l' esercizio in un' altra maniera, ma voglio riuscirci anche in questo modo!
Grazie a tutti!
Avatar utente
franzolo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 365
Iscrizione: martedì 20 febbraio 2007, 14:34
Località: Domani a casa tua

Re: Cancellazione elementi Array in C

Messaggio da franzolo »

L' idea mia principale sarebbe quella di usare una funzione che riceva questo vettore, quindi passarlo per riferimento in modo da modificare il vettore, e poi far ritornare il vettore modificato senza l' elemento che mi serve...
Che ne dite?
Il problema ovviamente è che non so applicare questa cosa!
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: Cancellazione elementi Array in C

Messaggio da thelo »

forse non ho capito bene...
hai detto di lavorare in C, quindi parto dall'idea che per vettore intendi un array(in C++ il vettore è simile ma più potente).
Considera che un array in C è SEMPRE un indirizzo, ti basterà passarlo semplicemente, e alla fine della funzione sarà modificato
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: Cancellazione elementi Array in C

Messaggio da ryuujin »

thelo ha scritto: forse non ho capito bene...
hai detto di lavorare in C, quindi parto dall'idea che per vettore intendi un array(in C++ il vettore è simile ma più potente).
Considera che un array in C è SEMPRE un indirizzo, ti basterà passarlo semplicemente, e alla fine della funzione sarà modificato
cosa intendi per cancellare?

gli elementi di un array in C non possono essere "cancellati", puoi solo modificarne il valore...

r.
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
franzolo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 365
Iscrizione: martedì 20 febbraio 2007, 14:34
Località: Domani a casa tua

Re: Cancellazione elementi Array in C

Messaggio da franzolo »

No, ora vi spiego, voglio cancellare un elemento da un array (in C), in modo che per esempio se ho questo array V={1,2,3,4,5}, se devo togliere per esempio il 2, avrò V={1,3,4,5}.
Quindi un array con un elemento in meno, e così via se mi devo togliere un al altro elemento.
Una cosa simile so che si può svolgere con le liste, ma io lo posso fare conoscendo solo funzioni e vettori.
Se siete sicuri che non si possa fare mi metterò l' anima in pace!
Vi ringrazio in anticipo per le vostre risposte!
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: Cancellazione elementi Array in C

Messaggio da thelo »

l'array è il peggior sistema per fare queste cose. E effettivamente per cancellare intendevo "resettarne" il valore.
Devi ricorrere ad una lista tipo

Codice: Seleziona tutto

struct list {
int valore;
struct list *next_p;
struct list *prec_p;
};
C'è spreco di memoria ma è enormemente più veloce
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: Cancellazione elementi Array in C

Messaggio da thelo »

pardon...mi ero già dimenticato del primo post...non vuoi usare puntatori...

Codice: Seleziona tutto

#define VALORE_NULLO -1

elimina(int lista[], int dimensione_array, int valore)
{
   int i;

  for (i = 0; i < dimensione_array; i++)
    if (lista[i] == valore)
    {
        for (; i < dimensione_array - 1;i++)
          lista[i] = lista[i+1];
        lista[dimensione_array - 1] = VALORE_NULLO;
        i++;
    }
}
L'array deve inizialmente contenere solo VALORE_NULLO.
Non l'ho provata, sicuramente c'è qualche errore  ;)

funzione solo per interi positivi, perchè comunque devi rinunciare a un possibile numero che verrà gestito come VALORE_NULLO.

Se non ti va bene, e vuoi che l'array venga ridimensionato è un'altra cosa...che però fa uso di puntatori

(b2b)
Ultima modifica di thelo il mercoledì 10 ottobre 2007, 21:36, modificato 1 volta in totale.
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
pegasus_1987
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 314
Iscrizione: mercoledì 25 ottobre 2006, 4:40

Re: Cancellazione elementi Array in C

Messaggio da pegasus_1987 »

secondo me una idea potrebbe essere di spostare gli elementi successivi a qll k vogliamo cancellare una posizione indietro..e poi dare all'ultimo valore dell'array il valore NULL...così dovrebbe cancellarsi lo spazio in memoria e quindi anke il puntatore all'indirizzo
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: Cancellazione elementi Array in C

Messaggio da ryuujin »

pegasus_1987 ha scritto: secondo me una idea potrebbe essere di spostare gli elementi successivi a qll k vogliamo cancellare una posizione indietro..e poi dare all'ultimo valore dell'array il valore NULL...così dovrebbe cancellarsi lo spazio in memoria e quindi anke il puntatore all'indirizzo
no,non si cancella lo spazio in memoria.

Un array viene allocato in memoria e viene liberato solo all'uscita del programma (o all'uscita dal suo scope). Se imposti a NULL il contenuto degli elementi di un array, non liberi spazio in memoria. Quegli elementi continuano ad esistere fisicamente e conterrano il valore NULL.

r.
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
andyoso
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 720
Iscrizione: venerdì 20 luglio 2007, 1:17
Località: Napoli

Re: Cancellazione elementi Array in C

Messaggio da andyoso »

secondo me una idea potrebbe essere di spostare gli elementi successivi a qll k vogliamo cancellare una posizione indietro..e poi dare all'ultimo valore dell'array il valore NULL...così dovrebbe cancellarsi lo spazio in memoria e quindi anke il puntatore all'indirizzo
no,non si cancella lo spazio in memoria.
Hai ragione, ma, almeno per quello che so, non si può cancellare lo spazio in memoria perchè se l'array l'hai inizializzato di lunghezza n questo resterà di questa lunghezza per tutta la durata del programma (correggetemi se sbaglio).

Quindi quoto la risposta di pegasus_1987 ;)
Avatar utente
franzolo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 365
Iscrizione: martedì 20 febbraio 2007, 14:34
Località: Domani a casa tua

Re: Cancellazione elementi Array in C

Messaggio da franzolo »

Innanzitutto ringrazio tutti voi per il vostro aiuto!
Fa davvero molto piacere...
Il valore NULL devo far finta di non conoscerlo, anche perchè se non sbaglio si introduce con le liste questo argomento...ora vedo la soluzione proposta da Thelo (che ringrazio ovviamente!)...Ragazzi vi farò sapere!
(b2b)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti