Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET]Generare numeri non casuali ma con determinate istruzioni
Forum - C# / VB.NET - [VB.NET]Generare numeri non casuali ma con determinate istruzioni - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Nekra49 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/12/2012

Segnala al moderatore
Postato alle 16:09
Giovedì, 27/12/2012
Testo quotato

Postato originariamente da nessuno:

Testo quotato

non riesco soltanto a generare



Per generare valori random ti hanno già detto cosa usare ... classe http://msdn.microsoft.com/en-us/library/system.random.aspx


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...

PM Quote
Avatar
Nekra49 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/12/2012

Segnala al moderatore
Postato alle 16:10
Giovedì, 27/12/2012
Testo quotato

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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:14
Giovedì, 27/12/2012
Testo quotato

Postato originariamente da Nekra49:

Testo quotato

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à.
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 15:37
Venerdì, 28/12/2012

   Mmmmm

Codice sorgente - presumibilmente VB.NET

  1. ' Brute Force number
  2.  
  3.    For i as int32= 1 to 9 step+1
  4.  
  5.          For j as int32= 1 to 9 step+1
  6.  
  7.                For x as int32= 1 to 9 step+1
  8.  
  9.                         For y as int32= 1 to 9 step+1
  10.  
  11.                         next y
  12.  
  13.                next x
  14.  
  15.           next j
  16.  
  17.    next i






If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 17:33
Venerdì, 28/12/2012
Ma!
Tu hai semplicemente annidato 4 cicli for, ma di fatto non si è generato nulla.

Sicuramente esistono sistemi più semplici ed efficaci.

PM Quote
Avatar
Nekra49 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/12/2012

Segnala al moderatore
Postato alle 11:12
Sabato, 29/12/2012
Testo quotato

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...

PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 13:44
Sabato, 29/12/2012
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

  1. Dim rnd As New Random()
  2. Dim iRnd As Integer
  3.  
  4. 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

  1. Dim sRnd As String
  2. 'com questa funzione se il numero è ad esempio 254, diventa "0254" in formato stringa
  3. 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

  1. 'semplice funzione per contare quante volte si ripete un carattere in una stringa
  2.   Private Function CountChar(ByVal sString As String, chChar As Char) As Integer
  3.     Dim mc As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(sString, chChar)
  4.     Return mc.Count
  5.   End Function




Ultima modifica effettuata da ampeg il 29/12/2012 alle 14:06
PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 17:59
Sabato, 29/12/2012
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

  1. Dim rnd As New Random()
  2. Dim iRnd As Integer
  3. Dim lo As New List(Of String)
  4.  
  5. While lo.Count < 4
  6.   'generazione del numero casuale
  7.   iRnd = rnd.Next(0, 9)
  8.  
  9.   If (lo.Contains(iRnd.ToString) = False) Then
  10.     lo.Add(iRnd)
  11.   End If
  12.  
  13. End While
  14.  
  15. 'numero generato senza cifre doppie
  16. Dim sNumber = String.Join("", lo.ToArray)


Ultima modifica effettuata da ampeg il 29/12/2012 alle 18:01
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo