C++ inserimento di un valore in un array

p4ngm4n
qualcuno può aiutarmi a scrivere questo codice?come faccio? supponendo ke l'array sia già ordinato! plz fatemi sapere

Risposte
codino75
potresti essere piu' chiaro ed esplicito su cosa ti serve?
ciao

p4ngm4n
mi servirebbe un algoritmo per inserire un dato valore in un array ordinato. ad esempio avendo un vettore dato da :
1 3 5 6

considerando val = 4

dovrei avere un vettore con 1 3 4 5 6

Cheguevilla
Conoscendo il numero $n$ di elementi dell'array:
for(i=0;array[i]<x;i++);
temp=array[++i];
array[i]=x;
x=temp;
for(++i;i<=n;i++)
   {
   temp=array[++i];
   array[i]=x;
   x=temp;
   }

p4ngm4n
grazie per l'aiuto ma, provando a compilare non funziona bene!

Cheguevilla
ho usato la sintassi del C, ma credo che sia uguale.
L'importante comunque è che ne capisca il senso.

/*semplicemente, fa girare la variabile i, fintanto che non trova l'elemento del vettore maggiore o uguale a x.*/
for(i=0;array[i]<x;i++);

/*Trovato il punto in cui inserire il numero, sostituisce tutti i successivi, tenendo in una variabile temporanea il valore da spostare:*/
for(;i<=n;i++)
   {
/*Registra su una variabile temporanea il valore del vettore successivo a quello in cui si era fermato (pre-incrementando la variabile)*/
   temp=array[++i];

/*Inserisce nella posizione il valore richiesto.*/
   array[i]=x;

/*Ora, il nuovo valore da inserire nel prossimo passo */
   x=temp;
   } 

TomSawyer1
Cheguevilla, mi sa che devi scrivere temp=array;, senza ++i.

La sintassi del C funziona su ogni compilatore C/C++, quindi mi viene il dubbio che p4ngm4n non abbia dichiarato le variabili.

david_e1
Si a parte un paio di ++i che mi sembrano di troppo il codice di Cheguevilla è ok, basta fare attenzione a distinguere il numero degli elementi dalla dimensione del vettore che deve essere sufficientemente grande da accettare un nuovo inserimento (gli elementi nn inizializzati hanno un valore che dipende dal compilatore...).

Nel caso di vettori dinamici è necessario riallocare l'intero vettore se lo si vuole allungare...

p4ngm4n
le variabili le ho dichiarate, il problema era sul ++i.
grazie

Cheguevilla
Intendete dire che non prende l'incremento se lo metto all'interno di un vettore?

TomSawyer1
Dato che la i a quel punto e' la posizione dove si deve inserire l'intero, la incrementa gia' il for; tu cosi' salti un elemento ad ogni ciclo.

Cheguevilla
Si, hai ragione.
Allora, all'interno del for dovrebbe essere ++i invece di i++, perchè il precedente for si arresta un passo prima.
Oppure, bisogna mettere una condizione <= nel primo for invece che solo <.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.