Oppure

Loading
05/10/13 17:50
bading
Saluti a tutti.
Vi scrivo perché non riesco a risolvere il problema di una somma un po particolare di elementi contenuti un array.

Ho un array per esempio con i seguenti dati:
ripetizioni(2,2,3,3,3)

Ho un array di dati :
dati(5,7,2,6,8)

In pratica devo creare un nuovo array somma() che contiene le somme considerando i valori dell'array ripetizioni(), ovvero:
somma(1)=0
somma(2)=5+7=12
somma(3)=2+6+8=16
somma(4)=0
somma(5)=0

Se per esempio l'array ripetizioni fosse: ripetizioni(1,2,2,3,4) l'array somma dovrebbe essere:
somma(1)=5
somma(2)=7+2=9
somma(3)=6
somma(4)=8
somma(5)=0

Il numero degli elementi dell'array è un valore noto.
Dovrei scrivere il codice in vba ma questo poco importa....non riesco proprio a codificare il problema:d


Grazie,
Dario
aaa
05/10/13 18:18
TheDarkJuster
Non ho capito cosa vuoi fare
aaa
05/10/13 19:07
bading
Riprovo a spiegarmi.
Ho un array dati() con i dati che devo sommare e memorizzare nell'array somma().
Devo eseguire le somme guardando al contenuto dell'array ripetizioni(), ovvero nel primo caso ripetizioni(2,2,3,3,3):
1) nell'array ripetizioni() non è contenuto il valore 1 e quindi somma(1)=0
2) nell'array ripetizioni() è contenuto due volte il valore 2 e quindi sommo i primi due elementi di dati()
3) nell'array ripetizioni() è contenuto tre volte il valore 3 e quindi sommo gli ultimi tre elementi di dati()
4) nell'array ripetizioni() non è contenuto il valore 4 e quindi somma(4)=0
5) nell'array ripetizioni() non è contenuto il valore 5 e quindi somma(5)=0

Considerando per esempio il secondo array di esempio ripetizioni(1,2,2,3,4), il ragionamento sarebbe:
1) nell'array ripetizioni() è contenuto una volta il valore 1 e quindi somma(1)=5 (primo elemento di dati())
2) nell'array ripetizioni() è contenuto due volte il valore 2 e quindi sommo i due elementi di dati()
3) nell'array ripetizioni() è contenuto una volta il valore 3 e quindi somma(3)=6
4) nell'array ripetizioni() è contenuto una volta il valore 4 e quindi somma(4)=8
5) nell'array ripetizioni() non è contenuto il valore 5 e quindi somma(5)=0

Spero che ora vada meglio!
Grazie


aaa
06/10/13 8:27
Veramente non è ancora tutto chiaro ...

E se la sequenza fosse (2,1,3,3,3) ?
06/10/13 8:57
bading
Postato originariamente da nessuno:

E se la sequenza fosse (2,1,3,3,3) ?


Non potrebbe essere ripetizioni(2,1,3,3,3), ma ripetizioni(1,2,3,3,3)
Nell'array ripetizioni() i numeri sono sempre ordinati in senso crescente.
In questo caso l'array somma sarebbe:
somma(1)=5
somma(2)=7
somma(3)=2+6+8=16
somma(4)=0
somma(5)=0

Grazie



aaa
06/10/13 9:24
Ma cosa rappresentano quei valori nell'array "ripetizioni"?

Nel caso di (1,2,3,3,3)

perché non è semplicemente

somma(3)=2

Ancora non è chiara la "regola generale" ... dovresti provare a descriverla, magari a partire da una sequenza generica

(a,b,c,d,e)
06/10/13 12:26
lumo
Provo a ricavare il problema dai tuoi esempi:
Si hanno due array, ripetizioni e dati di N elementi;
gli elementi di ripetizioni, x, sono tali che 1 <= x <= N e ordinati in ordine crescente.
gli elementi di dati sono affari qualsiasi che si possono sommare tra di loro.

Sia ripetizioni[ i ] l'i-esimo elemento di ripetizioni(partendo da 1)
somma(n) è uguale alla sommatoria di dati[ripetizioni[x]] dove ripetizioni[x] = n (nel caso non ce ne sia nessuno la somma di zero elementi è appunto zero).
Calcolare somma(n)

Puoi semplicemente usare la ricerca binaria per trovare il primo n che appare in ripetizioni, e l'ultimo n che appare in ripetizioni(in C++ ci sono lower_bound e upper_bound in algorithm, in python bisect_left e bisect_right del modulo bisect... altrimenti sono molto semplici da riscrivere).
Dopodiché fai la somma di tutti gli elementi corrispondenti in dati.
Ultima modifica effettuata da lumo 06/10/13 12:27
aaa
06/10/13 16:26
bading
Postato originariamente da nessuno:

perché non è semplicemente

somma(3)=2

(a,b,c,d,e)


Non può essere somma(3)=2 perché il 3 nell'array ripetizioni(1,2,3,3,3) compare 3 volte e quindi devo sommare 3 numeri dell'array dati().

Sforzarmi di spiegarvi il concetto mi ha portato a ragionare in quest'altro modo, che forse mi avvicina alla soluzione:
dati(1)--->ripetizioni(1)--->codifica 1
dati(2)--->ripetizioni(2)--->codifica 2
dati(3)--->ripetizioni(3)--->codifica 3
dati(4)--->ripetizioni(4)--->codifica 3
dati(5)--->ripetizioni(5)--->codifica 3

A questo punto sommo i dati con la stessa codifica.

Nel caso di ripetizioni(2,2,3,3,3):
dati(1)--->ripetizioni(1)--->codifica 2
dati(2)--->ripetizioni(2)--->codifica 2
dati(3)--->ripetizioni(3)--->codifica 3
dati(4)--->ripetizioni(4)--->codifica 3
dati(5)--->ripetizioni(5)--->codifica 3

A questo punto sommo i dati con la stessa codifica.
Nel mio array somma() al primo posto la somma dei numeri con codifica 1, al secondo posto la somma dei numeri con codifica 2 ecc....




aaa