Newsgroup: it.comp.lang.visual-basic
Titolo: Per i più esperti..........almeno credo

Ciao a tutti, allora non riesco a venirne a capo, mi date una mano?
Ho un Array(1 to 200) con un ipotetico valore 10 in ogni casella.
Adesso devo decrementare, a cominciare dalla casella 20, i valori contenuti
fino ad 1.
Esempio:
Le unltime tre caselle sono 10 10 10
dopo il primo passaggio 10 10 9
etc
alla 2° tornata 10 9 9
quindi facendo in modo che l'ultima casella non abbia mai un valore
superiore a quella che la precede.
Fino a qui una gran cazzata vero? :-)
Adesso viene il bello...
Mettiamo di non sapere a priori quante caselle dell'Array utilizziamo
quindi na volta ne riempiremo 5
la prossima 130............
Come faccio a costruire una procedura che non prende riferimento dalla
quantità di caselle riempite e che comunque mi decrementi i valori?
Logicamente le caselle a 0 non devono essere prese in considerazione.
Tosto? Bho io non ci sono riuscito in nessun modo. Mi date una dritta?
Saluti Polpo Muschio

"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto nel messaggio
news:9e0mo1$75u$1...@serv1.albacom.net...
| Ho un Array(1 to 200) con un ipotetico valore 10 in ogni casella.
| Adesso devo decrementare, a cominciare dalla casella 20, i valori contenuti
Dalla cella 20 o dalla cella 200????????
| fino ad 1.
| Esempio:
| Le unltime tre caselle sono 10 10 10
| dopo il primo passaggio 10 10 9
| etc
| alla 2° tornata 10 9 9
| quindi facendo in modo che l'ultima casella non abbia mai un valore
| superiore a quella che la precede.
Allora, se ho capito: i decrementi non avvengono nella stessa chimata alla funzione che
aggiorna l'array, ma ad ogni decremento di una singola cella esci dalla funzione, ti
prendi un caffe', ritorni ed esegui il decremento successivo (con il criterio che hai
esposto in maniera molto confusa)...
Giusto?
Se si:
1) ad ogni chiamata di funzione calcoli il valore massimo dell'array (puoi pensare ad
algoritmi efficienti quanto vuoi, ma sempre tutto l'array devi scorrere), e poi scandisci
l'array dal basso scartando i valori che sono inferiori al massimo fino a raggiungere la
cella che contiene questo valore massimo. A sto punto decrementi la cella ed esci dalla
funzione.
2) a quest'ora devi essere cosi' elettrizzato dai caffe' presi che sono sicuro riuscirai a
capire quello che ho scritto... :)))))

E' Vero l'Array bsogna scorrerlo tutto.
Guarda il Reply a FOLLI SISTEMI per maggiori delucidazioni
Saluti
Polpo

 next ' altro giro alto regalo
Non va bene perchè forse mi sono espresso male.
Abbiamo 10 10 10
al primo ciclo 10 10 9
al secondo 10 10 8
e così via fino ad 1 dopodichè
al primo della seconda tornata 10 9 9
al secondo 10 9 8
al terzo 10 9 7
questo indifferendemente dal numero di caselle Array impegnate (che siano 8
o 93 o 172...)
Spero di essere stato più chiaro.
un altra cosa.... se riempio 30 caselle impegno dalla n° 1 alla 30 e non
dalla 200 alla 170
Saluti
Polpo Muschio

"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto
|
| Spero di essere stato più chiaro.
No. Non lo sei stato... :(
Come si deve comportare, ESATTAMENTE, l'algoritmo? Ci hai fornito due esempi, in due post
differenti, uno diverso dall'altro...

| Abbiamo 10 10 10
| al primo ciclo 10 10 9
| al secondo 10 10 8
| e cosě via fino ad 1 dopodichč
Che vuol dire? L'array da tre elementi conterrŕ
10 10 1
dopo i primi nove cicli?
| al primo della seconda tornata 10 9 9
| al secondo 10 9 8
| al terzo 10 9 7
E qui? Come si comporta l'algoritmo?
_____
E' forse questo qui sotto il comportamento dell'algoritmo?
1) 10 10 10
2) 10 10 9
3) 10 9 9
4) 9 9 9
5) 9 9 8
6) 9 8 8
7) 8 8 8
6) 8 8 7
...

al terzo 10 9 7
Scusa, ma questo č un semplice esempio di combinazione di 10 numeri di
classe 3 (se non sbaglio).
Ti rimando al sito di Franco Languasco
http://members.xoom.it/flanguasco/
Eventualmente di passo una sub (derivata dal SW di Franco) che dati n
elementi ne calcola le combinazioni di grippi di k elementi (combinazioni
semplici di n elementi di classe k)
Ciao

| Scusa, ma questo è un semplice esempio di combinazione di 10 numeri di
| classe 3 (se non sbaglio).
|
| Ti rimando al sito di Franco Languasco
|
| 
http://members.xoom.it/flanguasco/
|
| Eventualmente di passo una sub (derivata dal SW di Franco) che dati n
| elementi ne calcola le combinazioni di grippi di k elementi (combinazioni
| semplici di n elementi di classe k)
Se il problema e' di combinatoria, allora POLPO si e' espresso MALISSIMO su quale sia il
problema... :))))

"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto nel messaggio
news:9e0tra$eqm$2...@serv1.albacom.net...

Ok, lasciamici pensare una mezz'ora, e ti trovo la soluzione !
P.S. Questa notte ho fatto baldoria fino alle 2.30 a.m. ed in questo momento
i pensieri si annebbiano :-(

 ha scritto nel messaggio
news:j9VM6.10191$8P3.1...@news1.tin.it...


 wrote in message
j9VM6.10191$8P3.1...@news1.tin.it...

Forse č quello che fa per me . La mia Routine deve fare un calcolo
matematico per avvicinarsi ad un Valore X e per raggiungere lo scopo devo
utilizzare tute le combinazioni possibili e memorizzare la piů adeguata.
Ho scelto di porre la casella 200 (per es.) uguale alla 199 per risparmiare
tempo altrimenti farei per tante volte lo stesso calcolo con i stessi numeri
ma in posizioni diverse. Se il numero di caselle impegnate č basso il tempo
č ininfluente ma per un numero elevato di caselle il problema si sente e
come.
Quella Routine che mi proponevi mi potrebbe interessare.Devo vederla per
giudicare.......
Se vuoi puoi postarmela sul NG oppure spedirla a 
silv...@infinito.it
Attendo con ansia.

 problema... :))))
Perchè mi sono espresso male? E' un problema di combinatoria ma con un
numero di elementi variabile. Ciò ti obbliga a non usare il classico ciclo
FOR.......NEXT in cascata per N elementi che potresti utilizzare per lo
sviluppo di un sistema per la Tris (3 elementi) o Totogol (8 elementi) dove
il numero di combinazioni e fisso (teoricamente perchè puoi comunque
utilizzare combinazioni da 5 per sviluppare una tris con tutto quello che ne
consegue: aumento di colonne per scheda, ecc.)
Ecco forse è proprio questo quello che mi servirebbe.....:((
Saluti
Polpo Muschio

 3) La Bellucci mi ha annebbiato i pensieri (scelta consigliata).
Quando succede a me entra in funzione il ciclo
do until Bellucci.Eof
Slurp...Slurp...
Bellucci.MoveNext
if Bellucci.Eof = True Then Bellucci.MoveFirst
loop
Fino a circa Mezzogiorno (vedi il punto uno)
;D)D)D))D)D)D)

Adesso mi e' molto piu' chiara tutta la situazione,
ma da quanto leggo credo che tu abbia gia trovato altrove la soluzione ai
tuoi problemi.
Quindi non mi resta altro da fare che pensare alla Bellucci (W i newsgroup
ti lasciano il tempo per pensare).
Saluti.
P.S. Comunque ho verificato ed il limite di 60 dimensioni esiste.
MioArray(1,2,3,4,5,6,7,8,....60) as LeQualitaDiMonicaBellucci e' il limite
massimo.
"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto nel messaggio
news:9e2rdd$he8$1...@serv1.albacom.net...


 wrote in message
2o8N6.15500$jp1.1...@news.infostrada.it...


Il PRG va bene ma mi manca il decremento sequenziale delle caselle.
Ciao
Polpo
Polpo Muschio (Ufficio) <Po...@Muschio.it> wrote in message
9e2on1$egg$2...@serv1.albacom.net...


Allora smetto di pensare alla Bellucci e se nel fine dettimana mi viene in
mente qualche cosa te lo faro' sapere.
Ciao e buon Week-end
Michele
"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto nel messaggio
news:9e37kb$el$1...@serv1.albacom.net...


"Polpo Muschio (Ufficio)" <Po...@Muschio.it> ha scritto
| Perchè mi sono espresso male? E' un problema di combinatoria ma con un
| numero di elementi variabile. Ciò ti obbliga a non usare il classico ciclo
| FOR.......NEXT in cascata per N elementi che potresti utilizzare per lo
| sviluppo di un sistema per la Tris (3 elementi) o Totogol (8 elementi) dove
| il numero di combinazioni e fisso (teoricamente perchè puoi comunque
| utilizzare combinazioni da 5 per sviluppare una tris con tutto quello che ne
| consegue: aumento di colonne per scheda, ecc.)
Ok, ho appena finito di scrivere e testare un algoritmo che dovrai adattare al tuo caso
(leggermente + generico di quello che ho risolto io). Sarà veramente banale l'adattamento,
in quanto non devi far altro che "trimmare" gli estremi dell'array, ma nella sostanza
questo e' quello che devi fare...
Ah, un'altra cosa: gli elementi dell'array li scorro da sinistra verso destra, anziche' da
destra verso sinistra. Ma questo non dovrebbe essere un problema.
Option Explicit
Dim A(1 To 5) As Integer
Private Sub Form_Load()
  Dim i As Integer
  For i = 1 To 5
    A(i) = 4
  Next i
  While A(5) > 1
    recurse 1
  Wend
  dumpArray
End Sub
Sub recurse(j As Integer)
  dumpArray
  A(j) = A(j) - 1
  If A(j) = 1 Then
    If j < 5 Then
      recurse j + 1
      A(j) = A(j + 1)
    Else
      A(j) = A(j) - 1
    End If
  End If
End Sub
Sub dumpArray()
  Dim i As Integer
  Dim s As String
  s = ""
  For i = 1 To 4
    s = s & A(i) & " - "
  Next i
  s = s & A(5)
  Debug.Print s
End Sub
_______________________
Qui c'e' la prova di esecuzione... dovrebbe avere l'andamento che hai specificato... se ho
preso un abbaglio (non ho capito quello che chiedevi), allora forse stavo pensando anche
io alla Bellucci... :))))
4 - 4 - 4 - 4 - 4
3 - 4 - 4 - 4 - 4
2 - 4 - 4 - 4 - 4
1 - 4 - 4 - 4 - 4
3 - 3 - 4 - 4 - 4
2 - 3 - 4 - 4 - 4
1 - 3 - 4 - 4 - 4
2 - 2 - 4 - 4 - 4
1 - 2 - 4 - 4 - 4
1 - 1 - 4 - 4 - 4
3 - 3 - 3 - 4 - 4
2 - 3 - 3 - 4 - 4
1 - 3 - 3 - 4 - 4
2 - 2 - 3 - 4 - 4
1 - 2 - 3 - 4 - 4
1 - 1 - 3 - 4 - 4
2 - 2 - 2 - 4 - 4
1 - 2 - 2 - 4 - 4
1 - 1 - 2 - 4 - 4
1 - 1 - 1 - 4 - 4
3 - 3 - 3 - 3 - 4
2 - 3 - 3 - 3 - 4
1 - 3 - 3 - 3 - 4
2 - 2 - 3 - 3 - 4
1 - 2 - 3 - 3 - 4
1 - 1 - 3 - 3 - 4
2 - 2 - 2 - 3 - 4
1 - 2 - 2 - 3 - 4
1 - 1 - 2 - 3 - 4
1 - 1 - 1 - 3 - 4
2 - 2 - 2 - 2 - 4
1 - 2 - 2 - 2 - 4
1 - 1 - 2 - 2 - 4
1 - 1 - 1 - 2 - 4
1 - 1 - 1 - 1 - 4
3 - 3 - 3 - 3 - 3
2 - 3 - 3 - 3 - 3
1 - 3 - 3 - 3 - 3
2 - 2 - 3 - 3 - 3
1 - 2 - 3 - 3 - 3
1 - 1 - 3 - 3 - 3
2 - 2 - 2 - 3 - 3
1 - 2 - 2 - 3 - 3
1 - 1 - 2 - 3 - 3
1 - 1 - 1 - 3 - 3
2 - 2 - 2 - 2 - 3
1 - 2 - 2 - 2 - 3
1 - 1 - 2 - 2 - 3
1 - 1 - 1 - 2 - 3
1 - 1 - 1 - 1 - 3
2 - 2 - 2 - 2 - 2
1 - 2 - 2 - 2 - 2
1 - 1 - 2 - 2 - 2
1 - 1 - 1 - 2 - 2
1 - 1 - 1 - 1 - 2
1 - 1 - 1 - 1 - 1

 wrote in message
G9bN6.1893$bj4....@news1.tin.it...


identificatore per l'elemento dell'Array
brrrrrrrrrr... mai usare Byte!!! mai!!!
per i cicli ci vuole un Long. Fidati.

 ha scritto nel messaggio
news:Xns90A741A3AD9...@127.0.0.1...


Io mi fido, ma puoi spiegarmi meglio ??
