PDA

View Full Version : [visual baisc]: aiuto in piccolo programma


gidan82
03-05-2009, 11:40
Ciao a tutti non sono esperto di visual basic ma dovrei realizzare la codifica di questo programma:
Realizzare un programma che richieda all'utente 10 numeri interi e che,alla fine della introduzione dei valori, al click sul tasto CMDCONTROLLA stampi a video in opportune label:
1.Quanti e quali sono i valori dispari introdotti.
2.Quanti e quali sono i valori pari introdotti.
Ho già realizzato la GUI ma non sò procedere alla codifica.
http://i177.photobucket.com/albums/w227/gidan82/form-1.jpg

Quest'ultima dovrebbe essere fatta utilizzando un ciclo for..
Di solito non sono uno che va a chiedere aiuto nei forum per le codifiche perchè penso che la miglior cosa sia ricercare da solo ma è veramente urgente..

grazie a chiunque mi aiuti.

P.S. il risultato se pari o dispari andrebbe trovato utilizzando la funzione MOD che calcola il resto di una divisione,quindi se dividendo il numero per 2 il resto è 0 il numero sarà pari se ci sarà il resto sarà dispari.

P.P.S: i controlli sono organizzati (sono array di controlli).

ho realizzato una codifica ma senza il totale...solo che mi da errore:"sub o function non definita" :doh:
ecco:
Private Sub Form_Load()
Dim N (1 to 10) as Integer
Dim TP As Integer //Totale Pari.
Dim TD As Integer// Totale Dispari.
End Sub
-----------------------------------------
Private Sub Cmdcontrolla_Click()
For i = 1 To 10
N(i) = Val(Text1(i).Text)
Next i
If N Mod 2 = 0 Then
Lblpari(i).Caption = Str(N(i))
Else
Lbldispari(i).Caption = Str(N(i))
Next i
End if
End Sub

MarcoGG
03-05-2009, 13:02
Private Sub Form_Load()
Dim N (1 to 10) as Integer
Dim TP As Integer //Totale Pari.
Dim TD As Integer// Totale Dispari.
End Sub
-----------------------------------------
Private Sub Cmdcontrolla_Click()
For i = 1 To 10
N(i) = Val(Text1(i).Text)
Next i
If N Mod 2 = 0 Then
Lblpari(i).Caption = Str(N(i))
Else
Lbldispari(i).Caption = Str(N(i))
Next i
End if
End Sub


Vedo subito 2 grossi errori :

1. L'array e le due variabili create nell'evento Load della Form vengono create e distrutte alla fine dell'evento stesso. Le devi dichiarare Private a livello di Form, ossia fuori dall'evento, ( ed eventualmente le inizializzi nel Load... ) affinchè siano visibili da ogni subroutine della Form...

2. C'è UN "For i" e DUE "Next i"...

gidan82
03-05-2009, 13:36
Ho cambiato il codice ora mi da questo errore: "errore di compilazione:impossibile trovare il metodo o il membro dei dati"

Private Sub Command1_Click()
For I = 1 To 10
numero(I) = Val(txtN.Text(I))
valore(I) = numero(I) Mod 2
If valore(I) = 0 Then
lblpari(I).Caption = Str(numero)
Else
lbldispari(I).Caption = Str(numero)
Next I
End If
End Sub

Private Sub Form()
Dim numero(1 To 10) As Integer
Dim valore As Integer
End Sub

ti ho zippato il programmino se ti va di controllarmelo mi faresti un piacere enorme :help:

MarcoGG
03-05-2009, 15:09
Ok, come lo farei io :

Private Sub Command1_Click()

Dim numero As Integer
Dim valore As Integer
Dim contaPari As Integer
Dim contaDispari As Integer

Dim i As Integer
For i = 0 To 9
numero = Val(txtN(i).Text)
valore = numero Mod 2
If valore = 0 Then
lblpari(i).Caption = Str(numero)
contaPari = contaPari + 1
Else
lbldispari(i).Caption = Str(numero)
contaDispari = contaDispari + 1
End If
Next i

Label3.Caption = contaPari
Label4.Caption = contaDispari

End Sub

Nessuna dichiarazione a livello di Form o nel Load, nessun array superfluo... ;)

gidan82
03-05-2009, 20:20
Ok, come lo farei io :

Private Sub Command1_Click()

Dim numero As Integer
Dim valore As Integer
Dim contaPari As Integer
Dim contaDispari As Integer

Dim i As Integer
For i = 0 To 9
numero = Val(txtN(i).Text)
valore = numero Mod 2
If valore = 0 Then
lblpari(i).Caption = Str(numero)
contaPari = contaPari + 1
Else
lbldispari(i).Caption = Str(numero)
contaDispari = contaDispari + 1
End If
Next i

Label3.Caption = contaPari
Label4.Caption = contaDispari

End Sub

Nessuna dichiarazione a livello di Form o nel Load, nessun array superfluo... ;)
TU SEI UN GRANDE,ora ho capito cosa intendevi sulla dichiarazione delle variabili...mannaggia a me.. :D
e se volessi fare in modo che i numeri(pari o dispari) che mano mano vengono inseriti nelle label vengano elencati in modo ordinato? nel senso che non vengano saltate delle label ma che i numeri vengano elencati uno dietro l'altro?
http://i177.photobucket.com/albums/w227/gidan82/form2.jpg
come sono ora vengono saltate delle label... come si può fare?

MarcoGG
04-05-2009, 08:05
Allora in quel caso, con una minima modifica al codice precedente...:

Dim numero As Integer
Dim valore As Integer
Dim contaPari As Integer
Dim contaDispari As Integer

Dim i As Integer
For i = 0 To 9
numero = Val(txtN(i).Text)
valore = numero Mod 2
If valore = 0 Then
lblpari(contaPari).Caption = Str(numero)
contaPari = contaPari + 1
Else
lbldispari(contaDispari).Caption = Str(numero)
contaDispari = contaDispari + 1
End If
Next i

Label3.Caption = contaPari
Label4.Caption = contaDispari

;)