Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB.NET] Creazione generatore numeri casuali

    Sto facendo un piccolo programma che crea codice HTML automaticamente, alcune funzioni mi servono che siano casuali e che debbano essere visualizzate a schermo (cioé in mezzo al codice in una textbox apposita).

    In poche parole il risultato a schermo dovrebbe venire dopo una serie di numeri generati casualmente, per esempio, creo 4 numeri casuali, assegnati ad altrettante variabili, il numero più basso viene eliminato e gli altri 3 vengono sommati, allora ho scritto una cosa del genere:

    codice:
     Dim pvran1x As New Random        Dim pvran2x As New Random
            Dim pvran3x As New Random
            Dim pvran4x As New Random
            Dim pvran1 As Integer
            Dim pvran2 As Integer
            Dim pvran3 As Integer
            Dim pvran4 As Integer
            Dim pvsom1 As Integer
            Dim pvsom2 As Integer
            Dim pvsom3 As Integer
            Dim pvsom4 As Integer
            Dim PV As String
            pvran1 = pvran1x.Next(1, 7)
            pvran2 = pvran2x.Next(1, 7)
            pvran3 = pvran3x.Next(1, 7)
            pvran4 = pvran4x.Next(1, 5)
            If pvran1 > pvran2 Then
                pvsom1 = pvran1
            ElseIf pvran1 > pvran3 Then
                pvsom1 = pvran1
            ElseIf pvran1 > pvran4 Then
                pvsom1 = pvran1
            Else
                pvran1 = 0
                pvsom1 = 0
    
    
            End If
            If pvran2 > pvran1 Then
                pvsom2 = pvran2
            ElseIf pvran2 > pvran3 Then
                pvsom2 = pvran2
            ElseIf pvran2 > pvran4 Then
                pvsom2 = pvran2
            Else
                pvran2 = 0
                pvsom2 = 0
    
    
            End If
            If pvran3 > pvran1 Then
                pvsom3 = pvran3
            ElseIf pvran3 > pvran2 Then
                pvsom3 = pvran3
            ElseIf pvran3 > pvran4 Then
                pvsom3 = pvran3
            Else
                pvsom3 = 0
                pvran3 = 0
    
    
            End If
    
    
            If pvran4 > pvran1 Then
                pvsom4 = pvran4
            ElseIf pvran4 > pvran2 Then
                pvsom4 = pvran4
            ElseIf pvran4 > pvran3 Then
                pvsom4 = pvran4
            Else
                pvsom4 = 0
                pvran4 = 0
            End If
            PV = pvsom1 + pvsom2 + pvsom3 + pvsom4


    e apparentemente sembra funzionare, ma alla fine compaiono sempre gli stessi numeri (e mi pare pure nella stessa frequenza, cosa che mi ha fatto pensare che il mio manuale dice castronate e questo è un generatore di numeri pseudo-casuali, ma va be') e il risultato di tutta l'operazione è sempre un multiplo di 3, e questa cosa non riesco a comprenderla. Qualcuno potrebbe aiutarmi, ci sto sbattendo la testa da un pomeriggio e sono quasi sicuro che il problema sia la creazione dei numeri casuali, visto che il sistema di controlla sembra giusto (comunque l'ho postato pure per avere qualche consiglio pure su di esso xD)


    Grazie mille in anticipo per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da TizioRandom Visualizza il messaggio
    Sto facendo un piccolo programma che crea codice HTML automaticamente, alcune funzioni mi servono che siano casuali e che debbano essere visualizzate a schermo (cioé in mezzo al codice in una textbox apposita).

    In poche parole il risultato a schermo dovrebbe venire dopo una serie di numeri generati casualmente, per esempio, creo 4 numeri casuali, assegnati ad altrettante variabili, il numero più basso viene eliminato e gli altri 3 vengono sommati, allora ho scritto una cosa del genere:

    codice:
     Dim pvran1x As New Random        Dim pvran2x As New Random
            Dim pvran3x As New Random
            Dim pvran4x As New Random
            Dim pvran1 As Integer
            Dim pvran2 As Integer
            Dim pvran3 As Integer
            Dim pvran4 As Integer
            Dim pvsom1 As Integer
            Dim pvsom2 As Integer
            Dim pvsom3 As Integer
            Dim pvsom4 As Integer
            Dim PV As String
            pvran1 = pvran1x.Next(1, 7)
            pvran2 = pvran2x.Next(1, 7)
            pvran3 = pvran3x.Next(1, 7)
            pvran4 = pvran4x.Next(1, 5)
            If pvran1 > pvran2 Then
                pvsom1 = pvran1
            ElseIf pvran1 > pvran3 Then
                pvsom1 = pvran1
            ElseIf pvran1 > pvran4 Then
                pvsom1 = pvran1
            Else
                pvran1 = 0
                pvsom1 = 0
    
    
            End If
            If pvran2 > pvran1 Then
                pvsom2 = pvran2
            ElseIf pvran2 > pvran3 Then
                pvsom2 = pvran2
            ElseIf pvran2 > pvran4 Then
                pvsom2 = pvran2
            Else
                pvran2 = 0
                pvsom2 = 0
    
    
            End If
            If pvran3 > pvran1 Then
                pvsom3 = pvran3
            ElseIf pvran3 > pvran2 Then
                pvsom3 = pvran3
            ElseIf pvran3 > pvran4 Then
                pvsom3 = pvran3
            Else
                pvsom3 = 0
                pvran3 = 0
    
    
            End If
    
    
            If pvran4 > pvran1 Then
                pvsom4 = pvran4
            ElseIf pvran4 > pvran2 Then
                pvsom4 = pvran4
            ElseIf pvran4 > pvran3 Then
                pvsom4 = pvran4
            Else
                pvsom4 = 0
                pvran4 = 0
            End If
            PV = pvsom1 + pvsom2 + pvsom3 + pvsom4


    e apparentemente sembra funzionare, ma alla fine compaiono sempre gli stessi numeri (e mi pare pure nella stessa frequenza, cosa che mi ha fatto pensare che il mio manuale dice castronate e questo è un generatore di numeri pseudo-casuali, ma va be') e il risultato di tutta l'operazione è sempre un multiplo di 3, e questa cosa non riesco a comprenderla. Qualcuno potrebbe aiutarmi, ci sto sbattendo la testa da un pomeriggio e sono quasi sicuro che il problema sia la creazione dei numeri casuali, visto che il sistema di controlla sembra giusto (comunque l'ho postato pure per avere qualche consiglio pure su di esso xD)


    Grazie mille in anticipo per l'aiuto
    Ciao. Scusa la domanda ma.. con che linguaggio lavori? cosa c'entra HTML? No perché, senza entrare troppo il merito al tuo programma, se tu salvassi il risultato della generazione dei numeri casuali in un array, o una list, faresti molto prima a trovare il minore, ad eliminarlo e a sommare i restanti.. Così, per dire...

  3. #3
    Quote Originariamente inviata da TizioRandom Visualizza il messaggio
    ... il numero più basso viene eliminato e gli altri 3 vengono sommati...
    Scusa, ma non ho capito il senso della cosa: non ti basta generare un solo numero random? Che senso ha eliminare il più basso e sommare gli altri tre? Vuoi generare un "super-random"?

  4. #4
    Come che sia... a mio parere l' errore concettuale è quello di aver creato 4 oggetti random, inizializzati con lo stesso fattore temporale (a meno forse di qualche milionesimo di secondo).

    I numeri generati dovrebbero pertanto essere uguali... e sommando 3 valori uguali ne consegue che la somma sarà per forza un multiplo di 3.

    Genera un solo oggetto random (pvran1x) e, SE PROPRIO TI SERVONO 4 VALORI DIVERSI (che non capisco il perché, ma non vedo nemmeno tutto il codice quindi non metto lingua) sostituisci il codice con:

    pvran1 = pvran1x.Next(1,7)
    pvran2
    = pvran1x.Next(1,7)
    pvran3
    = pvran1x.Next(1,7)
    pvran4
    = pvran1x.Next(1,5)

    In questo modo i 4 numeri dovrebbero ben uscire diversi.
    Ultima modifica di eziogsv; 18-06-2014 a 21:48

  5. #5
    se tu salvassi il risultato della generazione dei numeri casuali in un array, o una list, faresti molto prima a trovare il minore, ad eliminarlo e a sommare i restanti.. Così, per dire...
    Effettivamente non ci avevo pensato... grazie del consiglio

    Come che sia... a mio parere l' errore concettuale è quello di aver creato 4 oggetti random, inizializzati con lo stesso fattore temporale (a meno forse di qualche milionesimo di secondo).

    I numeri generati dovrebbero pertanto essere uguali... e sommando 3 valori uguali ne consegue che la somma sarà per forza un multiplo di 3.

    Genera un solo oggetto random (pvran1x) e, SE PROPRIO TI SERVONO 4 VALORI DIVERSI (che non capisco il perché, ma non vedo nemmeno tutto il codice quindi non metto lingua) sostituisci il codice con:

    pvran1 = pvran1x.Next(1,7)
    pvran2
    = pvran1x.Next(1,7)
    pvran3
    = pvran1x.Next(1,7)
    pvran4
    = pvran1x.Next(1,5)

    In questo modo i 4 numeri dovrebbero ben uscire diversi.
    Grazie mille adesso funziona alla perfezione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.