Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con ciclo FOR

Ciao a tutti, non riesco a risolvere questo problema sicuramente
banalissimo.
L'algoritmo è questo:
Ho 21 persone alle quali devo assegnare una pausa in una determinata fascia
oraria. Le fascie orarie sono 5 e ad esse ho assegnato una variabile:
fascia1, fascia2, fasciaN...
Per ogni fascia oraria ci sono dei posti a disposizione.
Fascia1 : 3 posti
Fascia2 : 4 posti
Fascia3 : 6 posti
Fascia4 : 4 posti
Fascia5 : 4 posti
Ho la necessità di assegnare casualmente ad ogni persona una pausa
rispettando le disponibilità per ogni fascia.
Ho pensato ad un ciclo FOR di questo tipo ma penso che non sia corretto in
quanto i posti non vengono tutti assegnati:
Public Fascia1 As Integer
Public Fascia2 As Integer
Public Fascia3 As Integer
Public Fascia4 As Integer
Public Fascia5 As Integer
Public IDagente As Integer
Private Sub Command1_Click()
Dim X
Fascia1 = 3
Fascia2 = 4
Fascia3 = 6
Fascia4 = 4
Fascia5 = 4
For IDagente = 0 To 20
Randomize
X = Int((5 * Rnd) + 1)   ' Genera un valore casuale compreso tra 1 e 5.
Select Case X
Case 1
If Fascia1 > 0 Then
Fascia1 = Fascia1 - 1
lblFascia1 = Fascia1
lblAgente(IDagente) = X
End If
Case 2
If Fascia2 > 0 Then
Fascia2 = Fascia2 - 1
lblFascia2 = Fascia2
lblAgente(IDagente) = X
End If
Case 3
If Fascia3 > 0 Then
Fascia3 = Fascia3 - 1
lblFascia3 = Fascia3
lblAgente(IDagente) = X
End If
Case 4
If Fascia4 > 0 Then
Fascia4 = Fascia4 - 1
lblFascia4 = Fascia4
lblAgente(IDagente) = X
End If
Case 5
If Fascia5 > 0 Then
Fascia5 = Fascia5 - 1
lblFascia5 = Fascia5
lblAgente(IDagente) = X
End If
End Select
Next IDagente
End Sub
Il problema sorge per esempio quando, durante il ciclo, al Case 4 Fascia4 =
0 passando al Case 5 anche Fascia5 = 0. Il ciclo a quel punto dovrebbe
tornare al Case 1 ma questo non penso sia possibile.
Vi ringrazio per la disponibilità.
Ciao

 ha scritto nel messaggio
news:_mwEd.665990$
35.26...@news4.tin.it
aspettando la soluzione matematica in una formula......
una cosa del genere
do
generanumero
trova la fascia
es.
blocco
fascia1piena=true?
    si...non fare nulla
    no ...assegna.....
        assegnati=assegnati+1
        la fasciaèpiena?SI..flag Fascia1piena=true
fineblocco
loop until assegnati=21 o quello che vuoi
piccola considerazione
la casualità è un po povera con il rnd.....si tratta di numeri pseudocasuali
eh!
e comunque corri il rischio che uno sfigato capiti sempre in fascia1!
Non sarebbe meglio fare una rotazione ....a tutti capita tutte le fascie?
-- 
------------------------------------------------
Sito web: 
http://www.martek.it

 rispettando le disponibilità per ogni fascia.
Spero che non si tratti di persone reali perchè nel qual caso non potrai
assegnare nulla "random" ma, soprattutto in termini di turno / riposo
tutto è previsto contrattualmente.
Se si tratta di persone reali prendi in considerazione l'ipotesi di
calcolare e assegnare un periodo di rotazione che preveda in certo lasso
di tempo il fatto che ciascuna persona goda di riposi in tempi e modi
uguali a tutti gli altri e/o la periodica rotazione e posizionamento in
tutte le fasce.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Scusa per il ritardo, ma ti ringrazio, prendendo spunto dal tuo suggerimento
ho risolto il problema.
Grazie ancora.
Ciao
"Wodka40" <chi...@me.uff> ha scritto nel messaggio
news:VwwEd.388328$b5.18...@news3.tin.it...
