PDA

View Full Version : [C] Qualche difficoltà


Manugal
11-01-2005, 16:59
Ciao a tutti!!!

Sto studiano il C per l'Università ma trovo difficoltà quando devo lavorare con gli indici degli array.

Ad esempio c'è un programma che dice di inizializzare due vettori a e b della stessa lunghezza con n valori interi e di calcolare la somma incrociata degli elementi a[1] + b[n], a[2] + b[n-1],.... e di memorizzarla in un nuovo vettore. Bene. Ora vorrei capire perché l'algoritmo per fare questo è il seguente:

for(i=0; i<n; i++)
c[i]=a[i] + b[n-i-1] <---- questo b[n-i-1] non l'ho capito.

Non si potevano fare per dire due cicli annidati, facendo scorrere il primo in avanti e il secondo indietro?


Poi ad esempio un altro programma mi dice di inizializzare un'array facendo visualizzare alternativamente 0,-3,6,-9,12,-15....
Qui ad esempio non so proprio come dirgli di alternare il segno.

Forse per voi saranno ca##ate e sono sicuro che potrete aiutarmi. Grazie. ;)

cionci
11-01-2005, 18:24
Prova a scriverti su carta i valori degli indici che si susseguono nei vari cicli dei for vedrai che riuscirai a capire come funziona...

Per il secondo ti offro un indizio: basta un for sommando sempre 3...per il segno usa un if...

DanieleC88
11-01-2005, 18:56
Originariamente inviato da Manugal
Ciao a tutti!!!


for(i=0; i<n; i++)
c[i]=a[i] + b[n-i-1] //<---- questo b[n-i-1] non l'ho capito.


Serve a sommare il valore i nella array a con il valore n-1 della array b. In parole povere, somma il primo con l'ultimo, poi il secondo con il penultimo, il terzo con il terzultimo, etc. Quel -1 serve perchè n è il numero degli elementi a partire da 1 (non da zero, come invece vengono salvati nelle array).

Originariamente inviato da Manugal
Non si potevano fare per dire due cicli annidati, facendo scorrere il primo in avanti e il secondo indietro?

Si fa prima così :)

Originariamente inviato da Manugal
Poi ad esempio un altro programma mi dice di inizializzare un'array facendo visualizzare alternativamente 0,-3,6,-9,12,-15....
Qui ad esempio non so proprio come dirgli di alternare il segno.

val = (val < 0 ? -val + 3 : -(val + 3));

Originariamente inviato da Manugal
Forse per voi saranno ca##ate e sono sicuro che potrete aiutarmi. Grazie. ;)
Cod.

cionci
11-01-2005, 19:02
Originariamente inviato da DanieleC88
Cod.
Non era meglio farceloa rrivare da solo invece di dare il codice...anche se probabilmente l'operatore condizionale ancora non l'avrà visto...

Manugal
11-01-2005, 19:57
Grazie per le risposte.

DanieleC88
12-01-2005, 13:41
Originariamente inviato da cionci
Non era meglio farceloa rrivare da solo invece di dare il codice...anche se probabilmente l'operatore condizionale ancora non l'avrà visto...
Noooo, io non ho mandato nessun codice! È una cosa mia, non ha niente a che fare con la programmazione. :)