Nekra49 (Normal User)
Newbie
Messaggi: 13
Iscritto: 27/12/2012
|
Postato originariamente da nessuno:
non riesco soltanto a generare |
|
si conosco quella funzione ma cosi mi genera tutti i numeri... io voglio che mi generi solo numeri con cifre diferse... per esempio non mi deve generare 1233 perche il numero contiene due cifre uguali... Ecco il mio probema... scusate se fini ad ora non sono stato molto chiaro... |
|
Nekra49 (Normal User)
Newbie
Messaggi: 13
Iscritto: 27/12/2012
|
Postato originariamente da Poggi Marco:
Implementa un ciclo che continui a generare numeri casuali, fintanto che le cifre sono diverse. |
non ci avevo proprio pensato sai?? ora provo questo metodo... poi faccio sapere... Ultima modifica effettuata da Nekra49 il 27/12/2012 alle 16:11 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
Postato originariamente da Nekra49:
Postato originariamente da Poggi Marco:
Implementa un ciclo che continui a generare numeri casuali, fintanto che le cifre sono diverse. |
non ci avevo proprio pensato sai?? ora provo questo metodo... poi faccio sapere... |
Mi pareva scontato che dovessi generare valori in un ciclo finché non ottenevi tutte le cifre diverse ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Mmmmm
Codice sorgente - presumibilmente VB.NET |
' Brute Force number For i as int32= 1 to 9 step+1 For j as int32= 1 to 9 step+1 For x as int32= 1 to 9 step+1 For y as int32= 1 to 9 step+1 next y next x next j next i
|
If ok Then GOTO Avanza else GOTO Inizia
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ma!
Tu hai semplicemente annidato 4 cicli for, ma di fatto non si è generato nulla.
Sicuramente esistono sistemi più semplici ed efficaci.
|
|
Nekra49 (Normal User)
Newbie
Messaggi: 13
Iscritto: 27/12/2012
|
Postato originariamente da Poggi Marco:
Ma!
Tu hai semplicemente annidato 4 cicli for, ma di fatto non si è generato nulla.
Sicuramente esistono sistemi più semplici ed efficaci. |
non sono sicuro che col ciclo vada... perche dopo il programma per indovinare i numeri deve eliminarne altri... per esempio... se il computer a me chiede 1234 e gli dico che c'è almeno un numero giusto il programma dovrebbe eliminare tutti i numeri che non contengono almeno uno di quei quattro numeri... perche il ciclo con la funzione random non memorizza tutti i numeri ma li crea al momento... almeno credo sia cosi... |
|
ampeg (Normal User)
Pro
Messaggi: 124
Iscritto: 21/04/2011
|
far indovinare al computer il numero da te scelto però non ha senso poiché eseguirà l'algoritmo che avrai programmato e ti darà la soluzione sicura e immediata...
comincia con la generazione del numero casuale...
come prima cosa devi far generare al programma un numero casuale di 4 cifre, per questo usi la classe Random
Codice sorgente - presumibilmente VB.NET |
Dim rnd As New Random() Dim iRnd As Integer iRnd = rnd.Next(123, 9876) 'questo genera un numero compreso tra 0123 e 9876
|
poi per praticità si formatta il numero in stringa
Codice sorgente - presumibilmente VB.NET |
Dim sRnd As String 'com questa funzione se il numero è ad esempio 254, diventa "0254" in formato stringa sRnd = iRnd.ToString("0000")
|
il passo successivo è quello di verificare se ci sono caratteri doppi nella stringa sRnd, qua ti vengono in aiuto le regular expressions
in pratica fai un loop nel quale fai una verifica per vedere se la tua stringa contiene caratteri doppi, se non ce ne sono tieni buono il numero generato
se ci sono caratteri doppi rigeneri il numero casuale, uscirai dal loop solo se i 4 caratteri della stringa sRnd sono diversi
Codice sorgente - presumibilmente VB.NET |
'semplice funzione per contare quante volte si ripete un carattere in una stringa Private Function CountChar(ByVal sString As String, chChar As Char) As Integer Dim mc As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(sString, chChar) Return mc.Count End Function
|
Ultima modifica effettuata da ampeg il 29/12/2012 alle 14:06 |
|
ampeg (Normal User)
Pro
Messaggi: 124
Iscritto: 21/04/2011
|
oppure un modo più semplice per generare un numero casuale che abbia cifre differenti è usare una lista
generare in un ciclo una serie di numeri casuali da 0 a 9 e aggiungere alla lista la cifra che non è inclusa precedentemente nell lista stessa
Codice sorgente - presumibilmente VB.NET |
Dim rnd As New Random() Dim iRnd As Integer Dim lo As New List(Of String) While lo.Count < 4 'generazione del numero casuale iRnd = rnd.Next(0, 9) If (lo.Contains(iRnd.ToString) = False) Then lo.Add(iRnd) End If End While 'numero generato senza cifre doppie Dim sNumber = String.Join("", lo.ToArray)
|
Ultima modifica effettuata da ampeg il 29/12/2012 alle 18:01 |
|