Newsgroup: it.comp.lang.c
Titolo: questo esercizio...

in verità si tratta di c++ ma al livello di un corso di 32 ore, quindi
senza OOP, in pratica il sottoinsieme del c++ che coincide col c (tra
l'altro dico fin da subito che non abbiamo nemmeno trattato i
puntatori).
Il testo recita:"Realizzare una funzione di nome SPOSTA che, presi
come suoi parametri un array V di numeri reali, la sua dimensione n ed
un intero i, sposta tutti gli elementi di V di una posizione verso
destra a partire dalla posizione di indice i. La funzione provvede
anche a modificare opportunamente la dimensione di V. 
Ora mi chiedo: ma è possibile che una funzione modifichi la lunghezza
di un array già inizializzato in memoria? 
Certo, il modo di esprimersi degli informatici è famoso allo stesso
modo delle barzellette sugli ingegneri, ma fatto sta che io sto
esercizio non riesco proprio a capirlo...
Forse è talmente implicito ed ellittico che intende che la funzione
SPOSTA debba creare ex novo un nuovo array e che magari restituisca la
dimensione di questo nuovo array? E non poteva scriverlo direttamente?
Boh...

 Boh...
Potresti fare in modo da riportare nel vettore l'ultimo (quello che viene
spinto, diciamo, fuori dal vettore), in modo da sostituire il posto
lasciato vuoto dallo spostamento. Se ad esempio dalla posizione 3 devi
spostare in avanti gli elementi, succede che nella posizione 3 inizia a
crearsi una cella vuota, allora, nella sua posizione inizi a spostare
quello della posizione precedente, e cosi' via con tutti quelli che
vengono prima. Cosi' si libera la prima cella, che sostituiresti con
l'elemento spinto fuori dal vettore. Non so se mi sono spiegato bene.
Pensa ad un vettore come una struttura circolare. Gli elementi spostati a
destra ritornano dalla sinistra
Franz
-- 
      Teaching OnLine 
Corsi online di programmazione
Php, Asp, C, C++, Visual Basic, Delphi
VBA per Access, Excel
Linux Shell Programming
------------------------------------
http://www.teachingonline.it

 di un array già inizializzato in memoria?
No. Per definizione un 'array' è un blocco di dimensioni fisse.
Nel caso particolare di blocchi allocati via malloc, esiste in C la 
funzione realloc, che concettualmente svolge le seguenti operazioni: 
instanzia un nuovo blocco di memoria delle dimensioni desiderate, copia i 
valori di quello iniziale, rilascia quest'ultimo. Occasionalmente, realloc 
può riutilizzare il blocco iniziale se la memoria contigua che segue è 
utilizzabile. Ma queste condizioni dipendono da caratteristiche interne del 
gestore della memoria dinamica e non devono interessare l'utente.
In generale, l'uso di realloc non ha vantaggi rispetto alla strategia di 
allocare più memoria di quanto serve in quel momento. Anzi, quest'ultima ha 
il vantaggio di consentire un controllo più preciso delle allocazioni e 
facilitare l'ottimizzazione per il compito che deve essere svolto.
Max

 di un array già inizializzato in memoria? 
No.  E' presumibile che chi ha scritto la traccia si stesse riferendo a 
un puntatore.  In quel caso l'operazione da fare è banale.

 destra ritornano dalla sinistra
Non è ciò che viene richiesto dalla traccia.

> Non è ciò che viene richiesto dalla traccia.
Si hai ragione, mi ero saltato la frase "La funzione provvede
anche a modificare opportunamente la dimensione di V"
Frank
