Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343

    [VB6] Calcolo della media

    Ciao a tutti! Ho un form con 30 textbox. Tramite un pulsante commandbutton, viene calcolata la media dei valori numerici contenuti in queste 30 textbox e il risultto viene visualizzato in una label.

    Avrei ora una domanda: è possibile individuare quante tra queste textbox non contengono valori (cioè sono vuote) e quindi di conseguenza calcolare la media solo su quelle non vuote?

    (Avevo pensato di chiedere all'utente su quante textbox fare la media con una casella di riepilogo, ma è un però un casino e mi sembra una soluzione poco bella......)
    Grazie in anticipo!
    Stefano

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    ciao,
    puoi fare una serie di if controllando isnull(text1.text) = false
    poi decidi tu come memorizzare quali text sono vuote etc.
    dovendo fare una media, potresti (è un po rozzo come metodo) mettere una serie di if x ciascun text e se non è vuoto, sommare il valore inserito nel text in una variabile, contare quante text sono editate (incrementando un'altra variabile) e poi dividere il totale dei valori per il numero di text piene.

  3. #3
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao stee!
    Che tipo di media devi calcolare?
    Aritmetica (A+B+C)/3
    Se si tratta dell'aritmetica il problema, per così dire, è al denominatore, perche se A=0 al numeratore non ti da fastidio.
    Quindi potresti fare un ciclo FOR per verificare se A<>""; B<>"" ...
    con un contatore che nel caso affermativo si incrementa di 1.
    Ciao.
    LM

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Ciao, grazie a tutti per le risposte, che veloità!

    Per Gaullo
    Non ho mai usato quella funzione (non sapevo neppure che esistesse!) e sono un po' in difficoltà....

    Per LMondi
    Sì, la media che devo fare è matematica! Dunque tu mi consogli di usare un ciclo for che individui praticamente quante sono le textbox vuote e di conseguenza fare la media in base a quelle piene, giusto?
    Stefano

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    361
    ops, scusami, x le textbox basta controllare come suggerito da Lmondi, se il text1.text <> ""

    x il resto il mio suggerimento è comunque ok, che è la versione "grezza" di quello di lmondi

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Questo è il codice d'esempio:
    codice:
    Private Sub Command1_Click()
        Dim dblSomma As Double
        Dim sngDenom As Single
        ' Calcolo della media aritmetica di 4 elementi:
        Dim dblSommaES As Double
        Dim dblSomES(0 To 3) As Double
        'Indice di FOR:
        Dim i As Integer
        Dim i2 As Integer
            dblSommaES = 0
            dblSomES(0) = Val(Text1.Text)
            dblSomES(1) = Val(Text2.Text)
            dblSomES(2) = Val(Text3.Text)
            dblSomES(3) = Val(Text4.Text)
        For i = 0 To 3
            dblSommaES = dblSommaES + dblSomES(i)
            If dblSomES(i) <> 0 Then
                sngDenom = 1 + sngDenom
            End If
            dblSomma = dblSommaES
        Next
    
        ' Per evitare la divisione per 0:
        If dblSomma <> 0 Then
            TextMedia.Text = Format((dblSomma / sngDenom), "#,##0.00")
            ElseIf dblSomma = 0 Then
            TextMedia.Text = 0
        End If
    End Sub
    Però fai attenzione che la media di cui trattasi dovrebbe includere tutte le componenti che sono al numeratore. Quindi se al numeratore ci sono 4 elementi, anche se uno è =0 il denominatore deve essere =4.
    L'esempio, comunque, è fatto sulle tue indicazioni.
    Ciao.
    LM

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Scusa, togli la dichiarazione di variabile Dim i2 As Integer , non serve; volevo fare in un altro modo
    e modifica l'ultima parte del codice, così:
    codice:
    ' Per evitare la divisione per 0:
        If dblSomma <> 0 And sngDenom <> 0 Then
            TextMedia.Text = Format((dblSomma / sngDenom), "#,##0.00")
            ElseIf dblSomma = 0 Then
            TextMedia.Text = 0
        End If
    LM

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In realta', in questi casi si usano array di controlli (in questo caso array di textbox) per poter scrivere il minimo di codice ed efficiente.

    In piu', il discorso di evitare i textbox vuoti non ha senso se la media viene considerata *sempre* tra tutti i textbox. Lo ha solamente se si impone che i textbox vuoti *non debbano* partecipare al calcolo della media ...

    Ma queste sono cose che bisogna stabilire prima con certezza ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Grazie LMondi, il codice che mi hai dato è perfetto, ti sono proprio debitore!
    Grazie anche a tutti gli altri utenti che mi hanno comunque aiutato......

    Originariamente inviato da oregon
    In realta', in questi casi si usano array di controlli (in questo caso array di textbox) per poter scrivere il minimo di codice ed efficiente.

    In piu', il discorso di evitare i textbox vuoti non ha senso se la media viene considerata *sempre* tra tutti i textbox. Lo ha solamente se si impone che i textbox vuoti *non debbano* partecipare al calcolo della media ...

    Ma queste sono cose che bisogna stabilire prima con certezza ...
    Hai ragione oregon...Comunque a parte il fatto che ora ho risolto il problema col codice di LMondi, io che volevo era proprio che non tutti i textbox dovessero partecipare *necessariamente* al calcolo della media.....
    Ciaoooo
    Stefano

  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Oregon,
    mi sembra inutile ribadire quando già evidenziato e poi può anche darsi che l'impostazione sia matematicamente corretta, inoltre l'amico stee potrebbe anche non conoscere la tecnica da te accennata.

    Allora stee, se puoi senza smontare tutto il lavoro già fatto, eccoti un esempio di array di controlli (in questo caso array di textbox), che indubbiamente è più performante ed elegante:
    codice:
    Private Sub Command2_Click()
        
        Dim y As Integer
        Dim dblSomma As Double
        Dim sngDenom As Single
        For y = Text5.LBound To Text5.UBound
            If Val(Text5(y).Text) <> 0 Then
                dblSomma = Text5(y) + dblSomma
                sngDenom = 1 + sngDenom
            End If
        Next y
        
        If dblSomma <> 0 And sngDenom <> 0 Then
            TextMedia2(4).Text = Format((dblSomma / sngDenom), "#,##0.00")
            Else: TextMedia2(4).Text = 0
        End If
    End Sub
    Ciao, un saluto anche ad oregon.
    LM

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.