Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343

    [vb6] problema con medie

    Ciao a tutti, ho scritto un piccolo programmino con VB che calcola le temperature medie rilevate in un mese, ma mi dà dei problemi.
    Dunque, l'interfaccia è così costruita: in una finestra ho una matrice di textbox (31 controlli denominati "Text1(x)"), una label chiamata "media" e un pulsante "Calcola media" nel cui evento clic vi è questo codice che ho scritto io e che apparentemente sembra funzionare:

    codice:
    Dim NUMEROTEXTBOX As Integer
        Dim SOMMAVALORITEXTBOX As Double
        Dim SUQUANTOLAMEDIA As Integer
        	For NUMEROTEXTBOX = 1 To 31
            	If Val(Text1(NUMEROTEXTBOX).Text) <> 0 Then
                	SOMMAVALORITEXTBOX = Text1(NUMEROTEXTBOX).Text + SOMMAVALORITEXTBOX
                	SUQUANTOLAMEDIA = 1 + SUQUANTOLAMEDIA
            	End If
        	Next NUMEROTEXTBOX
        
        If SOMMAVALORITEXTBOX <> 0 And SUQUANTOLAMEDIA <> 0 Then
            media = Format((SOMMAVALORITEXTBOX / SUQUANTOLAMEDIA), "#,##0.00")
            Else: media = 0
        End If
    Il problema è questo. Se butto dentro a caso, magari senza riempire tutte le caselle, dei numeri, la media calcolata è giusta (ho provato a inserire in 15 caselle il valore +1, in altre 15 il valore -1 e lasciarne una vuota e il programma mi dà - giustamente - come risultato 0. Se butto dentro tutti 1 mi dà - giustamente - come risultato 1..... se metto invece i valori di cui mi interessa veramente la media, mi sbaglia il conto. Come è possibile? C'è qualche errore nel codice che ho postato?
    Aiuto!
    Ciao e grazie.
    Ste

  2. #2
    complimenti x i nomi delle variabili

    ricordati ke gli indici partono da 0...prova nel for ad andare da 0 a 30...come fai adesso non ti conta il primo valore e t sballa la media

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Ciao grazie per la risposta. Per i nomi delle variabili, ho dovuto mettere quei nomi stupidi perchè il codice l'ho mostrato anche a dei miei amici che volevano dei nomi espliciti........
    Ho provato a cambiare come hai detto tu, ma l'errore mi viene dato comunque. Tanto per dare un'idea, dovrebbe uscire -1.36 (risultato ottenuto dal calcolo fatto da me con la calcolatrice e ricontrollato almeno dieci volte), invece lui mi dà -1.95....
    Ste

  4. #4
    nei valori ke metti nessuno è 0 vero?xkè in questo caso non lo conta...prova a togliere
    If Val(Text1(NUMEROTEXTBOX).Text) <> 0 Then

  5. #5
    Ma per "mi sbaglia il conto", cosa intendi di preciso? Dà un numero
    che non è quello corretto oppure dà errori?

    Cmq fai attenzione una cosa:

    te nella if dici che se è diverso da 0 allora non ti somma il valore: questo concettualmente è sbagliato in quanto trattandosi di temperature il valore 0°C (o K o F) è contemplato: secondo me l'unica condizione nell'If è che sia diverso da "", quindi senza "val".

    Es.
    t1 = 14 °c t2 = 0° c

    Media : (14+0)/2 = 7...cosa invece che non succede nel tuo programma perchè salterebbe questo valore..

    Penso che il problema sia questo..

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Bingo! Ecco dove stava il problema!
    Grazie mille per l'aiuto, spero una volta o l'altra di poter ricambiare!!!
    Ste

  7. #7
    Non ti preoccupare..

    Cmq a prima vista sembrava tutto in regola, dichiarazioni, uso del ciclo..ma poi mi sono insospettito quando ho visto che non consideravi il fatto che una casella potesse rimanere vuota (almeno in questo codice, poi magari lo avevi fatto con le text): vedendo che avevi messo il val allora anche se la casella è vuota ti restituisce 0: ma a quel punto non veniva considerato nel calcolo della media.

    Solo per inciso: tutto ciò che hai scritto lo puoi fare anche utilizzando una sola textbox facendo uso di una matrice.


    CIAO

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Infatti....
    Il problema però di quel codice è che mi obbliga a inserire in tutti i campi textbox dei valori. Se io volessi però fare la media delle temperature in gradi centigradi solo sulle caselline contenenti effettivamente dei valori e dunque non vuote, come potrei fare?
    Scusa se approfitto.....
    Ste

  9. #9
    Figurati..non stai approfittando, anzi, spieghi molto bene il problema quindi è anche facile capire cosa chiedi e rispondere alle tue esigenze.

    Potresti fare così:

    Al posto della tua If, scrivi così (uso nomi a caso)
    codice:
    for i = 1 to 31
    if isnumeric(text1(i).text) = true then         
    'fai cosa devi fare
    end if
    Attenzione: 1° ho scritto senza vb, quindi ci sta che ci siano problemi
    2° il fatto di isnumeri serve solo se inserisci numeri interi, cioè temperature senza virgole..

    ciao

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.