IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

calcul de moyenne en écartant les variables qui sont à 0


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut calcul de moyenne en écartant les variables qui sont à 0
    Bonjour le forum,

    Je cherche une solution qui permette d'écarter les variables qui sont à 0 avant de procéder à un calcul d'une moyenne.

    j'ai 10 variables, si par exemple 2 sont à 0 il faut que le calcul ne se fasse que sur 8 variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Moy1, Moy2, Moy3, Moy4, Moy5, Moy6, Moy7, Moy8, Moy9, Moy10 As Decimal
    Merci pour votre aide.

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir Tempus01,
    Juste pour m'assurer que je comprends bine ta question, est-ce que le code suivant ferait ce que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
        Dim Moy1, Moy2, Moy3, Moy4, Moy5, Moy6, Moy7, Moy8, Moy9, Moy10 As Decimal
    ' ... ... ....
        Private Function CalculMoyenne() As Decimal
            Dim Compteur As Integer = 0
            Dim Somme As Decimal = 0
            If Moy1 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy1
            End If
            If Moy2 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy2
            End If
            If Moy3 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy3
            End If
            If Moy4 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy4
            End If
            If Moy5 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy5
            End If
            If Moy6 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy6
            End If
            If Moy7 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy7
            End If
            If Moy8 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy8
            End If
            If Moy9 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy9
            End If
            If Moy10 <> 0 Then
                Compteur = Compteur + 1
                Somme = Somme + Moy10
            End If
            Return Somme / Compteur
        End Function
    Les 10 variables Moy1 ... Moy10 me perturbent. Ne serait-il pas mieux d'avoir un tableau Dim Moy(10) As Decimal permettrait le calcul des NON zéro en une seule petite boucle.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Bonsoir Phil Rob

    "Les 10 variables Moy1 ... Moy10 me perturbent. Ne serait-il pas mieux d'avoir un tableau Dim Moy(10) As Decimal permettrait le calcul des NON zéro en une seule petite boucle."

    Créer 10 variables est la solution première qui mes venu, mais je pense que oui, il peut y avoir d'autres solutions.

    Le code me servira à afficher une ligne sur un chart (elle donnera la moyenne sur le nombre de points que l'utilisateur saisira).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       If Not String.IsNullOrWhiteSpace(V1.Text) AndAlso Not IsNumeric(V1.Text) Then
                    Moy1 = 0
                Else
                    Moy1 = CDec(V1.Text)
                End If
                If Not String.IsNullOrWhiteSpace(V2.Text) AndAlso Not IsNumeric(V2.Text) Then
                    Moy2 = 0
                Else
                    Moy2 = CDec(V2.Text)
     
    Moyenne = l'addition des points  / par le nombre de points qui ne sont pas à 0
     
    'cette moyenne me servira à afficher une ligne dans un Chart
    stripLine2.IntervalOffset = Moyenne

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Alors, en attendant de changer les Moy1 ... Moy10.. en un Moy(1) ... Moy(10), la fonction que je t'ai envoyée devrait pouvoir te servir comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
       If Not String.IsNullOrWhiteSpace(V1.Text) AndAlso Not IsNumeric(V1.Text) Then
                    Moy1 = 0
                Else
                    Moy1 = CDec(V1.Text)
                End If
                If Not String.IsNullOrWhiteSpace(V2.Text) AndAlso Not IsNumeric(V2.Text) Then
                    Moy2 = 0
                Else
                    Moy2 = CDec(V2.Text)
     
     
    Moyenne = CalculMoyenne()
     
     
    'cette moyenne me servira à afficher une ligne dans un Chart
    stripLine2.IntervalOffset = Moyenne
    Puis, si tu remplaces ta déclaration Dim Moy1, Moy2, Moy3, Moy4, Moy5, Moy6, Moy7, Moy8, Moy9, Moy10 As Decimal par Dim Moy(10) As Decimal, tu pourrras l'utiliser dans ton code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       If Not String.IsNullOrWhiteSpace(V1.Text) AndAlso Not IsNumeric(V1.Text) Then
                    Moy(1) = 0
                Else
                    Moy(1) = CDec(V1.Text)
                End If
                If Not String.IsNullOrWhiteSpace(V2.Text) AndAlso Not IsNumeric(V2.Text) Then
                    Moy(2) = 0
                Else
                    Moy(2) = CDec(V2.Text)
     
     
    Moyenne = CalculMoyenne()
     
     
    'cette moyenne me servira à afficher une ligne dans un Chart
    stripLine2.IntervalOffset = Moyenne
     
    ' ===> en remplaçant le code de ma fonction par ceci :
     
        Private Function CalculMoyenne() As Decimal
            Dim Compteur As Integer = 0
            Dim Somme As Decimal = 0
            For i As Integer = 1 To 10
                If Moy(i) <> 0 Then
                    Compteur = Compteur + 1
                    Somme = Somme + Moy1
                End If
            Next
            Return Somme / Compteur
       End Function

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 981
    Par défaut
    Il existe une solution toute prête à l'emploi en Standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Suite As Decimal() = {0, 1, 2, 3, 4}
    Dim Average As Decimal = Suite.Where(Function(x) x <> 0).Average()
    Console.WriteLine(Average)
    En remplaçant tes TextBox par des NumericUpDown, tu pourra également te passer des test sur String.IsNullOrWhiteSpace et IsNumeric.
    Il te suffira de prendre la prendre la propriété Value du NumericUpDown.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Suite As Decimal() = {V1.Value, V2.Value, V3.Value, V4.Value, V5.Value, V6.Value, V7.Value, V8.Value, V9.Value, V10.Value}
    Dim Average As Decimal = Suite.Where(Function(x) x <> 0).Average()
    MessageBox.Show(Str(Average))

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 547
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 547
    Par défaut
    Si on veut pousser encore un peu plus loin, si le nombre de valeur n'est pas forcément fixe, on pourrait boucler sur les contrôles pour initier le tableau de valeur

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/12/2022, 15h35
  2. [XL-2019] Renvoyer dans des variables les valeurs qui sont filtrées d'un tableau structuré
    Par Pilote1152 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2022, 07h41
  3. Réponses: 9
    Dernier message: 26/04/2012, 14h29
  4. Calculer une moyenne en écartant les valeurs extrêmes
    Par sophie_2525 dans le forum SAS STAT
    Réponses: 5
    Dernier message: 29/03/2012, 09h28
  5. quels sont les checkbox qui sont cochés?
    Par debutant.informatique dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 21h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo