Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
02/02/08 18:54
cesco_fran
Salve a tutti vengo direttamente dalla sezione di Visual Basic, con una idea "pazza"

stavo pensando ad un programmino semplice (all'apparenza) ma complesso (nei contenuti) ;-)

Public Class V100
Private Sub Estrazione_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Estrazione.Click
Dim N1, N2, N3, N4, N5, N6 As Integer
Dim Uguale As Boolean

Do
Uguale = True

Randomize()

N1 = Int(90 * Rnd() + 1)
Num1.Text = N1 & " "

N2 = Int(90 * Rnd() + 1)
Num2.Text = N2 & " "

N3 = Int(90 * Rnd() + 1)
Num3.Text = N3 & " "

N4 = Int(90 * Rnd() + 1)
Num4.Text = N4 & " "

N5 = Int(90 * Rnd() + 1)
Num5.Text = N5 & " "

N6 = Int(90 * Rnd() + 1)
Num6.Text = N6 & " "


If N1 = N2 Or N1 = N3 Or N1 = N4 Or N1 = N5 Or N1 = N6 Or N2 = N3 Or N2 = N4 Or N2 = N5 Or N2 = N6 Or N3 = N4 Or N3 = N5 Or N3 = N6 Or N4 = N5 Or N4 = N6 Or N5 = N6 Then Uguale = False

Loop Until Uguale

End Sub

End Class

Questo codice è per in visual basic 2005 express edition.
Su un form, c'è un bottone che aziona un processo, che inserisce 6 numeri diversi (*) da 1 a 90 in ogni textbox.

La prima domanda che vi porgo, visto che non sono sicurissimo è la seguente:

Realmente riesce (con il'if che ho fatto) a non estrarre un numero uguale?

Grazie per le risposte.

Vi dico subito che sono molto più di un principiante (ma molto di più :D), che mi sono trovato benissimo su questo sito e che...
il progetto è un working progress! :D

ad esempio, una volta constatato che non verranno estratti numeri uguali, il primo filtro (uno dei tanti) che vorrò aggiungere, con un checkbox fatto per l'occasione, quello di poter decidere quanti numeri pari ci debbano essere su 6 numeri :D

grazie per il momento a tutti. Ciao
Ultima modifica effettuata da cesco_fran 02/02/08 19:03
aaa
03/02/08 8:54
Il Totem
Sei molto più di un principiante, ma non conosci gli array e usi le funzioni di VB6 :rotfl:
Public Function Extract6() As Byte()
    'Usa un array di sei elementi e non sei variabili
    Dim N(5) As Byte
    'Usa la classe Random e non le funzioni prese dal VB classico
    Dim Rnd As New Random
    Dim Number As Byte

    For I As Byte = 0 To 5
        'Se l'array lo contiene già, ne estrae un altro
        Do
            'Un numero tra 1 e 90
            Number = Rnd.Next(1, 91)
        Loop While Array.IndexOf(N, Number) >= 0
            N(I) = Number
    Next

    Return N
End Function

Questa funzione estrae 6 numeri casuali diversi in forma di array.
Per mettere solo numeri pari, potresti estrarre solo numeri tra 1 e 45 e poi moltiplicarli per 2, oppure aumentare o diminuire di uno tutti i dispari.
Ultima modifica effettuata da Il Totem 03/02/08 8:55
aaa
03/02/08 12:56
cesco_fran
Ciao, speravo che rispondevi!

(si vede che sto leggendo la tua guida? :P )

...scherzo! ..ti ringrazio innanzitutto per la disponibilità, e che ho anticipato e te marcato (:D), era un progetto che avevo iniziato con il VB, poi da là "m'hanno cacciato" e mi hanno invitato a continuare di qua (forse mi caccierai anche te? :D).

Cmq il programmino che ho fatto, sulla carta l'avevo pensato in questo modo perchè poi, in un secondo momento, volevo aggiungere dei checkbox con altri sotto programmi, che permettevano di pilotare l'estrazione.
(dove ti posso mandare il programmino funzionante, così vedi anche la struttura che avevo fatto, in maniera da renderti conto meglio della pazzia!)

Tornando al progetto..

struttura base semplice (estrae 6 numeri casuali, diversi tra loro e li mette in 6 boxtext).
successivamente, attivando i checkbox, vengono ad inserirsi in questa struttura base, ulteriori filtri (come accennato, ad esempio il poter scegliere quanti numeri pari da un minimo di 1 ad un massimo di 6, inserendo il valore in un textbox).

Fatto ed inserito nel circuito questo filtro, passerò ad un altro (ad esempio, il poter scegliere quanti numeri primi avere nella sestina)

Fatto ed inserito nel circuito questo filtro,
passerò ad un altro (ecc ecc)

in pratica voglio creare una struttura base (come quella proposta), e mettere degli if per ogni checkbox, che se attivati, devono filtrare la sestina estratta dal programma base, ed in base all'esito del controllo, o procede alla visualizzazione, o passa al seguente checkbox, o ripete l'estrazione.

grazie ancora..
aaa
04/02/08 8:32
Il Totem
Prima segui il mio codice per fare quello che hai chiesto. Poi, se vuoi continuare, mandami il progetto a nicolo1990[at]yahoo[dot]it. Secondo me, per i filtri potresti usare dei delegate multipli: anche se non sono l'unica soluzione, sono certamente la più sintetica.
aaa
09/02/08 21:25
cesco_fran
Ciao, non ti ho scritto per email perchè non sono arrivato a capo di un bel nulla! :(

Come hai capito, ma anche come non ho vergogna a dirlo, di programmazione non ci capisco un gran che!

Ho letto la tua guida e sono d'accordissimo sul sostenere il principio di Occam, ma questo va bene a chi già ci capisce un bel pò e non per chi, come me, inizia a "smanettare".

Il codice "stupidissimo" che avevo fatto, era di facile interpretazione ed elementare nella sintassi.

Infatti dopo le dichiarazioni, ho messo un "Do" che estraeva contemporanemente ed inseriva in 6 distinti text.box i numeri (casuali da 1 a 90).

Alla fine, ho inserito un "If" che permette di escludere dalle possibilità (facendo ripartire il "Do";) che in un Textbox ci sia lo stesso numero di un altro Textbox.

Ora, capisco che il codice può essere migliore, e in questo mi hai dato un consiglio.

Ma nel codice che hai proposto, tra le tantissime cose che devo ancora capire, non so come far abbinare un numero in un textbox!!

Sarò ignorante, forse molto!
Ma non so come inserire in un ciclo, come quello proposto da te, il luogo (fisico) dove far inserire ogni numero!

Ho provato ad aggiungere prima del "Next" il comando Num1.Text = Number & " "

poi al bottone ho inserito la parola "Extract6()"
E... come la più normale delle ipotesi, nel textbox1 viene visualizzato ad ogni click del bottone, un numero da 1 a 90!

Come primo dubbio mi è venuto in mente quello che nel textbox vengono visualizzati tutti e 6 i numeri, per prova ho allargato il textbox (visto che nell'interfaccia che avevo fatto era grande per 2 caratteri), ma non c'è stato nessun altro numero se non quello visualizzato!
E ho pensato che ha riscritto sopra per 6 volte un numero diverso e facendomi vedere solo l'ultimo dei 6 numeri estratti!

La domanda che mi faccio è la seguente:

Come faccio a far inserire ogni "N" in una textbox distinta e definita?

grazie a chiunque voglia aiutarmi! :)

PS ..ci provo da 5 giorni, ma anche andando a leggere e vedere altri programmi per prendere spunto, non ho trovato un "h"! :(
aaa
17/02/08 16:56
Il Totem
Sto vedendo che ci sono moltissimi che non conoscono le funzioni, eppure mi sembrano abbastanza semplici.
TextBox1.Text = Extract6()

Se hai più textbox, segnate da un indice finale (ad es. "TextBox2";), puoi usare questo codice:
For I As Byte = 1 To 10 'Ammettiamo 10 TextBox
  Me.Controls("TextBox" & I).Text = Exract6()
Next
aaa