Domanda:
inserire/eliminare un elemento da un vettore in linguaggio c?
Federica
2011-09-20 13:40:04 UTC
salve a tutti!!! avrei bisogno di un super aiuto!! sto preparando un esame di informatica e devo creare dei programmi in linguaggio c. volevo sapere le istruzioni necessarie per eliminare o inserire un elemento in un vettore. ad esempio trovo il massimo e voglio eliminarlo e stampare un nuovo vettore ovviamente piu piccolo senza che vi sia all'interno il numero stabilito come massimo. oppure voglio inserire uno zero dopo ogni elemento maggiore di 5,ad esempio.
grazie mille a tutti!! confido nel vostro aiuto!!
Tre risposte:
anonymous
2011-09-20 14:01:59 UTC
devi usare la funzione realloc, che realloca una quantità di memoria (inferiore o superiore) al puntatore, poi inserire "a mano" i valori
BluNotte
2011-09-20 23:28:10 UTC
Scusa il tecnicismo, ma devi spiegarci meglio come vuoi gestire la memoria.



Parliamo di array in stack o in heap? (stack = int numeri[]; heap = malloc(....))

Stai disaccoppiando capacità e dimensione o queste coincidono?



Purtroppo (e per fortuna), dettagli come questi, in C, sono gestiti dal programmatore. Quindi, devi farci capire, con esempi o con parole, cosa vuoi.
?
2011-09-21 10:43:05 UTC
se fossi in te dopo aver trovato il numero grande lo eliminerei dal vettore spostandolo in ultima posizione e spostando tutti gli altri membri di conseguenza...



per fare ciò ti consiglio un bubble sort che è particolarmente semplice da capire...

praticamente tu trovi l'indice del numero maggiore e poi da quell'indice fino alla fine dell'array continui a scambiare gli elementi dell'array con questo ciclo:



int bubble_sort(int *vect,int max,int index){



int i, temp;

for(i=index;i
temp =vect[i];

vect[i]= vect[i+1];

vect[i+1]= temp;

}



}



per usare questo sort devi modificare in questo modo la tua funzione per trovare il massimo:



int FindMax(int *vect,int dim){

int max,i,segnaPosto;

for(max=i=0;i<10;i++){

if(max<= vect[i]){

max=vect[i];

segnaPosto=i;

}

}

bubble_sort(vect,dim,segnaPosto);



return max;

}



e ovviamente alla fine per stampare l'array devi decrementare il suo numero massimo di elementi, ecco il main.



int main (){

int i , vect[10];

for(i=0;i<10;i++)

scanf(" %d",&vect[i]);

for(i=0;i<10;i++)

printf(" %d",vect[i]);

printf("\nil numero + grande è: %d\n",FindMax(vect,10));

for(i=0;i<9;i++)

printf(" %d",vect[i]);



}



se invece vuoi veramente eliminare quell'elemento hai bisogno di nozioni di puntatori abbastanza avanzate...

in primis devi saper usare le malloc e saper indicizzare un puntatore....

io ti posso postare il codice con le malloc se vuoi:



# include

# include

# include

//variabile globale elem descrive quanti cosi stanno in un array

int ELEM = 10;

int FindMax(int *vect,int dim);int bubble_sort(int *vect,int max,int index);

int main (){



int i , *vect;

// invece di creare un array creo un puntatore a int chiamato vect:

// un puntatore può essere indicizzato come un array se legato ad un area di memoria abbastanza grande

//poi usa la funzione malloc per linkarlo allo spazio di memoria abbastanza grande...

vect = (int *) malloc(sizeof(int) *ELEM );

for(i=0;i
scanf(" %d",&vect[i]);



for(i=0;i
printf(" %d",vect[i]);



printf("\nil numero + grande è: %d\n",FindMax(vect,10));

for(i=0;i
printf(" %d",vect[i]);

getch();

}



int FindMax(int *vect,int dim){

int max,i,segnaPosto;

for(max=i=0;i<10;i++){

if(max<= vect[i]){

max=vect[i];

segnaPosto=i;

}

}

bubble_sort(vect,dim,segnaPosto);



return max;

}



int bubble_sort(int *vect,int max,int index){



int i, temp;

for(i=index;i
temp =vect[i];

vect[i]= vect[i+1];

vect[i+1]= temp;

}

// la funzione realloc redefinisce la grandezza dello spazio di memoria di vect

// in questo modo elimino l'ultimo elemento dell array

ELEM--;

realloc(vect,sizeof(int) *ELEM );



}


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...