La lista è interna (lista/array) o esterna al sorgente (db)?
In entrambi i casi, partendo dall'esempio di @Star-Dust puoi creare un ciclo che legge la lista e aggiorna una variabile numerica che controlla la percentuale.
Ammesso che tu abbia 174 tessere in totale, cosa fai? Conti quante volte hai la numero 34 e ne calcoli la percentuale? Un lavoraccio!
Meglio il listone. Inserisci "al buio" le tessere che hai collezionato e poi procedi con l'estrazione (preceduta o meno dalla mischiata).
Ragazzi io lavoro, poco ma lavoro... dopo di questo arrangiatevi
B4X:
'Il totale ovviamente dev'essere cento
Dim M As Map = CreateMap("Arazzio":30,"Tanino":12,"Iaffio":23,"Currau":10,"Turi":15,"Ianu":5,"Pieppu":5)
Dim Perc As Int = Rnd(1,101)
Dim TargetMax As Int = 0
For Each Nome As String In M.Keys
TargetMax=TargetMax + M.Get(Nome)
If Perc<=TargetMax Then
Log(Nome)
Exit
End If
Next
anche cosi se vuoi controllare il limite minimo e non uscire dal ciclo con Exit ma farlo tutto (non necessario)
B4X:
'Il totale ovviamente dev'essere cento
Dim M As Map = CreateMap("Arazzio":30,"Tanino":12,"Iaffio":23,"Currau":10,"Turi":15,"Ianu":5,"Pieppu":5)
Dim Perc As Int = Rnd(1,101)
Dim TargetMin As Int = 0
Dim TargetMax As Int = 0
For Each Nome As String In M.Keys
TargetMax=TargetMax + M.Get(Nome)
If Perc>TargetMin And Perc<=TargetMax Then Log(Nome)
TargetMin=TargetMax
Next
Diciamo che le tessere in totale sono 100,
Ogni utente compra il numero che vuole, quindi avro Carlo 5, marco 36, e cosi via,
Ogni lista ha 100 tessere e ognuno acquista quello che vuole, e poi estrazione tipo il suggerimento di @Star-Dust , ma con la lista e le % ( n. Tessere) dinamico.
Diciamo che le tessere in totale sono 100,
Ogni utente compra il numero che vuole, quindi avro Carlo 5, marco 36, e cosi via,
Ogni lista ha 100 tessere e ognuno acquista quello che vuole, e poi estrazione tipo il suggerimento di @Star-Dust , ma con la lista e le % ( n. Tessere) dinamico.
Ragazzi io lavoro, poco ma lavoro... dopo di questo arrangiatevi
B4X:
'Il totale ovviamente dev'essere cento
Dim M As Map = CreateMap("Arazzio":30,"Tanino":12,"Iaffio":23,"Currau":10,"Turi":15,"Ianu":5,"Pieppu":5)
Dim Perc As Int = Rnd(1,101)
Dim TargetMax As Int = 0
For Each Nome As String In M.Keys
TargetMax=TargetMax + M.Get(Nome)
If Perc<=TargetMax Then
Log(Nome)
Exit
End If
Next
anche cosi se vuoi controllare il limite minimo e non uscire dal ciclo con Exit ma farlo tutto (non necessario)
B4X:
'Il totale ovviamente dev'essere cento
Dim M As Map = CreateMap("Arazzio":30,"Tanino":12,"Iaffio":23,"Currau":10,"Turi":15,"Ianu":5,"Pieppu":5)
Dim Perc As Int = Rnd(1,101)
Dim TargetMin As Int = 0
Dim TargetMax As Int = 0
For Each Nome As String In M.Keys
TargetMax=TargetMax + M.Get(Nome)
If Perc>TargetMin And Perc<=TargetMax Then Log(Nome)
TargetMin=TargetMax
Next
Non è più sensato che fai una Map (o Lista) con numero tessera e nome acquirente (e se uno acquista piu tessere nella map Sara inserito tante volte quante Tessere ha Acquistato) e un RND per il numero delle tessere?
B4X:
Dim Tessere as Map = CreateMap (1,"Arazzio",2:"Ciccio")
Dim TesseraEstratta As Int = Rnd(0,Tessere.Size)
Log(Tessere.Get(TesseraEstratta)
Si potrebbe fare anche con una Lista se le tessere sono numerate progressivamente da 1 a 100
B4X:
Dim Tessere as List = Array as string ("Arazzio","Ciccio")
Dim TesseraEstratta As Int = Rnd(0,Tessere.Size)
Log(Tessere.Get(TesseraEstratta)
Capito, è una classica riffa.
Hai 100 tagliandi ed ognuno ne compra quanti ne vuole. Poi estrai il numero vincente.
Se acquisto tutti i tagliandi, vinco di sicuro ma ho speso più del valore del premio. Però, vuoi mettere la soddisfazione.. heheh
Nella realtà mi è capitato due volte di seguito alla riffa natalizia organizzata dal portiere del mio palazzo.
Contavo sul "non c'è due senza tre" per il terzo anno, ma è andata male.
ps: era un modo per consentirgli un minimo guadagno extra e volentieri gli cedevo gran parte del cesto di prodotti vinti
Capito, è una classica riffa.
Hai 100 tagliandi ed ognuno ne compra quanti ne vuole. Poi estrai il numero vincente.
Se acquisto tutti i tagliandi, vinco di sicuro ma ho speso più del valore del premio. però, vuoi mettere la soddisfazione.. heheh
Nella realtà mi è capitato due volte di seguito alla riffa natalizia organizzata dal portiere del mio palazzo.
Contavo sul "non c'è due senza tre" per il terzo anno, ma è andata male.
ps: era un modo per consentirgli un minimo guadagno extra e volentieri gli cedevo gran parte del cesto di prodotti vinti
La riffa è una truffa
lo so, è solo fuffa
tu vuoi che io spenda
perchè a te renda
prodotti scadenti
per clienti dementi
fammi uno sconto
illumina il mondo
Dal singolo "uè fra' " di prossima pubblicazione..heheh
La riffa è una truffa
lo so, è solo fuffa
tu vuoi che io spenda
perchè a te renda
prodotti scadenti
per clienti dementi
fammi uno sconto
illumina il mondo
Dal singolo "uè fra' " di prossima pubblicazione..heheh
Non è più sensato che fai una Map (o Lista) con numero tessera e nome acquirente (e se uno acquista piu tessere nella map Sara inserito tante volte quante Tessere ha Acquistato) e un RND per il numero delle tessere?
B4X:
Dim Tessere as Map = CreateMap (1,"Arazzio",2:"Ciccio")
Dim TesseraEstratta As Int = Rnd(0,Tessere.Size)
Log(Tessere.Get(TesseraEstratta)
Si potrebbe fare anche con una Lista se le tessere sono numerate progressivamente da 1 a 100
B4X:
Dim Tessere as List = Array as string ("Arazzio","Ciccio")
Dim TesseraEstratta As Int = Rnd(0,Tessere.Size)
Log(Tessere.Get(TesseraEstratta)
Si, si potrebbe fare anche cosi, ma pensavo fosse piu pulito inserire il numero di tessere acquistate da Tanino, e da carlo, e poi con l'algoritmo come mi hai consigliato sopra, estrarre il nome vincente. Vedo di convertire il tuo esempio da mappa a lista, perche le leste vorrei salvarle in un file csv, e poi caricare la lista ed elaborare il vincente.
Si, si potrebbe fare anche cosi, ma pensavo fosse piu pulito inserire il numero di tessere acquistate da Tanino, e da carlo, e poi con l'algoritmo come mi hai consigliato sopra, estrarre il nome vincente. Vedo di convertire il tuo esempio da mappa a lista, perche le leste vorrei salvarle in un file csv, e poi caricare la lista ed elaborare il vincente.
Quindi volvevi fare un estrazione mettendo insieme le tessere delle persone che ne acquistano più di uno .... quindi volevi fare il presidente del CCCS ?
Ma invece di tutto questo fastidio, non potresti utilizzare questa semplice funzione?
B4X:
'Estrae il nome del vincitore
Private Sub Estrazione(mylist as list)
Log("Il vincitore è: Xfood")
'parte opzionale
for j=0 to mylist.size-1
log($"${mylist.get(j)} hai perso, sfigato!"$)
next
end sub
ps: vi ho già detto che qui piove e sembra che sia sera? che due....
E' una sorta di pesca scolastica, ogni premio ha 100 tessere, e acquisti le tessere che vuoi,
Hai 10 premi, quindi 10 liste, e poi tramite generatore casuale estrai il vincitore per ogni lista
Aaaah, scolastica. Allora devo cambiare il rap di cui sopra....
Sogno gastronomico in aula anni '70
In piedi, solo alla lavagna
penso, ma oggi che se magna?
fisso l'indomita equazione
e sogno la colazione.
Pesa tanto sto gessetto
di salame più di un etto
rimedio ancora un sette
già conto le mie fette
Al banco son seduto
nulla ho ancor bevuto
Suona forte la campanella
arriva la mia ... (vi risparmio la volgare rima che, in dialetto, indica la ragazza)
D'accordo, è un po' forzato, ma scrivevo mentre ero al telefono.
ps: se non torna il sole, sono rovinato..
Il numero di tessere lo so gia a priori,
Ma come modifico questo codice,
Per sostituire per esempio il 30 di Carlo con 15, oppure con 10 , visto che questo numero lo so, ma e' scritto su una lista?
RND(0,100)
If A>=0 AND A<30 Then log(mylist(0))
If A>=30 AND A<50 Then log(mylist(1))